Example #1
0
    async def test_creation_request_options_era_being_called(self):
        # pylint: disable=protected-access
        test_config = CosmosDbConfig(
            endpoint="https://localhost:8081",
            masterkey=
            "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==",
            database="test-db",
            container="bot-storage",
            database_creation_options={"OfferThroughput": 1000},
            container_creation_options={"OfferThroughput": 500},
        )

        test_id = "1"
        client = get_mock_client(identifier=test_id)
        storage = CosmosDbStorage(test_config, client)
        storage.database = test_id

        assert storage._get_or_create_database(doc_client=client,
                                               id=test_id), test_id
        client.CreateDatabase.assert_called_with(
            {"id": test_id}, test_config.database_creation_options)
        assert storage._get_or_create_container(doc_client=client,
                                                container=test_id), test_id
        client.CreateContainer.assert_called_with(
            "dbs/" + test_id, {"id": test_id},
            test_config.container_creation_options)
Example #2
0
 async def test_cosmos_storage_read_no_key_should_throw(self):
     try:
         await reset()
         storage = CosmosDbStorage(COSMOS_DB_CONFIG)
         await storage.read([])
     except Exception as error:
         assert error
Example #3
0
async def reset():
    storage = CosmosDbStorage(COSMOS_DB_CONFIG)
    try:
        storage.client.DeleteDatabase(database_link="dbs/" +
                                      COSMOS_DB_CONFIG.database)
    except cosmos_errors.HTTPFailure:
        pass
    async def test_cosmos_storage_read_with_invalid_key_should_return_empty_dict(self):
        await reset()
        storage = CosmosDbStorage(cosmos_db_config)
        data = await storage.read(['test'])

        assert type(data) == dict
        assert len(data.keys()) == 0
 async def test_cosmos_storage_init_should_work_with_just_endpoint_and_key(self):
     storage = CosmosDbStorage(CosmosDbConfig(endpoint=cosmos_db_config.endpoint, masterkey=cosmos_db_config.masterkey))
     await storage.write({'user': SimpleStoreItem()})
     data = await storage.read(['user'])
     assert 'user' in data
     assert data['user'].counter == 1
     assert len(data.keys()) == 1
Example #6
0
 async def test_cosmos_storage_read_no_key_should_throw(self):
     try:
         await reset()
         storage = CosmosDbStorage(cosmos_db_config)
         await storage.read([])
     except Exception as e:
         assert e
Example #7
0
async def reset():
    storage = CosmosDbStorage(cosmos_db_config)
    try:
        storage.client.DeleteDatabase(database_link='dbs/' +
                                      cosmos_db_config.database)
    except cosmos_errors.HTTPFailure:
        pass
Example #8
0
    async def test_cosmos_storage_write_should_add_new_value(self):
        await reset()
        storage = CosmosDbStorage(cosmos_db_config)
        await storage.write({'user': SimpleStoreItem(counter=1)})

        data = await storage.read(['user'])
        assert 'user' in data
        assert data['user'].counter == 1
    async def test_cosmos_storage_delete_invalid_keys_should_do_nothing_and_not_affect_cached_data(self):
        await reset()
        storage = CosmosDbStorage(cosmos_db_config)
        await storage.write({'test': SimpleStoreItem()})

        await storage.delete(['foo', 'bar'])
        data = await storage.read(['test'])
        assert len(data.keys()) == 1
    async def test_cosmos_storage_delete_should_delete_multiple_values_when_given_multiple_valid_keys(self):
        await reset()
        storage = CosmosDbStorage(cosmos_db_config)
        await storage.write({'test': SimpleStoreItem(), 'test2': SimpleStoreItem(2)})

        await storage.delete(['test', 'test2'])
        data = await storage.read(['test', 'test2'])
        assert len(data.keys()) == 0
    async def test_cosmos_storage_write_should_overwrite_when_new_e_tag_is_an_asterisk(self):
        await reset()
        storage = CosmosDbStorage(cosmos_db_config)
        await storage.write({'user': SimpleStoreItem()})

        await storage.write({'user': SimpleStoreItem(counter=10, e_tag='*')})
        data = await storage.read(['user'])
        assert data['user'].counter == 10
Example #12
0
    async def test_cosmos_storage_read_with_invalid_key_should_return_empty_dict(
            self):
        await reset()
        storage = CosmosDbStorage(COSMOS_DB_CONFIG)
        data = await storage.read(["test"])

        assert isinstance(data, dict)
        assert not data.keys()
Example #13
0
    async def test_cosmos_storage_write_should_add_new_value(self):
        await reset()
        storage = CosmosDbStorage(COSMOS_DB_CONFIG)
        await storage.write({"user": SimpleStoreItem(counter=1)})

        data = await storage.read(["user"])
        assert "user" in data
        assert data["user"].counter == 1
