示例#1
0
    async def test_different_bucket_different_name_link(self):
        papiea_test.logger.debug("Running test to link to different object in a different bucket")

        try:
            sdk = await provider.setup_and_register_sdk()
        except Exception as ex:
            papiea_test.logger.debug("Failed to setup/register sdk : " + str(ex))
            return

        try:
            await test_utils.cleanup()
        except Exception as ex:
            papiea_test.logger.debug("Failed cleanup : " + str(ex))
            raise Exception("Cleanup operation failed : " + str(ex))

        try:
            async with papiea_test.get_client(papiea_test.BUCKET_KIND) as bucket_entity_client:
                bucket1_name = "test-bucket1"
                bucket2_name = "test-bucket2"

                bucket1_ref = await bucket_entity_client.invoke_kind_procedure("ensure_bucket_exists", bucket1_name)
                bucket1_entity = await bucket_entity_client.get(bucket1_ref)

                bucket2_ref = await bucket_entity_client.invoke_kind_procedure("ensure_bucket_exists", bucket2_name)
                bucket2_entity = await bucket_entity_client.get(bucket2_ref)

                assert bucket1_entity.spec.name == bucket1_name
                assert len(bucket1_entity.spec.objects) == 0
                assert bucket2_entity.spec.name == bucket2_name
                assert len(bucket2_entity.spec.objects) == 0

                object1_name = "test-object1"
                object2_name = "test-object2"

                object_ref = await bucket_entity_client.invoke_procedure("create_object", bucket1_entity.metadata, object1_name)
                async with papiea_test.get_client(papiea_test.OBJECT_KIND) as object_entity_client:
                    b1_object1_entity = await object_entity_client.get(object_ref)

                bucket1_entity = await bucket_entity_client.get(bucket1_ref)

                assert len(bucket1_entity.spec.objects) == 1
                assert bucket1_entity.spec.objects[0].name == object1_name
                assert bucket1_entity.spec.objects[0].reference.uuid == b1_object1_entity.metadata.uuid
                assert b1_object1_entity.spec.content == ""

                object_input = AttributeDict(
                    object_name=object2_name,
                    object_uuid=b1_object1_entity.metadata.uuid
                )
                await bucket_entity_client.invoke_procedure("link_object", bucket2_entity.metadata, object_input)
                async with papiea_test.get_client(papiea_test.OBJECT_KIND) as object_entity_client:
                    b1_object1_entity = await object_entity_client.get(object_ref)

                bucket2_entity = await bucket_entity_client.get(bucket2_ref)

                assert len(bucket2_entity.spec.objects) == 1
                assert bucket2_entity.spec.objects[0].name == object2_name
                assert bucket2_entity.spec.objects[0].reference.uuid == b1_object1_entity.metadata.uuid
        finally:
            await sdk.server.close()
示例#2
0
    async def test_object_content_change_intent(self):
        papiea_test.logger.debug("Running test to change object content and validate intent resolver")

        try:
            sdk = await provider.setup_and_register_sdk()
        except Exception as ex:
            papiea_test.logger.debug("Failed to setup/register sdk : " + str(ex))
            return

        try:
            await test_utils.cleanup()
        except Exception as ex:
            papiea_test.logger.debug("Failed cleanup : " + str(ex))
            raise Exception("Cleanup operation failed : " + str(ex))

        try:
            async with papiea_test.get_client(papiea_test.BUCKET_KIND) as bucket_entity_client:
                bucket1_name = "test-bucket1"

                bucket_ref = await bucket_entity_client.invoke_kind_procedure("ensure_bucket_exists", bucket1_name)
                bucket1_entity = await bucket_entity_client.get(bucket_ref)

                assert bucket1_entity.spec.name == bucket1_name
                assert len(bucket1_entity.spec.objects) == 0

                object1_name = "test-object1"

                object_ref = await bucket_entity_client.invoke_procedure("create_object", bucket1_entity.metadata, object1_name)
                async with papiea_test.get_client(papiea_test.OBJECT_KIND) as object_entity_client:
                    b1_object1_entity = await object_entity_client.get(object_ref)

                    bucket1_entity = await bucket_entity_client.get(bucket_ref)

                    assert b1_object1_entity.spec.content == ""

                    obj_content = "test-content"
                    spec = Spec(
                        content=obj_content
                    )

                    callback_invoked = False
                    def cb_function(fut: asyncio.Future):
                        nonlocal callback_invoked
                        callback_invoked = True

                    watcher_ref = await object_entity_client.update(b1_object1_entity.metadata, spec)

                    watcher_status = IntentfulStatus.Completed_Successfully
                    task = asyncio.create_task(sdk.intent_watcher.wait_for_watcher_status(watcher_ref.watcher, watcher_status, 50))
                    task.add_done_callback(cb_function)

                    await asyncio.sleep(10)

                    b1_object1_entity = await object_entity_client.get(object_ref)

                    assert b1_object1_entity.spec.content == obj_content
                    assert callback_invoked == True
        finally:
            await sdk.server.close()
