diff --git a/sdk/storage/azure-storage-blob/assets.json b/sdk/storage/azure-storage-blob/assets.json
index f94cd70f1a2d..000375f36025 100644
--- a/sdk/storage/azure-storage-blob/assets.json
+++ b/sdk/storage/azure-storage-blob/assets.json
@@ -2,5 +2,5 @@
"AssetsRepo": "Azure/azure-sdk-assets",
"AssetsRepoPrefixPath": "python",
"TagPrefix": "python/storage/azure-storage-blob",
- "Tag": "python/storage/azure-storage-blob_16c5acad24"
+ "Tag": "python/storage/azure-storage-blob_365db1596b"
}
diff --git a/sdk/storage/azure-storage-blob/tests/conftest.py b/sdk/storage/azure-storage-blob/tests/conftest.py
index 5925851aebb9..fcd64db13d4c 100644
--- a/sdk/storage/azure-storage-blob/tests/conftest.py
+++ b/sdk/storage/azure-storage-blob/tests/conftest.py
@@ -31,3 +31,7 @@ def add_sanitizers(test_proxy):
add_general_regex_sanitizer(regex=r'"EncryptionLibrary": "Python .*?"', value='"EncryptionLibrary": "Python x.x.x"')
add_uri_regex_sanitizer(regex=r"\.preprod\.", value=".")
+ add_uri_regex_sanitizer(
+ regex=r"([?&]sktid=)[^]+",
+ value=r"\g<1>00000000-0000-0000-0000-000000000000",
+ )
diff --git a/sdk/storage/azure-storage-blob/tests/test_block_blob.py b/sdk/storage/azure-storage-blob/tests/test_block_blob.py
index f6c3e0205cc3..be679816e824 100644
--- a/sdk/storage/azure-storage-blob/tests/test_block_blob.py
+++ b/sdk/storage/azure-storage-blob/tests/test_block_blob.py
@@ -1984,4 +1984,82 @@ def test_upload_blob_copy_source_error_and_status_code(self, **kwargs):
finally:
self.bsc.delete_container(self.container_name)
+ @BlobPreparer()
+ @recorded_by_proxy
+ def test_stage_block_from_url_uds(self, **kwargs):
+ storage_account_name = kwargs.pop("storage_account_name")
+ variables = kwargs.pop("variables", {})
+
+ token_credential = self.get_credential(BlobServiceClient)
+ service = BlobServiceClient(self.account_url(storage_account_name, "blob"), credential=token_credential)
+ container_name, blob_name = self.get_resource_name('oauthcontainer'), self.get_resource_name('oauthblob')
+ container = service.create_container(container_name)
+ blob = container.get_blob_client(blob_name)
+
+ start = self.get_datetime_variable(variables, 'start', datetime.utcnow())
+ expiry = self.get_datetime_variable(variables, 'expiry', datetime.utcnow() + timedelta(hours=1))
+ user_delegation_key = service.get_user_delegation_key(key_start_time=start, key_expiry_time=expiry)
+ dst_sas = self.generate_sas(
+ generate_blob_sas,
+ blob.account_name,
+ blob.container_name,
+ blob.blob_name,
+ user_delegation_key=user_delegation_key,
+ permission=BlobSasPermissions(create=True),
+ expiry=expiry,
+ )
+ dst_blob = BlobClient.from_blob_url(f"{blob.url}?{dst_sas}")
+
+ src_blob_name = self.get_resource_name('oauthblob2')
+ src_sas = self.generate_sas(
+ generate_blob_sas,
+ blob.account_name,
+ blob.container_name,
+ src_blob_name,
+ user_delegation_key=user_delegation_key,
+ permission=BlobSasPermissions(read=True, add=True, create=True, write=True, delete=True),
+ expiry=expiry,
+ )
+ data = b"abc123"
+ src_blob = BlobClient.from_blob_url(f"{container.url}/{src_blob_name}?{src_sas}")
+ src_blob.upload_blob(data)
+
+ dst_blob.stage_block_from_url('1', src_blob.url)
+
+ return variables
+
+ @BlobPreparer()
+ @recorded_by_proxy
+ def test_commit_block_list_uds(self, **kwargs):
+ storage_account_name = kwargs.pop("storage_account_name")
+ variables = kwargs.pop("variables", {})
+
+ token_credential = self.get_credential(BlobServiceClient)
+ service = BlobServiceClient(self.account_url(storage_account_name, "blob"), credential=token_credential)
+ container_name, blob_name = self.get_resource_name('oauthcontainer'), self.get_resource_name('oauthblob')
+ container = service.create_container(container_name)
+ blob = container.get_blob_client(blob_name)
+
+ start = self.get_datetime_variable(variables, 'start', datetime.utcnow())
+ expiry = self.get_datetime_variable(variables, 'expiry', datetime.utcnow() + timedelta(hours=1))
+ user_delegation_key = service.get_user_delegation_key(key_start_time=start, key_expiry_time=expiry)
+ sas = self.generate_sas(
+ generate_blob_sas,
+ blob.account_name,
+ blob.container_name,
+ blob.blob_name,
+ user_delegation_key=user_delegation_key,
+ permission=BlobSasPermissions(create=True),
+ expiry=expiry,
+ )
+
+ identity_blob = BlobClient.from_blob_url(f"{blob.url}?{sas}")
+ identity_blob.stage_block('1', b'AAA')
+ identity_blob.stage_block('2', b'BBB')
+ identity_blob.stage_block('3', b'CCC')
+ block_list = [BlobBlock(block_id='3'), BlobBlock(block_id='2'), BlobBlock(block_id='1')]
+ identity_blob.commit_block_list(block_list=block_list)
+
+ return variables
+
#------------------------------------------------------------------------------
diff --git a/sdk/storage/azure-storage-blob/tests/test_block_blob_async.py b/sdk/storage/azure-storage-blob/tests/test_block_blob_async.py
index 46f3db2e50b3..360a9f90ba6c 100644
--- a/sdk/storage/azure-storage-blob/tests/test_block_blob_async.py
+++ b/sdk/storage/azure-storage-blob/tests/test_block_blob_async.py
@@ -2102,4 +2102,88 @@ async def test_upload_blob_copy_source_error_and_status_code(self, **kwargs):
finally:
await self.bsc.delete_container(self.container_name)
+ @BlobPreparer()
+ @recorded_by_proxy_async
+ async def test_stage_block_from_url_uds(self, **kwargs):
+ storage_account_name = kwargs.pop("storage_account_name")
+ variables = kwargs.pop("variables", {})
+
+ token_credential = self.get_credential(BlobServiceClient, is_async=True)
+ service = BlobServiceClient(
+ self.account_url(storage_account_name, "blob"),
+ credential=token_credential
+ )
+ container_name, blob_name = self.get_resource_name('oauthcontainer'), self.get_resource_name('oauthblob')
+ container = await service.create_container(container_name)
+ blob = container.get_blob_client(blob_name)
+
+ start = self.get_datetime_variable(variables, 'start', datetime.utcnow())
+ expiry = self.get_datetime_variable(variables, 'expiry', datetime.utcnow() + timedelta(hours=1))
+ user_delegation_key = await service.get_user_delegation_key(key_start_time=start, key_expiry_time=expiry)
+ dst_sas = self.generate_sas(
+ generate_blob_sas,
+ blob.account_name,
+ blob.container_name,
+ blob.blob_name,
+ user_delegation_key=user_delegation_key,
+ permission=BlobSasPermissions(create=True),
+ expiry=expiry,
+ )
+ dst_blob = BlobClient.from_blob_url(f"{blob.url}?{dst_sas}")
+
+ src_blob_name = self.get_resource_name('oauthblob2')
+ src_sas = self.generate_sas(
+ generate_blob_sas,
+ blob.account_name,
+ blob.container_name,
+ src_blob_name,
+ user_delegation_key=user_delegation_key,
+ permission=BlobSasPermissions(read=True, add=True, create=True, write=True, delete=True),
+ expiry=expiry,
+ )
+ data = b"abc123"
+ src_blob = BlobClient.from_blob_url(f"{container.url}/{src_blob_name}?{src_sas}")
+ await src_blob.upload_blob(data)
+
+ await dst_blob.stage_block_from_url('1', src_blob.url)
+
+ return variables
+
+ @BlobPreparer()
+ @recorded_by_proxy_async
+ async def test_commit_block_list_uds(self, **kwargs):
+ storage_account_name = kwargs.pop("storage_account_name")
+ variables = kwargs.pop("variables", {})
+
+ token_credential = self.get_credential(BlobServiceClient, is_async=True)
+ service = BlobServiceClient(
+ self.account_url(storage_account_name, "blob"),
+ credential=token_credential
+ )
+ container_name, blob_name = self.get_resource_name('oauthcontainer'), self.get_resource_name('oauthblob')
+ container = await service.create_container(container_name)
+ blob = container.get_blob_client(blob_name)
+
+ start = self.get_datetime_variable(variables, 'start', datetime.utcnow())
+ expiry = self.get_datetime_variable(variables, 'expiry', datetime.utcnow() + timedelta(hours=1))
+ user_delegation_key = await service.get_user_delegation_key(key_start_time=start, key_expiry_time=expiry)
+ sas = self.generate_sas(
+ generate_blob_sas,
+ blob.account_name,
+ blob.container_name,
+ blob.blob_name,
+ user_delegation_key=user_delegation_key,
+ permission=BlobSasPermissions(create=True),
+ expiry=expiry,
+ )
+
+ identity_blob = BlobClient.from_blob_url(f"{blob.url}?{sas}")
+ await blob.stage_block('1', b'AAA')
+ await blob.stage_block('2', b'BBB')
+ await blob.stage_block('3', b'CCC')
+ block_list = [BlobBlock(block_id='3'), BlobBlock(block_id='2'), BlobBlock(block_id='1')]
+ await identity_blob.commit_block_list(block_list=block_list)
+
+ return variables
+
# ------------------------------------------------------------------------------
diff --git a/sdk/storage/azure-storage-file-share/tests/conftest.py b/sdk/storage/azure-storage-file-share/tests/conftest.py
index 66cd7dd21ae2..6df952e979c1 100644
--- a/sdk/storage/azure-storage-file-share/tests/conftest.py
+++ b/sdk/storage/azure-storage-file-share/tests/conftest.py
@@ -33,3 +33,7 @@ def add_sanitizers(test_proxy):
add_body_regex_sanitizer(regex=r".*?", value="0.0.0.0:0")
add_uri_string_sanitizer(target=".preprod.", value=".")
+ add_uri_regex_sanitizer(
+ regex=r"([?&]sktid=)[^]+",
+ value=r"\g<1>00000000-0000-0000-0000-000000000000",
+ )
diff --git a/sdk/storage/azure-storage-queue/tests/conftest.py b/sdk/storage/azure-storage-queue/tests/conftest.py
index ca09905c2ca6..341f181de4cd 100644
--- a/sdk/storage/azure-storage-queue/tests/conftest.py
+++ b/sdk/storage/azure-storage-queue/tests/conftest.py
@@ -33,3 +33,7 @@ def add_sanitizers(test_proxy):
add_general_regex_sanitizer(regex=r'"EncryptionLibrary": "Python .*?"', value='"EncryptionLibrary": "Python x.x.x"')
add_uri_string_sanitizer(target=".preprod.", value=".")
+ add_uri_regex_sanitizer(
+ regex=r"([?&]sktid=)[^]+",
+ value=r"\g<1>00000000-0000-0000-0000-000000000000",
+ )