@@ -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