Example #14
0
    async def test_cosmos_storage_delete_invalid_keys_should_do_nothing_and_not_affect_cached_data(
            self):
        await reset()
        storage = CosmosDbStorage(COSMOS_DB_CONFIG)
        await storage.write({"test": SimpleStoreItem()})

        await storage.delete(["foo", "bar"])
        data = await storage.read(["test"])
        assert len(data.keys()) == 1
Example #15
0
    async def test_cosmos_storage_read_should_return_data_with_valid_key(self):
        await reset()
        storage = CosmosDbStorage(COSMOS_DB_CONFIG)
        await storage.write({"user": SimpleStoreItem()})

        data = await storage.read(["user"])
        assert "user" in data
        assert data["user"].counter == 1
        assert len(data.keys()) == 1
Example #16
0
    async def test_cosmos_storage_write_should_overwrite_when_new_e_tag_is_an_asterisk(
            self):
        await reset()
        storage = CosmosDbStorage(COSMOS_DB_CONFIG)
        await storage.write({"user": SimpleStoreItem()})

        await storage.write({"user": SimpleStoreItem(counter=10, e_tag="*")})
        data = await storage.read(["user"])
        assert data["user"].counter == 10
Example #17
0
    async def test_cosmos_storage_read_should_return_data_with_valid_key(self):
        await reset()
        storage = CosmosDbStorage(cosmos_db_config)
        await storage.write({'user': SimpleStoreItem()})

        data = await storage.read(['user'])
        assert 'user' in data
        assert data['user'].counter == 1
        assert len(data.keys()) == 1
Example #18
0
 async def test_cosmos_storage_init_should_work_with_just_endpoint_and_key(
         self):
     storage = CosmosDbStorage(
         CosmosDbConfig(endpoint=COSMOS_DB_CONFIG.endpoint,
                        masterkey=COSMOS_DB_CONFIG.masterkey))
     await storage.write({"user": SimpleStoreItem()})
     data = await storage.read(["user"])
     assert "user" in data
     assert data["user"].counter == 1
     assert len(data.keys()) == 1
Example #19
0
 async def test_cosmos_storage_write_crazy_keys_work(self):
     await reset()
     storage = CosmosDbStorage(COSMOS_DB_CONFIG)
     crazy_key = '!@#$%^&*()_+??><":QASD~`'
     await storage.write({crazy_key: SimpleStoreItem(counter=1)})
     data = await storage.read([crazy_key])
     assert len(data.keys()) == 1
     assert data[crazy_key]
     assert data[crazy_key].counter == 1
     assert data[crazy_key].e_tag
Example #20
0
 async def test_cosmos_storage_read_update_should_return_new_etag(self):
     await reset()
     storage = CosmosDbStorage(COSMOS_DB_CONFIG)
     await storage.write({"test": SimpleStoreItem(counter=1)})
     data_result = await storage.read(["test"])
     data_result["test"].counter = 2
     await storage.write(data_result)
     data_updated = await storage.read(["test"])
     assert data_updated["test"].counter == 2
     assert data_updated["test"].e_tag != data_result["test"].e_tag
Example #21
0
 async def test_cosmos_storage_read_update_should_return_new_etag(self):
     await reset()
     storage = CosmosDbStorage(cosmos_db_config)
     await storage.write({'test': SimpleStoreItem(counter=1)})
     data_result = await storage.read(['test'])
     data_result['test'].counter = 2
     await storage.write(data_result)
     data_updated = await storage.read(['test'])
     assert data_updated['test'].counter == 2
     assert data_updated['test'].e_tag != data_result['test'].e_tag
Example #22
0
    async def test_cosmos_storage_delete_should_delete_multiple_values_when_given_multiple_valid_keys(
            self):
        await reset()
        storage = CosmosDbStorage(COSMOS_DB_CONFIG)
        await storage.write({
            "test": SimpleStoreItem(),
            "test2": SimpleStoreItem(2)
        })

        await storage.delete(["test", "test2"])
        data = await storage.read(["test", "test2"])
        assert not data.keys()