示例#3
0
    async def test_object_add_bucket_intent(self):
        papiea_test.logger.debug("Running test to add object to bucket and validate intent resolver")

        try:
            sdk = await provider.setup_and_register_sdk()
        except Exception as ex:
            papiea_test.logger.debug("Failed to setup/register sdk : " + str(ex))
            return

        try:
            await test_utils.cleanup()
        except Exception as ex:
            papiea_test.logger.debug("Failed cleanup : " + str(ex))
            raise Exception("Cleanup operation failed : " + str(ex))

        try:
            async with papiea_test.get_client(papiea_test.BUCKET_KIND) as bucket_entity_client:
                bucket1_name = "test-bucket1"

                bucket_ref = await bucket_entity_client.invoke_kind_procedure("ensure_bucket_exists", bucket1_name)
                bucket1_entity = await bucket_entity_client.get(bucket_ref)

                assert bucket1_entity.spec.name == bucket1_name
                assert len(bucket1_entity.spec.objects) == 0

                object1_name = "test-object1"

                object_ref = await bucket_entity_client.invoke_procedure("create_object", bucket1_entity.metadata, object1_name)
                async with papiea_test.get_client(papiea_test.OBJECT_KIND) as object_entity_client:
                    b1_object1_entity = await object_entity_client.get(object_ref)

                bucket1_entity = await bucket_entity_client.get(bucket_ref)

                assert b1_object1_entity.spec.content == ""

                retries = 10
                for _ in range(1, retries+1):
                    bucket1_entity = await bucket_entity_client.get(bucket_ref)
                    if len(bucket1_entity.status.objects) == 1:
                        break
                    time.sleep(5)

                async with papiea_test.get_client(papiea_test.OBJECT_KIND) as object_entity_client:
                    b1_object1_entity = await object_entity_client.get(object_ref)

                assert len(bucket1_entity.status.objects) == 1
                assert bucket1_entity.status.objects[0].name == object1_name
                assert bucket1_entity.status.objects[0].reference.uuid == b1_object1_entity.metadata.uuid
                assert len(b1_object1_entity.status.references) == 1
                assert b1_object1_entity.status.references[0].bucket_name == bucket1_name
                assert b1_object1_entity.status.references[0].object_name == object1_name
                assert b1_object1_entity.status.references[0].bucket_reference.uuid == bucket1_entity.metadata.uuid
        finally:
            await sdk.server.close()
示例#4
0
文件: utils.py 项目: shlomiv/papiea
async def print_kinds_data():
    async with papiea_test.get_client(papiea_test.BUCKET_KIND) as bucket_entity_client:
        try:
            print(await bucket_entity_client.get_all())
        except:
            papiea_test.logger.debug("Failed to fetch the buckets")
            pass
    async with papiea_test.get_client(papiea_test.OBJECT_KIND) as object_entity_client:
        try:
            print(await object_entity_client.get_all())
        except:
            papiea_test.logger.debug("Failed to fetch the objects")
            pass
示例#5
0
    async def test_object_create_intent(self):
        papiea_test.logger.debug("Running test to create object and validate intent resolver")

        try:
            sdk = await provider.setup_and_register_sdk()
        except Exception as ex:
            papiea_test.logger.debug("Failed to setup/register sdk : " + str(ex))
            return

        try:
            await test_utils.cleanup()
        except Exception as ex:
            papiea_test.logger.debug("Failed cleanup : " + str(ex))
            raise Exception("Cleanup operation failed : " + str(ex))

        try:
            async with papiea_test.get_client(papiea_test.OBJECT_KIND) as object_entity_client:

                object_ref = await object_entity_client.create(
                    {"content": "test",
                     "owner": "nutanix"}
                )

                object_entity = await object_entity_client.get(object_ref.metadata)

                assert object_entity.spec.content == "test"
                assert object_entity.status.content == "test"
                assert object_entity.status.size == 4
                assert len(object_entity.status.references) == 0
        finally:
            await sdk.server.close()
