def test_create_service_with_token(self): url = self.account_url(self.tables_storage_account_name, "table") suffix = '.table.core.windows.net' self.token_credential = self.generate_fake_token() service = TableClient(url, credential=self.token_credential, table_name='foo') # Assert assert service is not None assert service.account_name == self.tables_storage_account_name assert service.url.startswith('https://' + self.tables_storage_account_name + suffix) assert service.credential == self.token_credential assert not hasattr(service.credential, 'account_key') assert hasattr(service.credential, 'get_token') service = TableServiceClient(url, credential=self.token_credential, table_name='foo') # Assert assert service is not None assert service.account_name == self.tables_storage_account_name assert service.url.startswith('https://' + self.tables_storage_account_name + suffix) assert service.credential == self.token_credential assert not hasattr(service.credential, 'account_key') assert hasattr(service.credential, 'get_token')
def test_create_service_with_custom_account_endpoint_path(self): self.sas_token = self.generate_sas_token() custom_account_url = "http://local-machine:11002/custom/account/path/" + self.sas_token for service_type in SERVICES.items(): conn_string = 'DefaultEndpointsProtocol=http;AccountName={};AccountKey={};TableEndpoint={};'.format( self.tables_cosmos_account_name, self.tables_primary_cosmos_account_key, custom_account_url) # Act service = service_type[0].from_connection_string(conn_string, table_name="foo") # Assert assert service.account_name == self.tables_cosmos_account_name assert service.credential.account_name == self.tables_cosmos_account_name assert service.credential.account_key == self.tables_primary_cosmos_account_key assert service._primary_hostname == 'local-machine:11002/custom/account/path' service = TableServiceClient(account_url=custom_account_url) assert service.account_name == None assert service.credential == None assert service._primary_hostname == 'local-machine:11002/custom/account/path' # mine doesnt have a question mark at the end assert service.url.startswith('http://local-machine:11002/custom/account/path') service = TableClient(account_url=custom_account_url, table_name="foo") assert service.account_name == None assert service.table_name == "foo" assert service.credential == None assert service._primary_hostname == 'local-machine:11002/custom/account/path' assert service.url.startswith('http://local-machine:11002/custom/account/path') service = TableClient.from_table_url("http://local-machine:11002/custom/account/path/foo" + self.sas_token) assert service.account_name == None assert service.table_name == "foo" assert service.credential == None assert service._primary_hostname == 'local-machine:11002/custom/account/path' assert service.url.startswith('http://local-machine:11002/custom/account/path')
def test_table_name_errors(self, tables_storage_account_name, tables_primary_storage_account_key): endpoint = self.account_url(tables_storage_account_name, "table") # storage table names must be alphanumeric, cannot begin with a number, and must be between 3 and 63 chars long. invalid_table_names = ["1table", "a" * 2, "a" * 64, "a//", "my_table"] for invalid_name in invalid_table_names: client = TableClient(endpoint=endpoint, credential=tables_primary_storage_account_key, table_name=invalid_name) with pytest.raises(ValueError) as error: client.create_table() assert 'Storage table names must be alphanumeric' in str( error.value) with pytest.raises(ValueError) as error: client.create_entity({'PartitionKey': 'foo', 'RowKey': 'bar'}) assert 'Storage table names must be alphanumeric' in str( error.value) with pytest.raises(ValueError) as error: client.upsert_entity({'PartitionKey': 'foo', 'RowKey': 'foo'}) assert 'Storage table names must be alphanumeric' in str( error.value) with pytest.raises(ValueError) as error: client.delete_entity("PK", "RK") assert 'Storage table names must be alphanumeric' in str( error.value) with pytest.raises(ValueError) as error: client.get_table_access_policy() assert 'Storage table names must be alphanumeric' in str( error.value) with pytest.raises(ValueError): batch = [] batch.append(('upsert', {'PartitionKey': 'A', 'RowKey': 'B'})) client.submit_transaction(batch) assert 'Storage table names must be alphanumeric' in str( error.value)
def test_create_client_for_azurite(self): azurite_credential = AzureNamedKeyCredential("myaccount", self.tables_primary_storage_account_key) http_connstr = "DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey={};TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;".format( self.tables_primary_storage_account_key ) https_connstr = "DefaultEndpointsProtocol=https;AccountName=devstoreaccount1;AccountKey={};TableEndpoint=https://127.0.0.1:10002/devstoreaccount1;".format( self.tables_primary_storage_account_key ) account_url = "https://127.0.0.1:10002/myaccount" client = TableServiceClient(account_url, credential=azurite_credential) assert client.account_name == "myaccount" assert client.url == "https://127.0.0.1:10002/myaccount" assert client._location_mode == "primary" assert client._secondary_endpoint == "https://127.0.0.1:10002/myaccount-secondary" assert client.credential.named_key.key == azurite_credential.named_key.key assert client.credential.named_key.name == azurite_credential.named_key.name assert not client._cosmos_endpoint client = TableServiceClient.from_connection_string(http_connstr) assert client.account_name == "devstoreaccount1" assert client.url == "http://127.0.0.1:10002/devstoreaccount1" assert client._location_mode == "primary" assert client._secondary_endpoint == "http://127.0.0.1:10002/devstoreaccount1-secondary" assert client.credential.named_key.key == self.tables_primary_storage_account_key assert client.credential.named_key.name == "devstoreaccount1" assert not client._cosmos_endpoint client = TableServiceClient.from_connection_string(https_connstr) assert client.account_name == "devstoreaccount1" assert client.url == "https://127.0.0.1:10002/devstoreaccount1" assert client._location_mode == "primary" assert client._secondary_endpoint == "https://127.0.0.1:10002/devstoreaccount1-secondary" assert client.credential.named_key.key == self.tables_primary_storage_account_key assert client.credential.named_key.name == "devstoreaccount1" assert not client._cosmos_endpoint table = TableClient(account_url, "tablename", credential=azurite_credential) assert table.account_name == "myaccount" assert table.table_name == "tablename" assert table.url == "https://127.0.0.1:10002/myaccount" assert table._location_mode == "primary" assert table._secondary_endpoint == "https://127.0.0.1:10002/myaccount-secondary" assert table.credential.named_key.key == azurite_credential.named_key.key assert table.credential.named_key.name == azurite_credential.named_key.name assert not table._cosmos_endpoint table = TableClient.from_connection_string(http_connstr, "tablename") assert table.account_name == "devstoreaccount1" assert table.table_name == "tablename" assert table.url == "http://127.0.0.1:10002/devstoreaccount1" assert table._location_mode == "primary" assert table._secondary_endpoint == "http://127.0.0.1:10002/devstoreaccount1-secondary" assert table.credential.named_key.key == self.tables_primary_storage_account_key assert table.credential.named_key.name == "devstoreaccount1" assert not table._cosmos_endpoint table = TableClient.from_connection_string(https_connstr, "tablename") assert table.account_name == "devstoreaccount1" assert table.table_name == "tablename" assert table.url == "https://127.0.0.1:10002/devstoreaccount1" assert table._location_mode == "primary" assert table._secondary_endpoint == "https://127.0.0.1:10002/devstoreaccount1-secondary" assert table.credential.named_key.key == self.tables_primary_storage_account_key assert table.credential.named_key.name == "devstoreaccount1" assert not table._cosmos_endpoint table_url = "https://127.0.0.1:10002/myaccount/Tables('tablename')" table = TableClient.from_table_url(table_url, azurite_credential) assert table.account_name == "myaccount" assert table.table_name == "tablename" assert table.url == "https://127.0.0.1:10002/myaccount" assert table._location_mode == "primary" assert table._secondary_endpoint == "https://127.0.0.1:10002/myaccount-secondary" assert table.credential.named_key.key == azurite_credential.named_key.key assert table.credential.named_key.name == azurite_credential.named_key.name assert not table._cosmos_endpoint