Example #23
0
    async def test_cosmos_storage_delete_should_delete_values_when_given_multiple_valid_keys_and_ignore_other_data(
            self):
        await reset()
        storage = CosmosDbStorage(COSMOS_DB_CONFIG)
        await storage.write({
            "test": SimpleStoreItem(),
            "test2": SimpleStoreItem(counter=2),
            "test3": SimpleStoreItem(counter=3),
        })

        await storage.delete(["test", "test2"])
        data = await storage.read(["test", "test2", "test3"])
        assert len(data.keys()) == 1
    async def test_cosmos_storage_delete_should_delete_according_cached_data(self):
        await reset()
        storage = CosmosDbStorage(cosmos_db_config)
        await storage.write({'test': SimpleStoreItem()})
        try:
            await storage.delete(['test'])
        except Exception as e:
            raise e
        else:
            data = await storage.read(['test'])

            assert type(data) == dict
            assert len(data.keys()) == 0
Example #25
0
    async def test_cosmos_storage_delete_should_delete_according_cached_data(
            self):
        await reset()
        storage = CosmosDbStorage(COSMOS_DB_CONFIG)
        await storage.write({"test": SimpleStoreItem()})
        try:
            await storage.delete(["test"])
        except Exception as error:
            raise error
        else:
            data = await storage.read(["test"])

            assert isinstance(data, dict)
            assert not data.keys()
Example #26
0
    async def test_creation_request_options_era_being_called(self):
        test_config = CosmosDbConfig(
            endpoint='https://localhost:8081',
            masterkey=
            'C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==',
            database='test-db',
            container='bot-storage',
            database_creation_options={'OfferThroughput': 1000},
            container_creation_options={'OfferThroughput': 500})

        test_id = '1'
        client = get_mock_client(id=test_id)
        storage = CosmosDbStorage(test_config, client)
        storage.db = test_id

        assert storage._get_or_create_database(doc_client=client,
                                               id=test_id), test_id
        client.CreateDatabase.assert_called_with(
            {'id': test_id}, test_config.database_creation_options)
        assert storage._get_or_create_container(doc_client=client,
                                                container=test_id), test_id
        client.CreateContainer.assert_called_with(
            'dbs/' + test_id, {'id': test_id},
            test_config.container_creation_options)
Example #27
0
 async def test_cosmos_storage_write_batch_operation(self):
     await reset()
     storage = CosmosDbStorage(COSMOS_DB_CONFIG)
     await storage.write({
         "batch1": SimpleStoreItem(counter=1),
         "batch2": SimpleStoreItem(counter=1),
         "batch3": SimpleStoreItem(counter=1),
     })
     data = await storage.read(["batch1", "batch2", "batch3"])
     assert len(data.keys()) == 3
     assert data["batch1"]
     assert data["batch2"]
     assert data["batch3"]
     assert data["batch1"].counter == 1
     assert data["batch2"].counter == 1
     assert data["batch3"].counter == 1
     assert data["batch1"].e_tag
     assert data["batch2"].e_tag
     assert data["batch3"].e_tag
     await storage.delete(["batch1", "batch2", "batch3"])
     data = await storage.read(["batch1", "batch2", "batch3"])
     assert not data.keys()
Example #28
0
 async def test_cosmos_storage_write_batch_operation(self):
     await reset()
     storage = CosmosDbStorage(cosmos_db_config)
     await storage.write({
         'batch1': SimpleStoreItem(counter=1),
         'batch2': SimpleStoreItem(counter=1),
         'batch3': SimpleStoreItem(counter=1)
     })
     data = await storage.read(['batch1', 'batch2', 'batch3'])
     assert len(data.keys()) == 3
     assert data['batch1']
     assert data['batch2']
     assert data['batch3']
     assert data['batch1'].counter == 1
     assert data['batch2'].counter == 1
     assert data['batch3'].counter == 1
     assert data['batch1'].e_tag
     assert data['batch2'].e_tag
     assert data['batch3'].e_tag
     await storage.delete(['batch1', 'batch2', 'batch3'])
     data = await storage.read(['batch1', 'batch2', 'batch3'])
     assert len(data.keys()) == 0
Example #29
0
from botbuilder.azure import CosmosDbConfig, CosmosDbStorage

app = Flask(__name__)
loop = asyncio.get_event_loop()

botadaptersettings = BotFrameworkAdapterSettings("", "")
botadapter = BotFrameworkAdapter(botadaptersettings)

memstore = MemoryStorage()
constate = ConversationState(memstore)
#userstate = UserState(memstore)

key = "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=="
cosconfig = CosmosDbConfig("https://*****:*****@app.route("/api/messages", methods=["POST"])
def messages():
    if "application/json" in request.headers["content-type"]:
        jsonmessage = request.json
    else:
        return Response(status=415)

    activity = Activity().deserialize(jsonmessage)

    async def turn_call(turn_context):
        await sbot.on_turn(turn_context)
Example #30
0
 async def test_cosmos_storage_init_should_error_without_cosmos_db_config(
         self):
     try:
         CosmosDbStorage(CosmosDbConfig())
     except Exception as error:
         assert error