示例#6
0
    async def test_bucket_create_intent(self):
        papiea_test.logger.debug("Running test to create bucket and validate intent resolver")

        try:
            sdk = await provider.setup_and_register_sdk()
        except Exception as ex:
            papiea_test.logger.debug("Failed to setup/register sdk : " + str(ex))
            return

        try:
            await test_utils.cleanup()
        except Exception as ex:
            papiea_test.logger.debug("Failed cleanup : " + str(ex))
            raise Exception("Cleanup operation failed : " + str(ex))

        try:
            async with papiea_test.get_client(papiea_test.BUCKET_KIND) as bucket_entity_client:
                bucket1_name = "test-bucket1"

                bucket_ref = await bucket_entity_client.create(
                    {"name": bucket1_name, "objects": list(),
                     "owner": "nutanix"}
                )

                bucket_entity = await bucket_entity_client.get(bucket_ref.metadata)

                assert bucket_entity.spec.name == bucket1_name
                assert len(bucket_entity.status.objects) == 0
                assert bucket_entity.spec.name == bucket1_name
                assert len(bucket_entity.status.objects) == 0
        finally:
            await sdk.server.close()
示例#7
0
    async def test_non_existent_object_unlink(self):
        papiea_test.logger.debug("Running test to unlink from a non-existing object")

        try:
            sdk = await provider.setup_and_register_sdk()
        except Exception as ex:
            papiea_test.logger.debug("Failed to setup/register sdk : " + str(ex))
            return

        try:
            await test_utils.cleanup()
        except Exception as ex:
            papiea_test.logger.debug("Failed cleanup : " + str(ex))
            raise Exception("Cleanup operation failed : " + str(ex))

        try:
            async with papiea_test.get_client(papiea_test.BUCKET_KIND) as bucket_entity_client:
                bucket1_name = "test-bucket1"

                bucket_ref = await bucket_entity_client.invoke_kind_procedure("ensure_bucket_exists", bucket1_name)
                bucket1_entity = await bucket_entity_client.get(bucket_ref)

                assert bucket1_entity.spec.name == bucket1_name
                assert len(bucket1_entity.spec.objects) == 0

                object1_name = "test-object1"
                await bucket_entity_client.invoke_procedure("unlink_object", bucket1_entity.metadata, object1_name)
        except Exception as ex:
            papiea_test.logger.debug("Failed to perform entity operation : " + str(ex))
            assert str(ex) == "Object not found in the bucket"
        finally:
            await sdk.server.close()
示例#8
0
    async def test_duplicate_bucket_create(self):
        papiea_test.logger.debug("Running test to create a duplicate bucket")

        try:
            sdk = await provider.setup_and_register_sdk()
        except Exception as ex:
            papiea_test.logger.debug("Failed to setup/register sdk : " + str(ex))
            return

        try:
            await test_utils.cleanup()
        except Exception as ex:
            papiea_test.logger.debug("Failed cleanup : " + str(ex))
            raise Exception("Cleanup operation failed : " + str(ex))

        try:
            async with papiea_test.get_client(papiea_test.BUCKET_KIND) as bucket_entity_client:
                bucket1_name = "test-bucket1"

                bucket_ref = await bucket_entity_client.invoke_kind_procedure("ensure_bucket_exists", bucket1_name)
                bucket1_entity = await bucket_entity_client.get(bucket_ref)

                assert bucket1_entity.spec.name == bucket1_name
                assert len(bucket1_entity.spec.objects) == 0

                bucket_ref = await bucket_entity_client.invoke_kind_procedure("ensure_bucket_exists", bucket1_name)
                bucket1_entity = await bucket_entity_client.get(bucket_ref)

                assert bucket1_entity.spec.name == bucket1_name
                assert len(bucket1_entity.spec.objects) == 0
        finally:
            await sdk.server.close()
示例#9
0
async def on_object_removed_handler(ctx, entity_bucket, diff):
    try:
        papiea_test.logger.debug(
            "Executing object removed from bucket intent handler...")

        async with papiea_test.get_client(
                papiea_test.OBJECT_KIND) as object_entity_client:
            for entity in diff:
                entity_object = await object_entity_client.get(
                    AttributeDict(uuid=entity.status[0].reference.uuid))

                entity_object.status.references[:] = [
                    d for d in entity_object.status.references
                    if d.get("object_name") != entity.status[0].name
                    or d.get("bucket_name") != entity_bucket.spec.name
                ]

                if not entity_object.status.references:
                    papiea_test.logger.debug(
                        "Object refcount is zero. Deleting the object...")
                    await object_entity_client.delete(entity_object.metadata)
                else:
                    await ctx.update_status(entity_object.metadata,
                                            entity_object.status)

        entity_bucket.status.objects = entity_bucket.spec.objects
        await ctx.update_status(entity_bucket.metadata, entity_bucket.status)
    except:
        raise
