Skip to content

Commit 1acf0ba

Browse files
authored
Storage/Added x-ms-file-request-intent to PutRangeFromUrl (Azure#5042)
* Added x-ms-file-request-itent to PutRangeFromUrl * update test * update test case
1 parent 21978a6 commit 1acf0ba

File tree

6 files changed

+75
-3
lines changed

6 files changed

+75
-3
lines changed

sdk/storage/assets.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
"AssetsRepo": "Azure/azure-sdk-assets",
33
"AssetsRepoPrefixPath": "cpp",
44
"TagPrefix": "cpp/storage",
5-
"Tag": "cpp/storage_f9007be11f"
5+
"Tag": "cpp/storage_5ae381f797"
66
}

sdk/storage/azure-storage-files-shares/inc/azure/storage/files/shares/rest_client.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2551,6 +2551,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
25512551
Nullable<Models::FileLastWrittenMode> FileLastWrittenMode;
25522552
Nullable<bool> AllowTrailingDot;
25532553
Nullable<bool> AllowSourceTrailingDot;
2554+
Nullable<Models::ShareTokenIntent> FileRequestIntent;
25542555
};
25552556
static Response<Models::UploadFileRangeFromUriResult> UploadRangeFromUri(
25562557
Core::Http::_internal::HttpPipeline& pipeline,

sdk/storage/azure-storage-files-shares/src/rest_client.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3678,6 +3678,11 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
36783678
"x-ms-source-allow-trailing-dot",
36793679
options.AllowSourceTrailingDot.Value() ? "true" : "false");
36803680
}
3681+
if (options.FileRequestIntent.HasValue()
3682+
&& !options.FileRequestIntent.Value().ToString().empty())
3683+
{
3684+
request.SetHeader("x-ms-file-request-intent", options.FileRequestIntent.Value().ToString());
3685+
}
36813686
auto pRawResponse = pipeline.Send(request, context);
36823687
auto httpStatusCode = pRawResponse->GetStatusCode();
36833688
if (httpStatusCode != Core::Http::HttpStatusCode::Created)

