async def _test_using_directory_sas_to_read(self): # SAS URL is calculated from storage key, so this test runs live only if TestMode.need_recording_file(self.test_mode): return client = await self._create_directory_and_get_directory_client() directory_name = client.path_name # generate a token with directory level read permission token = generate_directory_sas( self.dsc.account_name, self.file_system_name, directory_name, self.dsc.credential.account_key, permission=DirectorySasPermissions(read=True), expiry=datetime.utcnow() + timedelta(hours=1), ) directory_client = DataLakeDirectoryClient(self.dsc.url, self.file_system_name, directory_name, credential=token) access_control = await directory_client.get_access_control() self.assertIsNotNone(access_control)
def test_upload_download_data(self): registered_path = "demo-folder-allowed" invalid_path = "demo-folder-restricted" print("\nGenerating SAS for directory: {}".format(registered_path)) # generate a token for a directory with all permissions token = generate_directory_sas( self.ACCOUNT_NAME, self.STORAGE_FILESYSTEM, registered_path, self.ACCOUNT_KEY, permission=FileSystemSasPermissions(read=True,write=True,delete=True,list=True), expiry=datetime.utcnow() + timedelta(hours=1), ) # Try with a path that matches the SAS token try: self.inner_transfer(registered_path, token) except: print("Upload failed.") # Try with a path that doesnt match the SAS token. Should fail! try: self.inner_transfer(invalid_path, token) except: print("Upload failed.")
async def _test_rename_dir_with_file_sas(self): # TODO: service bug?? pytest.skip("service bug?") token = generate_directory_sas( self.dsc.account_name, self.file_system_name, "olddir", self.settings.STORAGE_DATA_LAKE_ACCOUNT_KEY, permission=DirectorySasPermissions(read=True, create=True, write=True, delete=True), expiry=datetime.utcnow() + timedelta(hours=1), ) new_token = generate_directory_sas( self.dsc.account_name, self.file_system_name, "newdir", self.settings.STORAGE_DATA_LAKE_ACCOUNT_KEY, permission=DirectorySasPermissions(read=True, create=True, write=True, delete=True), expiry=datetime.utcnow() + timedelta(hours=1), ) # read the created file which is under root directory dir_client = DataLakeDirectoryClient(self.dsc.url, self.file_system_name, "olddir", credential=token) await dir_client.create_directory() new_client = await dir_client.rename_directory( dir_client.file_system_name + '/' + 'newdir' + '?' + new_token) properties = await new_client.get_directory_properties() self.assertEqual(properties.name, "newdir")
async def _test_using_directory_sas_to_create(self): # SAS URL is calculated from storage key, so this test runs live only if TestMode.need_recording_file(self.test_mode): return # generate a token with directory level create permission directory_name = self._get_directory_reference() token = generate_directory_sas( self.dsc.account_name, self.file_system_name, directory_name, self.dsc.credential.account_key, permission=DirectorySasPermissions(create=True), expiry=datetime.utcnow() + timedelta(hours=1), ) directory_client = DataLakeDirectoryClient(self.dsc.url, self.file_system_name, directory_name, credential=token) response = await directory_client.create_directory() self.assertIsNotNone(response)
def test_using_directory_sas_to_read(self): storage_directory = "demo-folder-allowed" print("\nGenerating SAS for directory: {}".format(storage_directory)) print("\nReading contents...") # generate a token for a directory with all permissions token = generate_directory_sas( self.ACCOUNT_NAME, self.STORAGE_FILESYSTEM, storage_directory, self.ACCOUNT_KEY, permission=FileSystemSasPermissions(read=True,write=True,delete=True,list=True), expiry=datetime.utcnow() + timedelta(hours=1), ) service_client = DataLakeServiceClient(self.STORAGE_URL, credential=token) file_system_client = service_client.get_file_system_client(self.STORAGE_FILESYSTEM) paths = list(file_system_client.get_paths(storage_directory)) for p in paths: print(p.name)