示例#10
0
async def bucket_name_handler(ctx, entity_bucket, diff):
    # fetch unique uuids for the objects in the bucket
    # for each uuid, get the object references list
    # iterate and update bucket name if bucket ref match is found
    # update all such object entities

    try:
        papiea_test.logger.debug(
            "Executing bucket name change intent handler...")

        object_uuid_set = set()
        for obj in entity_bucket.spec.objects:
            object_uuid_set.add(obj.reference.uuid)

        async with papiea_test.get_client(
                papiea_test.OBJECT_KIND) as object_entity_client:
            for object_uuid in object_uuid_set:
                entity_object = await object_entity_client.get(
                    AttributeDict(uuid=object_uuid))

                for i in range(len(entity_object.status.references)):
                    if entity_object.status.references[
                            i].bucket_reference.uuid == entity_bucket.metadata.uuid:
                        entity_object.status.references[
                            i].bucket_name = entity_bucket.spec.name

                await ctx.update_status(entity_object.metadata,
                                        entity_object.status)

        entity_bucket.status.name = entity_bucket.spec.name
        await ctx.update_status(entity_bucket.metadata, entity_bucket.status)
    except:
        raise
示例#11
0
文件: utils.py 项目: shlomiv/papiea
async def cleanup():
    async with papiea_test.get_client(papiea_test.OBJECT_KIND) as object_entity_client:
        try:
            object_list = await object_entity_client.get_all()
            for obj in object_list:
                await object_entity_client.delete(obj.metadata)
        except:
            raise

    async with papiea_test.get_client(papiea_test.BUCKET_KIND) as bucket_entity_client:
        try:
            bucket_list = await bucket_entity_client.get_all()
            for bucket in bucket_list:
                await bucket_entity_client.delete(bucket.metadata)
        except:
            raise
示例#12
0
    async def test_duplicate_object_create(self):
        papiea_test.logger.debug("Running test to create a duplicate object in same bucket")

        try:
            sdk = await provider.setup_and_register_sdk()
        except Exception as ex:
            papiea_test.logger.debug("Failed to setup/register sdk : " + str(ex))
            return

        try:
            await test_utils.cleanup()
        except Exception as ex:
            papiea_test.logger.debug("Failed cleanup : " + str(ex))
            raise Exception("Cleanup operation failed : " + str(ex))

        try:
            async with papiea_test.get_client(papiea_test.BUCKET_KIND) as bucket_entity_client:
                bucket1_name = "test-bucket1"

                bucket_ref = await bucket_entity_client.invoke_kind_procedure("ensure_bucket_exists", bucket1_name)
                bucket1_entity = await bucket_entity_client.get(bucket_ref)

                assert bucket1_entity.spec.name == bucket1_name
                assert len(bucket1_entity.spec.objects) == 0

                object1_name = "test-object1"

                object_ref = await bucket_entity_client.invoke_procedure("create_object", bucket1_entity.metadata, object1_name)
                async with papiea_test.get_client(papiea_test.OBJECT_KIND) as object_entity_client:
                    b1_object1_entity = await object_entity_client.get(object_ref)

                assert b1_object1_entity.spec.content == ""

                await bucket_entity_client.invoke_procedure("create_object", bucket1_entity.metadata, object1_name)
        except Exception as ex:
            papiea_test.logger.debug("Failed to perform entity operation : " + str(ex))
            assert str(ex) == "Object already exists in the bucket"
        finally:
            await sdk.server.close()
示例#13
0
async def on_object_added_handler(ctx, entity_bucket, diff):
    try:
        papiea_test.logger.debug(
            "Executing object added to bucket intent handler...")

        async with papiea_test.get_client(
                papiea_test.OBJECT_KIND) as object_entity_client:
            for entity in diff:
                entity_object = await object_entity_client.get(
                    AttributeDict(uuid=entity.spec[0].reference.uuid))

                entity_object.status.references.append(
                    AttributeDict(bucket_name=entity_bucket.spec.name,
                                  object_name=entity.spec[0].name,
                                  bucket_reference=AttributeDict(
                                      uuid=entity_bucket.metadata.uuid,
                                      kind=papiea_test.BUCKET_KIND)))
                await ctx.update_status(entity_object.metadata,
                                        entity_object.status)

        entity_bucket.status.objects = entity_bucket.spec.objects
        await ctx.update_status(entity_bucket.metadata, entity_bucket.status)
    except:
        raise