sdk/storage/azure-storage-files-shares/src/share_file_client.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1271,6 +1271,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares {
12711271
+ std::string("-") + std::to_string(sourceRange.Offset + sourceRange.Length.Value() - 1);
12721272
protocolLayerOptions.AllowTrailingDot = m_allowTrailingDot;
12731273
protocolLayerOptions.AllowSourceTrailingDot = m_allowSourceTrailingDot;
1274+
protocolLayerOptions.FileRequestIntent = m_shareTokenIntent;
12741275
if (!options.SourceAuthorization.empty())
12751276
{
12761277
protocolLayerOptions.CopySourceAuthorization = options.SourceAuthorization;

sdk/storage/azure-storage-files-shares/swagger/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ package-name: azure-storage-files-shares
99
namespace: Azure::Storage::Files::Shares
1010
output-folder: generated
1111
clear-output-folder: true
12-
input-file: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/storage/data-plane/Microsoft.FileStorage/preview/2023-01-03/file.json
12+
input-file: https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/storage/data-plane/Microsoft.FileStorage/preview/2023-08-03/file.json
1313
```
1414
1515
## ModelFour Options

sdk/storage/azure-storage-files-shares/test/ut/share_file_client_test.cpp

Lines changed: 66 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1163,7 +1163,7 @@ namespace Azure { namespace Storage { namespace Test {
11631163
}
11641164
}
11651165

1166-
TEST_F(FileShareFileClientTest, OAuthUploadRangeFromUri)
1166+
TEST_F(FileShareFileClientTest, SourceOAuthUploadRangeFromUri)
11671167
{
11681168
size_t fileSize = 1 * 1024;
11691169
std::string containerName = LowercaseRandomString();
@@ -1221,6 +1221,71 @@ namespace Azure { namespace Storage { namespace Test {
12211221
EXPECT_NO_THROW(containerClient.Delete());
12221222
}
12231223

1224+
TEST_F(FileShareFileClientTest, DestinationOAuthUploadRangeFromUri_PLAYBACKONLY_)
1225+
{
1226+
size_t fileSize = 1 * 1024;
1227+
std::string containerName = LowercaseRandomString();
1228+
std::string blobName = RandomString();
1229+
std::vector<uint8_t> blobContent = RandomBuffer(fileSize);
1230+
auto memBodyStream = Core::IO::MemoryBodyStream(blobContent);
1231+
1232+
auto containerClient = Storage::Blobs::BlobContainerClient::CreateFromConnectionString(
1233+
StandardStorageConnectionString(),
1234+
containerName,
1235+
InitStorageClientOptions<Storage::Blobs::BlobClientOptions>());
1236+
containerClient.Create();
1237+
auto sourceBlobClient = containerClient.GetBlockBlobClient(blobName);
1238+
sourceBlobClient.Upload(memBodyStream);
1239+
1240+
std::shared_ptr<Azure::Core::Credentials::TokenCredential> oauthCredential
1241+
= std::make_shared<Azure::Identity::ClientSecretCredential>(
1242+
AadTenantId(),
1243+
AadClientId(),
1244+
AadClientSecret(),
1245+
InitStorageClientOptions<Azure::Identity::ClientSecretCredentialOptions>());
1246+
auto clientOptions = InitStorageClientOptions<Files::Shares::ShareClientOptions>();
1247+
clientOptions.ShareTokenIntent = Files::Shares::Models::ShareTokenIntent::Backup;
1248+
1249+
auto destFileClient
1250+
= Files::Shares::ShareClient(m_shareClient->GetUrl(), oauthCredential, clientOptions)
1251+
.GetRootDirectoryClient()
1252+
.GetFileClient(RandomString());
1253+
1254+
destFileClient.Create(fileSize * 4);
1255+
Azure::Core::Http::HttpRange sourceRange;
1256+
Azure::Core::Http::HttpRange destRange;
1257+
sourceRange.Length = fileSize;
1258+
destRange.Length = fileSize;
1259+
1260+
// Get oauth token of source file
1261+
Azure::Core::Credentials::TokenRequestContext requestContext;
1262+
requestContext.Scopes = {Storage::_internal::StorageScope};
1263+
auto oauthToken = oauthCredential->GetToken(requestContext, Azure::Core::Context());
1264+
1265+
Files::Shares::UploadFileRangeFromUriOptions options;
1266+
options.SourceAuthorization = "Bearer " + oauthToken.Token;
1267+
Files::Shares::Models::UploadFileRangeFromUriResult uploadResult;
1268+
EXPECT_NO_THROW(
1269+
uploadResult
1270+
= destFileClient
1271+
.UploadRangeFromUri(destRange.Offset, sourceBlobClient.GetUrl(), sourceRange, options)
1272+
.Value);
1273+
1274+
Files::Shares::Models::DownloadFileResult result;
1275+
Files::Shares::DownloadFileOptions downloadOptions;
1276+
downloadOptions.Range = destRange;
1277+
EXPECT_NO_THROW(result = destFileClient.Download(downloadOptions).Value);
1278+
auto resultBuffer = result.BodyStream->ReadToEnd(Core::Context());
1279+
EXPECT_EQ(blobContent, resultBuffer);
1280+
Files::Shares::Models::GetFileRangeListResult getRangeResult;
1281+
EXPECT_NO_THROW(getRangeResult = destFileClient.GetRangeList().Value);
1282+
EXPECT_EQ(1U, getRangeResult.Ranges.size());
1283+
EXPECT_TRUE(getRangeResult.Ranges[0].Length.HasValue());
1284+
EXPECT_EQ(static_cast<int64_t>(fileSize), getRangeResult.Ranges[0].Length.Value());
1285+
1286+
EXPECT_NO_THROW(containerClient.Delete());
1287+
}
1288+
12241289
TEST_F(FileShareFileClientTest, UploadFromWithOptions)
12251290
{
12261291
auto fileClient = m_shareClient->GetRootDirectoryClient().GetFileClient(RandomString());

0 commit comments

Comments
 (0)