From 6a7a13a3996fda189c32e4f8ba8bded497083c38 Mon Sep 17 00:00:00 2001 From: Jinming Hu Date: Sun, 23 Jul 2023 11:28:42 +0800 Subject: [PATCH 01/10] soft delete test --- .../test/ut/block_blob_client_test.cpp | 42 ++++++++++++++----- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/sdk/storage/azure-storage-blobs/test/ut/block_blob_client_test.cpp b/sdk/storage/azure-storage-blobs/test/ut/block_blob_client_test.cpp index c6636ea999..7c9becae2d 100644 --- a/sdk/storage/azure-storage-blobs/test/ut/block_blob_client_test.cpp +++ b/sdk/storage/azure-storage-blobs/test/ut/block_blob_client_test.cpp @@ -76,28 +76,48 @@ namespace Azure { namespace Storage { namespace Test { TEST_F(BlockBlobClientTest, SoftDelete) { - const std::string blobName = m_blobName; - auto blobClient = *m_blockBlobClient; - - std::vector emptyContent; - auto blobContent = Azure::Core::IO::MemoryBodyStream(emptyContent.data(), emptyContent.size()); - blobClient.Upload(blobContent); + auto clientOptions = InitStorageClientOptions(); + auto blobContainerClient + = Azure::Storage::Blobs::BlobContainerClient::CreateFromConnectionString( + AdlsGen2ConnectionString(), LowercaseRandomString(), clientOptions); + blobContainerClient.CreateIfNotExists(); + auto blobName = RandomString(); + auto blobClient = blobContainerClient.GetBlockBlobClient(blobName); + + blobClient.UploadFrom(nullptr, 0); + + auto getBlobItem = [&]() { + Blobs::ListBlobsOptions options; + options.Prefix = blobName; + options.Include = Blobs::Models::ListBlobsIncludeFlags::Deleted; + for (auto page = blobContainerClient.ListBlobs(options); page.HasPage(); + page.MoveToNextPage()) + { + for (auto& blob : page.Blobs) + { + if (blob.Name == blobName) + { + return std::move(blob); + } + } + } + std::abort(); + }; - auto blobItem = GetBlobItem(blobName); + auto blobItem = getBlobItem(); EXPECT_FALSE(blobItem.IsDeleted); EXPECT_FALSE(blobItem.Details.DeletedOn.HasValue()); EXPECT_FALSE(blobItem.Details.RemainingRetentionDays.HasValue()); blobClient.Delete(); - /* - // Soft delete doesn't work in storage account with versioning enabled. - blobItem = GetBlobItem(blobName, Blobs::Models::ListBlobsIncludeFlags::Deleted); + blobItem = getBlobItem(); EXPECT_TRUE(blobItem.IsDeleted); ASSERT_TRUE(blobItem.Details.DeletedOn.HasValue()); EXPECT_TRUE(IsValidTime(blobItem.Details.DeletedOn.Value())); EXPECT_TRUE(blobItem.Details.RemainingRetentionDays.HasValue()); - */ + + blobContainerClient.Delete(); } TEST_F(BlockBlobClientTest, SmallUploadDownload) From 1173f72d063a77c258d649809c9d4ae46965e40b Mon Sep 17 00:00:00 2001 From: Jinming Hu Date: Sun, 23 Jul 2023 11:30:42 +0800 Subject: [PATCH 02/10] enable setTierCold --- .../azure-storage-blobs/test/ut/block_blob_client_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/storage/azure-storage-blobs/test/ut/block_blob_client_test.cpp b/sdk/storage/azure-storage-blobs/test/ut/block_blob_client_test.cpp index 7c9becae2d..2d5b954859 100644 --- a/sdk/storage/azure-storage-blobs/test/ut/block_blob_client_test.cpp +++ b/sdk/storage/azure-storage-blobs/test/ut/block_blob_client_test.cpp @@ -818,7 +818,7 @@ namespace Azure { namespace Storage { namespace Test { blobItem.Details.RehydratePriority.Value(), Blobs::Models::RehydratePriority::Standard); } - TEST_F(BlockBlobClientTest, DISABLED_SetTierCold) + TEST_F(BlockBlobClientTest, SetTierCold) { m_blockBlobClient->SetAccessTier(Blobs::Models::AccessTier::Cold); auto properties = m_blockBlobClient->GetProperties().Value; From e25c0a04250e7775d35eebfb1f6dfb7201ed22bc Mon Sep 17 00:00:00 2001 From: Jinming Hu Date: Sun, 23 Jul 2023 11:33:04 +0800 Subject: [PATCH 03/10] IsConnectionReuse in record-playback mode --- .../azure-storage-blobs/test/ut/connection_reuse_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/storage/azure-storage-blobs/test/ut/connection_reuse_test.cpp b/sdk/storage/azure-storage-blobs/test/ut/connection_reuse_test.cpp index 790fd9c205..de5f766142 100644 --- a/sdk/storage/azure-storage-blobs/test/ut/connection_reuse_test.cpp +++ b/sdk/storage/azure-storage-blobs/test/ut/connection_reuse_test.cpp @@ -7,7 +7,7 @@ namespace Azure { namespace Storage { namespace Test { // If connection is reused, the requests with the same connection should hit the same sever. So // this test verifies whether a series of requests hit the same server. - TEST_F(BlockBlobClientTest, IsConnectionReused_LIVEONLY_) + TEST_F(BlockBlobClientTest, IsConnectionReused) { const std::string containerName = LowercaseRandomString(); const std::string blobName = LowercaseRandomString(); From 63ff100505a4839074846526ca5d1a60faff3cf1 Mon Sep 17 00:00:00 2001 From: Jinming Hu Date: Sun, 23 Jul 2023 11:49:43 +0800 Subject: [PATCH 04/10] DISABLED_UploadPagesFromUriCrc64AccessCondition --- .../test/ut/page_blob_client_test.cpp | 39 ++++++++++++++----- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/sdk/storage/azure-storage-blobs/test/ut/page_blob_client_test.cpp b/sdk/storage/azure-storage-blobs/test/ut/page_blob_client_test.cpp index d2b759af30..6350f5e65c 100644 --- a/sdk/storage/azure-storage-blobs/test/ut/page_blob_client_test.cpp +++ b/sdk/storage/azure-storage-blobs/test/ut/page_blob_client_test.cpp @@ -344,16 +344,37 @@ namespace Azure { namespace Storage { namespace Test { options2.TransactionalContentHash.Value().Value = contentMd5; EXPECT_NO_THROW(pageBlobClient2.UploadPagesFromUri( 0, pageBlobClient.GetUrl() + GetSas(), sourceRange, options2)); - options2.TransactionalContentHash.Value().Algorithm = HashAlgorithm::Crc64; - options2.TransactionalContentHash.Value().Value - = Azure::Core::Convert::Base64Decode(DummyCrc64); - // EXPECT_THROW( - // pageBlobClient2.UploadPagesFromUri( - // 0, pageBlobClient.GetUrl() + GetSas(), sourceRange, options2), - // StorageException); - options2.TransactionalContentHash.Value().Value = contentCrc64; + } + + TEST_F(PageBlobClientTest, DISABLED_UploadPagesFromUriCrc64AccessCondition) + { + auto pageBlobClient = *m_pageBlobClient; + + std::vector blobContent = RandomBuffer(static_cast(4_KB)); + const std::vector contentCrc64 + = Azure::Storage::Crc64Hash().Final(blobContent.data(), blobContent.size()); + + pageBlobClient.Create(blobContent.size()); + auto contentStream = Azure::Core::IO::MemoryBodyStream(blobContent.data(), blobContent.size()); + pageBlobClient.UploadPages(0, contentStream); + + auto pageBlobClient2 = GetPageBlobClientTestForTest(RandomString()); + pageBlobClient2.Create(blobContent.size()); + + Blobs::UploadPagesFromUriOptions options; + Azure::Core::Http::HttpRange sourceRange; + sourceRange.Offset = 0; + sourceRange.Length = blobContent.size(); + options.TransactionalContentHash = ContentHash(); + options.TransactionalContentHash.Value().Algorithm = HashAlgorithm::Crc64; + options.TransactionalContentHash.Value().Value = Azure::Core::Convert::Base64Decode(DummyCrc64); + EXPECT_THROW( + pageBlobClient2.UploadPagesFromUri( + 0, pageBlobClient.GetUrl() + GetSas(), sourceRange, options), + StorageException); + options.TransactionalContentHash.Value().Value = contentCrc64; EXPECT_NO_THROW(pageBlobClient2.UploadPagesFromUri( - 0, pageBlobClient.GetUrl() + GetSas(), sourceRange, options2)); + 0, pageBlobClient.GetUrl() + GetSas(), sourceRange, options)); } TEST_F(PageBlobClientTest, CreateIfNotExists) From dc878a93bf7dd07908acafdaa90df133c08347fe Mon Sep 17 00:00:00 2001 From: Jinming Hu Date: Tue, 25 Jul 2023 14:23:42 +0800 Subject: [PATCH 05/10] update recording assets --- sdk/storage/assets.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/storage/assets.json b/sdk/storage/assets.json index 12d8d6aa02..5dd89da62b 100644 --- a/sdk/storage/assets.json +++ b/sdk/storage/assets.json @@ -2,5 +2,5 @@ "AssetsRepo": "Azure/azure-sdk-assets", "AssetsRepoPrefixPath": "cpp", "TagPrefix": "cpp/storage", - "Tag": "cpp/storage_17c4a656fc" + "Tag": "cpp/storage_c0d4e90195" } From 39ce6f1f4fc61731f59c506c5d4791a52f732a3c Mon Sep 17 00:00:00 2001 From: Jinming Hu Date: Wed, 26 Jul 2023 14:59:53 +0800 Subject: [PATCH 06/10] ClientSecretCredentialWorks works in record-playback mode --- sdk/storage/azure-storage-common/test/ut/bearer_token_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/storage/azure-storage-common/test/ut/bearer_token_test.cpp b/sdk/storage/azure-storage-common/test/ut/bearer_token_test.cpp index 8288ef2852..7d746d54ac 100644 --- a/sdk/storage/azure-storage-common/test/ut/bearer_token_test.cpp +++ b/sdk/storage/azure-storage-common/test/ut/bearer_token_test.cpp @@ -5,7 +5,7 @@ namespace Azure { namespace Storage { namespace Test { - TEST_F(StorageTest, ClientSecretCredentialWorks_LIVEONLY_) + TEST_F(StorageTest, ClientSecretCredentialWorks) { const std::string containerName = LowercaseRandomString(); auto containerClient = Azure::Storage::Blobs::BlobContainerClient::CreateFromConnectionString( From 2b73e7e2d3446e45e5b665cc73d2184674800ed6 Mon Sep 17 00:00:00 2001 From: Jinming Hu Date: Wed, 26 Jul 2023 15:12:30 +0800 Subject: [PATCH 07/10] ServiceContainerSasPermissions and ServiceBlobSasPermissions work in record-playback mode --- .../azure-storage-blobs/test/ut/blob_sas_test.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/sdk/storage/azure-storage-blobs/test/ut/blob_sas_test.cpp b/sdk/storage/azure-storage-blobs/test/ut/blob_sas_test.cpp index 82f04974e2..8128e03c7b 100644 --- a/sdk/storage/azure-storage-blobs/test/ut/blob_sas_test.cpp +++ b/sdk/storage/azure-storage-blobs/test/ut/blob_sas_test.cpp @@ -170,7 +170,7 @@ namespace Azure { namespace Storage { namespace Test { } } - TEST_F(BlobSasTest, ServiceContainerSasPermissions_LIVEONLY_) + TEST_F(BlobSasTest, ServiceContainerSasPermissions) { auto sasStartsOn = std::chrono::system_clock::now() - std::chrono::minutes(5); auto sasExpiresOn = std::chrono::system_clock::now() + std::chrono::minutes(60); @@ -184,7 +184,8 @@ namespace Azure { namespace Storage { namespace Test { auto blobServiceClient = Blobs::BlobServiceClient( m_blobServiceClient->GetUrl(), std::make_shared( - AadTenantId(), AadClientId(), AadClientSecret())); + AadTenantId(), AadClientId(), AadClientSecret()), + InitStorageClientOptions()); userDelegationKey = blobServiceClient.GetUserDelegationKey(sasExpiresOn).Value; } @@ -279,7 +280,7 @@ namespace Azure { namespace Storage { namespace Test { } } - TEST_F(BlobSasTest, ServiceBlobSasPermissions_LIVEONLY_) + TEST_F(BlobSasTest, ServiceBlobSasPermissions) { auto sasStartsOn = std::chrono::system_clock::now() - std::chrono::minutes(5); auto sasExpiresOn = std::chrono::system_clock::now() + std::chrono::minutes(60); @@ -293,7 +294,8 @@ namespace Azure { namespace Storage { namespace Test { auto blobServiceClient = Blobs::BlobServiceClient( m_blobServiceClient->GetUrl(), std::make_shared( - AadTenantId(), AadClientId(), AadClientSecret())); + AadTenantId(), AadClientId(), AadClientSecret()), + InitStorageClientOptions()); userDelegationKey = blobServiceClient.GetUserDelegationKey(sasExpiresOn).Value; } From a0ccf75e9dd0261028b7b08012ed35b34f79d9c7 Mon Sep 17 00:00:00 2001 From: Jinming Hu Date: Wed, 26 Jul 2023 15:13:55 +0800 Subject: [PATCH 08/10] BlobServiceClientTest.UserDelegationKey works in record-playback mode --- .../azure-storage-blobs/test/ut/blob_service_client_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/storage/azure-storage-blobs/test/ut/blob_service_client_test.cpp b/sdk/storage/azure-storage-blobs/test/ut/blob_service_client_test.cpp index 26dea522ca..396d9d209f 100644 --- a/sdk/storage/azure-storage-blobs/test/ut/blob_service_client_test.cpp +++ b/sdk/storage/azure-storage-blobs/test/ut/blob_service_client_test.cpp @@ -438,7 +438,7 @@ namespace Azure { namespace Storage { namespace Test { containerClient.DeleteIfExists(); } - TEST_F(BlobServiceClientTest, UserDelegationKey_LIVEONLY_) + TEST_F(BlobServiceClientTest, UserDelegationKey) { auto serviceClient = *m_blobServiceClient; From 70f9c291ea059626ce321c6604387c709fab444b Mon Sep 17 00:00:00 2001 From: Jinming Hu Date: Wed, 26 Jul 2023 15:17:51 +0800 Subject: [PATCH 09/10] update recordings --- sdk/storage/assets.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk/storage/assets.json b/sdk/storage/assets.json index 5dd89da62b..e619a53524 100644 --- a/sdk/storage/assets.json +++ b/sdk/storage/assets.json @@ -2,5 +2,5 @@ "AssetsRepo": "Azure/azure-sdk-assets", "AssetsRepoPrefixPath": "cpp", "TagPrefix": "cpp/storage", - "Tag": "cpp/storage_c0d4e90195" + "Tag": "cpp/storage_7751666a91" } From 5fc0ffb7eafb13c442c3c3423b4efc85b11d6d86 Mon Sep 17 00:00:00 2001 From: Jinming Hu Date: Wed, 26 Jul 2023 19:34:55 +0800 Subject: [PATCH 10/10] f --- sdk/storage/assets.json | 2 +- sdk/storage/azure-storage-blobs/test/ut/blob_sas_test.cpp | 4 ++-- .../azure-storage-blobs/test/ut/blob_service_client_test.cpp | 2 +- .../azure-storage-common/test/ut/bearer_token_test.cpp | 5 +---- 4 files changed, 5 insertions(+), 8 deletions(-) diff --git a/sdk/storage/assets.json b/sdk/storage/assets.json index e619a53524..bc0ad29f3d 100644 --- a/sdk/storage/assets.json +++ b/sdk/storage/assets.json @@ -2,5 +2,5 @@ "AssetsRepo": "Azure/azure-sdk-assets", "AssetsRepoPrefixPath": "cpp", "TagPrefix": "cpp/storage", - "Tag": "cpp/storage_7751666a91" + "Tag": "cpp/storage_b920de0000" } diff --git a/sdk/storage/azure-storage-blobs/test/ut/blob_sas_test.cpp b/sdk/storage/azure-storage-blobs/test/ut/blob_sas_test.cpp index 8128e03c7b..7983b64d8a 100644 --- a/sdk/storage/azure-storage-blobs/test/ut/blob_sas_test.cpp +++ b/sdk/storage/azure-storage-blobs/test/ut/blob_sas_test.cpp @@ -184,7 +184,7 @@ namespace Azure { namespace Storage { namespace Test { auto blobServiceClient = Blobs::BlobServiceClient( m_blobServiceClient->GetUrl(), std::make_shared( - AadTenantId(), AadClientId(), AadClientSecret()), + AadTenantId(), AadClientId(), AadClientSecret(), GetTokenCredentialOptions()), InitStorageClientOptions()); userDelegationKey = blobServiceClient.GetUserDelegationKey(sasExpiresOn).Value; } @@ -294,7 +294,7 @@ namespace Azure { namespace Storage { namespace Test { auto blobServiceClient = Blobs::BlobServiceClient( m_blobServiceClient->GetUrl(), std::make_shared( - AadTenantId(), AadClientId(), AadClientSecret()), + AadTenantId(), AadClientId(), AadClientSecret(), GetTokenCredentialOptions()), InitStorageClientOptions()); userDelegationKey = blobServiceClient.GetUserDelegationKey(sasExpiresOn).Value; } diff --git a/sdk/storage/azure-storage-blobs/test/ut/blob_service_client_test.cpp b/sdk/storage/azure-storage-blobs/test/ut/blob_service_client_test.cpp index 396d9d209f..9dc0e49197 100644 --- a/sdk/storage/azure-storage-blobs/test/ut/blob_service_client_test.cpp +++ b/sdk/storage/azure-storage-blobs/test/ut/blob_service_client_test.cpp @@ -446,7 +446,7 @@ namespace Azure { namespace Storage { namespace Test { std::shared_ptr credential = std::make_shared( - AadTenantId(), AadClientId(), AadClientSecret()); + AadTenantId(), AadClientId(), AadClientSecret(), GetTokenCredentialOptions()); Blobs::BlobClientOptions options; InitStorageClientOptions(options); diff --git a/sdk/storage/azure-storage-common/test/ut/bearer_token_test.cpp b/sdk/storage/azure-storage-common/test/ut/bearer_token_test.cpp index 7d746d54ac..adf026af6a 100644 --- a/sdk/storage/azure-storage-common/test/ut/bearer_token_test.cpp +++ b/sdk/storage/azure-storage-common/test/ut/bearer_token_test.cpp @@ -11,10 +11,7 @@ namespace Azure { namespace Storage { namespace Test { auto containerClient = Azure::Storage::Blobs::BlobContainerClient::CreateFromConnectionString( StandardStorageConnectionString(), containerName); auto credential = std::make_shared( - AadTenantId(), - AadClientId(), - AadClientSecret(), - InitStorageClientOptions()); + AadTenantId(), AadClientId(), AadClientSecret(), GetTokenCredentialOptions()); containerClient = Blobs::BlobContainerClient( containerClient.GetUrl(), credential, InitStorageClientOptions());