diff --git a/sdk/storage/azure-storage-files-shares/CHANGELOG.md b/sdk/storage/azure-storage-files-shares/CHANGELOG.md index d54a21a92..5a89847ef 100644 --- a/sdk/storage/azure-storage-files-shares/CHANGELOG.md +++ b/sdk/storage/azure-storage-files-shares/CHANGELOG.md @@ -7,6 +7,7 @@ - Added support for `UploadRangeFromUri` in file client. - Added support for `SetProperties` in share client. This API supports update share tier and adjusting share's quota. - Added support to get share's tier status in `ListSharesSinglePage` and `GetProperties`. +- Added `ChangedOn`, `FileId`, `ParentId` to the `FileShareSmbProperties`. ### Breaking Changes @@ -25,6 +26,9 @@ - `Concurrency`, `ChunkSize` and `InitialChunkSize` were moved into `DownloadShareFileToOptions::TansferOptions`. - `Concurrency`, `ChunkSize` and `SingleUploadThreshold` were moved into `UploadShareFileFromOptions::TransferOptions`. - Removed `SetQuota` related API, result and options. The functionality is moved into `SetProperties`. +- Moved some less commonly used properties returned when downloading a file into a new structure called `DownloadShareFileDetails`. This will impact the return type of `ShareFileClient::Download` and `ShareFileClient::DownloadTo`. +- Renamed `FileProperty` to `FileItemDetails` to align with other SDK's naming pattern for returned items for list operation. +- Renamed `ShareProperties` to `ShareItemDetails` to align with other SDK's naming pattern for returned items for list operation. ### Other Changes and Improvements diff --git a/sdk/storage/azure-storage-files-shares/inc/azure/storage/files/shares/protocol/share_rest_client.hpp b/sdk/storage/azure-storage-files-shares/inc/azure/storage/files/shares/protocol/share_rest_client.hpp index 9135a9702..767f3cc8e 100644 --- a/sdk/storage/azure-storage-files-shares/inc/azure/storage/files/shares/protocol/share_rest_client.hpp +++ b/sdk/storage/azure-storage-files-shares/inc/azure/storage/files/shares/protocol/share_rest_client.hpp @@ -152,7 +152,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares { }; // File properties. - struct FileProperty + struct FileItemDetails { int64_t ContentLength = int64_t(); // Content length of the file. This value may not be up-to-date since an SMB @@ -165,7 +165,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares { struct FileItem { std::string Name; - FileProperty Properties; + FileItemDetails Details; }; // A listed Azure Storage handle item. @@ -234,7 +234,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares { }; // extensible enum LeaseStatusType // Properties of a share. - struct ShareProperties + struct ShareItemDetails { Core::DateTime LastModified; Core::ETag Etag; @@ -260,7 +260,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares { std::string Snapshot; bool Deleted = bool(); std::string Version; - ShareProperties Properties; + ShareItemDetails Details; Storage::Metadata ShareMetadata; }; @@ -2104,9 +2104,9 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares { return result; } - static ShareProperties SharePropertiesFromXml(Storage::Details::XmlReader& reader) + static ShareItemDetails ShareItemDetailsFromXml(Storage::Details::XmlReader& reader) { - auto result = ShareProperties(); + auto result = ShareItemDetails(); enum class XmlTagName { AccessTier, @@ -2390,7 +2390,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares { if (path.size() == 1 && path[0] == XmlTagName::Properties) { - result.Properties = SharePropertiesFromXml(reader); + result.Details = ShareItemDetailsFromXml(reader); path.pop_back(); } else if (path.size() == 1 && path[0] == XmlTagName::Metadata) @@ -4668,9 +4668,9 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares { return result; } - static FileProperty FilePropertyFromXml(Storage::Details::XmlReader& reader) + static FileItemDetails FileItemDetailsFromXml(Storage::Details::XmlReader& reader) { - auto result = FileProperty(); + auto result = FileItemDetails(); enum class XmlTagName { ContentLength, @@ -4766,7 +4766,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares { if (path.size() == 1 && path[0] == XmlTagName::Properties) { - result.Properties = FilePropertyFromXml(reader); + result.Details = FileItemDetailsFromXml(reader); path.pop_back(); } } diff --git a/sdk/storage/azure-storage-files-shares/inc/azure/storage/files/shares/share_responses.hpp b/sdk/storage/azure-storage-files-shares/inc/azure/storage/files/shares/share_responses.hpp index 736c6e3c7..590d0bb6e 100644 --- a/sdk/storage/azure-storage-files-shares/inc/azure/storage/files/shares/share_responses.hpp +++ b/sdk/storage/azure-storage-files-shares/inc/azure/storage/files/shares/share_responses.hpp @@ -135,20 +135,84 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares { names FileAttributes Attributes = static_cast(0); /** - * @brief Creation time for the file/directory.. + * @brief Creation time for the file/directory. */ Azure::Core::Nullable CreatedOn; /** - * @brief Last write time for the file/directory.. + * @brief Last write time for the file/directory. */ Azure::Core::Nullable LastWrittenOn; + + /** + * @brief Changed time for the file/directory. + */ + Azure::Core::Nullable ChangedOn; + + /** + * @brief The fileId of the file. + */ + std::string FileId; + + /** + * @brief The parentId of the file + */ + std::string ParentId; + }; + + struct DownloadShareFileDetails + { + Core::DateTime LastModified; + Storage::Metadata Metadata; + Core::ETag ETag; + std::string AcceptRanges; + Azure::Core::Nullable CopyCompletedOn; + Azure::Core::Nullable CopyStatusDescription; + Azure::Core::Nullable CopyId; + Azure::Core::Nullable CopyProgress; + Azure::Core::Nullable CopySource; + Azure::Core::Nullable CopyStatus; + bool IsServerEncrypted = bool(); + FileShareSmbProperties SmbProperties; + Azure::Core::Nullable LeaseDuration; + Azure::Core::Nullable LeaseState; + Azure::Core::Nullable LeaseStatus; + }; + + struct DownloadShareFileResult + { + std::unique_ptr BodyStream; + Azure::Core::Http::Range ContentRange; + int64_t FileSize; + Azure::Core::Nullable TransactionalContentHash; + ShareFileHttpHeaders HttpHeaders; + DownloadShareFileDetails Details; + std::string RequestId; }; - using DownloadShareFileResult = Details::FileDownloadResult; using StartCopyShareFileResult = Details::FileStartCopyResult; using AbortCopyShareFileResult = Details::FileAbortCopyResult; - using GetShareFilePropertiesResult = Details::FileGetPropertiesResult; + struct GetShareFilePropertiesResult + { + Core::DateTime LastModified; + Storage::Metadata Metadata; + std::string FileType; + int64_t FileSize = int64_t(); + ShareFileHttpHeaders HttpHeaders; + Core::ETag ETag; + std::string RequestId; + Azure::Core::Nullable CopyCompletedOn; + Azure::Core::Nullable CopyStatusDescription; + Azure::Core::Nullable CopyId; + Azure::Core::Nullable CopyProgress; + Azure::Core::Nullable CopySource; + Azure::Core::Nullable CopyStatus; + bool IsServerEncrypted = bool(); + FileShareSmbProperties SmbProperties; + Azure::Core::Nullable LeaseDuration; + Azure::Core::Nullable LeaseState; + Azure::Core::Nullable LeaseStatus; + }; using SetShareFilePropertiesResult = Details::FileSetHttpHeadersResult; using ResizeFileResult = Details::FileSetHttpHeadersResult; using SetShareFileMetadataResult = Details::FileSetMetadataResult; @@ -161,13 +225,10 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares { names struct DownloadShareFileToResult { - Azure::Core::ETag ETag; - Core::DateTime LastModified; - int64_t ContentLength = 0; + int64_t FileSize; + Azure::Core::Http::Range ContentRange; ShareFileHttpHeaders HttpHeaders; - Storage::Metadata Metadata; - bool IsServerEncrypted = false; - std::string RequestId; + DownloadShareFileDetails Details; }; struct ForceCloseShareFileHandleResult diff --git a/sdk/storage/azure-storage-files-shares/sample/file_share_getting_started.cpp b/sdk/storage/azure-storage-files-shares/sample/file_share_getting_started.cpp index 10b8513b7..e6fc9f79f 100644 --- a/sdk/storage/azure-storage-files-shares/sample/file_share_getting_started.cpp +++ b/sdk/storage/azure-storage-files-shares/sample/file_share_getting_started.cpp @@ -39,7 +39,7 @@ void FileShareGettingStarted() { std::cout << metadata.first << ":" << metadata.second << std::endl; } - fileContent.resize(static_cast(properties.ContentLength)); + fileContent.resize(static_cast(properties.FileSize)); fileClient.DownloadTo(reinterpret_cast(&fileContent[0]), fileContent.size()); diff --git a/sdk/storage/azure-storage-files-shares/src/share_file_client.cpp b/sdk/storage/azure-storage-files-shares/src/share_file_client.cpp index b222d58e8..b7152ee46 100644 --- a/sdk/storage/azure-storage-files-shares/src/share_file_client.cpp +++ b/sdk/storage/azure-storage-files-shares/src/share_file_client.cpp @@ -287,7 +287,7 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares { } auto newResponse = Download(newOptions); - if (eTag != newResponse->ETag) + if (eTag != newResponse->Details.ETag) { throw Azure::Core::RequestFailedException( "File was changed during the download process."); @@ -300,7 +300,36 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares { downloadResponse->BodyStream = std::make_unique( std::move(downloadResponse->BodyStream), reliableStreamOptions, retryFunction); } - return downloadResponse; + Models::DownloadShareFileResult ret; + ret.BodyStream = std::move(downloadResponse->BodyStream); + ret.ContentRange = std::move(downloadResponse->ContentRange); + ret.FileSize = downloadResponse->FileSize; + ret.TransactionalContentHash = std::move(downloadResponse->TransactionalContentHash); + ret.HttpHeaders = std::move(downloadResponse->HttpHeaders); + ret.Details.LastModified = std::move(downloadResponse->LastModified); + ret.Details.Metadata = std::move(downloadResponse->Metadata); + ret.Details.ETag = std::move(downloadResponse->ETag); + ret.Details.AcceptRanges = std::move(downloadResponse->AcceptRanges); + ret.Details.CopyCompletedOn = std::move(downloadResponse->CopyCompletedOn); + ret.Details.CopyStatusDescription = std::move(downloadResponse->CopyStatusDescription); + ret.Details.CopyId = std::move(downloadResponse->CopyId); + ret.Details.CopyProgress = std::move(downloadResponse->CopyProgress); + ret.Details.CopySource = std::move(downloadResponse->CopySource); + ret.Details.CopyStatus = std::move(downloadResponse->CopyStatus); + ret.Details.IsServerEncrypted = downloadResponse->IsServerEncrypted; + ret.Details.SmbProperties.Attributes + = Details::FileAttributesListFromString(downloadResponse->FileAttributes); + ret.Details.SmbProperties.CreatedOn = std::move(downloadResponse->FileCreatedOn); + ret.Details.SmbProperties.LastWrittenOn = std::move(downloadResponse->FileLastWrittenOn); + ret.Details.SmbProperties.ChangedOn = std::move(downloadResponse->FileChangedOn); + ret.Details.SmbProperties.PermissionKey = std::move(downloadResponse->FilePermissionKey); + ret.Details.SmbProperties.FileId = std::move(downloadResponse->FileId); + ret.Details.SmbProperties.ParentId = std::move(downloadResponse->FileParentId); + ret.Details.LeaseDuration = std::move(downloadResponse->LeaseDuration); + ret.Details.LeaseState = std::move(downloadResponse->LeaseState); + ret.Details.LeaseStatus = std::move(downloadResponse->LeaseStatus); + return Azure::Core::Response( + std::move(ret), downloadResponse.ExtractRawResponse()); } Azure::Core::Response ShareFileClient::StartCopy( @@ -380,8 +409,33 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares { { auto protocolLayerOptions = Details::ShareRestClient::File::GetPropertiesOptions(); protocolLayerOptions.LeaseIdOptional = options.AccessConditions.LeaseId; - return Details::ShareRestClient::File::GetProperties( + auto result = Details::ShareRestClient::File::GetProperties( m_shareFileUrl, *m_pipeline, options.Context, protocolLayerOptions); + Models::GetShareFilePropertiesResult ret; + ret.FileSize = result->ContentLength; + ret.HttpHeaders = std::move(result->HttpHeaders); + ret.LastModified = std::move(result->LastModified); + ret.Metadata = std::move(result->Metadata); + ret.ETag = std::move(result->ETag); + ret.CopyCompletedOn = std::move(result->CopyCompletedOn); + ret.CopyStatusDescription = std::move(result->CopyStatusDescription); + ret.CopyId = std::move(result->CopyId); + ret.CopyProgress = std::move(result->CopyProgress); + ret.CopySource = std::move(result->CopySource); + ret.CopyStatus = std::move(result->CopyStatus); + ret.IsServerEncrypted = result->IsServerEncrypted; + ret.SmbProperties.Attributes = Details::FileAttributesListFromString(result->FileAttributes); + ret.SmbProperties.CreatedOn = std::move(result->FileCreatedOn); + ret.SmbProperties.LastWrittenOn = std::move(result->FileLastWrittenOn); + ret.SmbProperties.ChangedOn = std::move(result->FileChangedOn); + ret.SmbProperties.PermissionKey = std::move(result->FilePermissionKey); + ret.SmbProperties.FileId = std::move(result->FileId); + ret.SmbProperties.ParentId = std::move(result->FileParentId); + ret.LeaseDuration = std::move(result->LeaseDuration); + ret.LeaseState = std::move(result->LeaseState); + ret.LeaseStatus = std::move(result->LeaseStatus); + return Azure::Core::Response( + std::move(ret), result.ExtractRawResponse()); } Azure::Core::Response ShareFileClient::SetProperties( @@ -632,11 +686,9 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares { auto returnTypeConverter = [](Azure::Core::Response& response) { Models::DownloadShareFileToResult ret; - ret.ETag = std::move(response->ETag); - ret.LastModified = std::move(response->LastModified); + ret.FileSize = response->FileSize; ret.HttpHeaders = std::move(response->HttpHeaders); - ret.Metadata = std::move(response->Metadata); - ret.IsServerEncrypted = response->IsServerEncrypted; + ret.Details = std::move(response->Details); return Azure::Core::Response( std::move(ret), response.ExtractRawResponse()); }; @@ -676,7 +728,8 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares { options.TransferOptions.ChunkSize, options.TransferOptions.Concurrency, downloadChunkFunc); - ret->ContentLength = fileRangeSize; + ret->ContentRange.Offset = firstChunkOffset; + ret->ContentRange.Length = fileRangeSize; return ret; } @@ -753,11 +806,9 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares { auto returnTypeConverter = [](Azure::Core::Response& response) { Models::DownloadShareFileToResult ret; - ret.ETag = std::move(response->ETag); - ret.LastModified = std::move(response->LastModified); + ret.FileSize = response->FileSize; ret.HttpHeaders = std::move(response->HttpHeaders); - ret.Metadata = std::move(response->Metadata); - ret.IsServerEncrypted = response->IsServerEncrypted; + ret.Details = std::move(response->Details); return Azure::Core::Response( std::move(ret), response.ExtractRawResponse()); }; @@ -794,7 +845,8 @@ namespace Azure { namespace Storage { namespace Files { namespace Shares { options.TransferOptions.ChunkSize, options.TransferOptions.Concurrency, downloadChunkFunc); - ret->ContentLength = fileRangeSize; + ret->ContentRange.Offset = firstChunkOffset; + ret->ContentRange.Length = fileRangeSize; return ret; } diff --git a/sdk/storage/azure-storage-files-shares/test/share_client_test.cpp b/sdk/storage/azure-storage-files-shares/test/share_client_test.cpp index 9215a5ebd..e83bab9c8 100644 --- a/sdk/storage/azure-storage-files-shares/test/share_client_test.cpp +++ b/sdk/storage/azure-storage-files-shares/test/share_client_test.cpp @@ -453,19 +453,18 @@ namespace Azure { namespace Storage { namespace Test { { EXPECT_TRUE(shareClients.find(shareItem.Name) != shareClients.end()); properties = *shareClients.at(shareItem.Name).GetProperties(); - EXPECT_EQ( - true, shareItem.Properties.AccessTier.HasValue() && properties.AccessTier.HasValue()); - EXPECT_EQ(shareItem.Properties.AccessTier.GetValue(), properties.AccessTier.GetValue()); + EXPECT_EQ(true, shareItem.Details.AccessTier.HasValue() && properties.AccessTier.HasValue()); + EXPECT_EQ(shareItem.Details.AccessTier.GetValue(), properties.AccessTier.GetValue()); EXPECT_EQ( true, - shareItem.Properties.AccessTierChangeTime.HasValue() + shareItem.Details.AccessTierChangeTime.HasValue() && properties.AccessTierChangeTime.HasValue()); EXPECT_EQ( - shareItem.Properties.AccessTierChangeTime.GetValue(), + shareItem.Details.AccessTierChangeTime.GetValue(), properties.AccessTierChangeTime.GetValue()); EXPECT_EQ( false, - shareItem.Properties.AccessTierTransitionState.HasValue() + shareItem.Details.AccessTierTransitionState.HasValue() || properties.AccessTierTransitionState.HasValue()); } } @@ -491,9 +490,9 @@ namespace Azure { namespace Storage { namespace Test { EXPECT_EQ(1U, shareItems.size()); EXPECT_EQ( Files::Shares::Models::ShareAccessTier::Premium, - shareItems[0].Properties.AccessTier.GetValue()); - EXPECT_FALSE(shareItems[0].Properties.AccessTierTransitionState.HasValue()); - EXPECT_FALSE(shareItems[0].Properties.AccessTierChangeTime.HasValue()); + shareItems[0].Details.AccessTier.GetValue()); + EXPECT_FALSE(shareItems[0].Details.AccessTierTransitionState.HasValue()); + EXPECT_FALSE(shareItems[0].Details.AccessTierChangeTime.HasValue()); auto setPropertiesOptions = Files::Shares::SetSharePropertiesOptions(); setPropertiesOptions.AccessTier = Files::Shares::Models::ShareAccessTier::Hot; diff --git a/sdk/storage/azure-storage-files-shares/test/share_directory_client_test.cpp b/sdk/storage/azure-storage-files-shares/test/share_directory_client_test.cpp index 11491cbfc..48cc5c8fa 100644 --- a/sdk/storage/azure-storage-files-shares/test/share_directory_client_test.cpp +++ b/sdk/storage/azure-storage-files-shares/test/share_directory_client_test.cpp @@ -381,7 +381,7 @@ namespace Azure { namespace Storage { namespace Test { result.first.end(), [&name](const Files::Shares::Models::FileItem& item) { return item.Name == name; }); EXPECT_EQ(iter->Name, name); - EXPECT_EQ(1024, iter->Properties.ContentLength); + EXPECT_EQ(1024, iter->Details.ContentLength); EXPECT_NE(result.first.end(), iter); } for (const auto& name : directoryNameSetB) diff --git a/sdk/storage/azure-storage-files-shares/test/share_file_client_test.cpp b/sdk/storage/azure-storage-files-shares/test/share_file_client_test.cpp index dcf0c9aac..634fcf1d3 100644 --- a/sdk/storage/azure-storage-files-shares/test/share_file_client_test.cpp +++ b/sdk/storage/azure-storage-files-shares/test/share_file_client_test.cpp @@ -150,16 +150,19 @@ namespace Azure { namespace Storage { namespace Test { EXPECT_NO_THROW(client1.Create(1024, options1)); EXPECT_NO_THROW(client2.Create(1024, options2)); - auto result1 = client1.GetProperties()->FilePermissionKey; - auto result2 = client2.GetProperties()->FilePermissionKey; - EXPECT_EQ(result1, result2); + auto result1 = client1.GetProperties()->SmbProperties.PermissionKey; + auto result2 = client2.GetProperties()->SmbProperties.PermissionKey; + EXPECT_TRUE(result1.HasValue()); + EXPECT_TRUE(result2.HasValue()); + EXPECT_EQ(result1.GetValue(), result2.GetValue()); auto client3 = m_fileShareDirectoryClient->GetFileClient(LowercaseRandomString()); Files::Shares::CreateShareFileOptions options3; options3.SmbProperties.PermissionKey = result1; EXPECT_NO_THROW(client3.Create(1024, options3)); - auto result3 = client3.GetProperties()->FilePermissionKey; - EXPECT_EQ(result1, result3); + auto result3 = client3.GetProperties()->SmbProperties.PermissionKey; + EXPECT_TRUE(result3.HasValue()); + EXPECT_EQ(result1.GetValue(), result3.GetValue()); } { @@ -181,17 +184,20 @@ namespace Azure { namespace Storage { namespace Test { options2.Permission = permission; EXPECT_NO_THROW(client1.SetProperties(GetInterestingHttpHeaders(), properties, options1)); EXPECT_NO_THROW(client2.SetProperties(GetInterestingHttpHeaders(), properties, options2)); - auto result1 = client1.GetProperties()->FilePermissionKey; - auto result2 = client1.GetProperties()->FilePermissionKey; - EXPECT_EQ(result1, result2); + auto result1 = client1.GetProperties()->SmbProperties.PermissionKey; + auto result2 = client1.GetProperties()->SmbProperties.PermissionKey; + EXPECT_TRUE(result1.HasValue()); + EXPECT_TRUE(result2.HasValue()); + EXPECT_EQ(result1.GetValue(), result2.GetValue()); auto client3 = m_fileShareDirectoryClient->GetFileClient(LowercaseRandomString()); Files::Shares::CreateShareFileOptions options3; options3.SmbProperties.PermissionKey = result1; std::string permissionKey; EXPECT_NO_THROW(permissionKey = client3.Create(1024, options3)->FilePermissionKey); - auto result3 = client3.GetProperties()->FilePermissionKey; - EXPECT_EQ(permissionKey, result3); + auto result3 = client3.GetProperties()->SmbProperties.PermissionKey; + EXPECT_TRUE(result3.HasValue()); + EXPECT_EQ(permissionKey, result3.GetValue()); } } @@ -202,7 +208,7 @@ namespace Azure { namespace Storage { namespace Test { | Files::Shares::Models::FileAttributes::NotContentIndexed; properties.CreatedOn = std::chrono::system_clock::now(); properties.LastWrittenOn = std::chrono::system_clock::now(); - properties.PermissionKey = m_fileClient->GetProperties()->FilePermissionKey; + properties.PermissionKey = m_fileClient->GetProperties()->SmbProperties.PermissionKey; { // Create directory with SmbProperties works auto client1 = m_fileShareDirectoryClient->GetFileClient(LowercaseRandomString()); @@ -216,9 +222,15 @@ namespace Azure { namespace Storage { namespace Test { EXPECT_NO_THROW(client2.Create(1024, options2)); auto directoryProperties1 = client1.GetProperties(); auto directoryProperties2 = client2.GetProperties(); - EXPECT_EQ(directoryProperties2->FileCreatedOn, directoryProperties1->FileCreatedOn); - EXPECT_EQ(directoryProperties2->FileLastWrittenOn, directoryProperties1->FileLastWrittenOn); - EXPECT_EQ(directoryProperties2->FileAttributes, directoryProperties1->FileAttributes); + EXPECT_EQ( + directoryProperties2->SmbProperties.CreatedOn.GetValue(), + directoryProperties1->SmbProperties.CreatedOn.GetValue()); + EXPECT_EQ( + directoryProperties2->SmbProperties.LastWrittenOn.GetValue(), + directoryProperties1->SmbProperties.LastWrittenOn.GetValue()); + EXPECT_EQ( + directoryProperties2->SmbProperties.Attributes, + directoryProperties1->SmbProperties.Attributes); } { @@ -232,9 +244,15 @@ namespace Azure { namespace Storage { namespace Test { EXPECT_NO_THROW(client2.SetProperties(GetInterestingHttpHeaders(), properties)); auto directoryProperties1 = client1.GetProperties(); auto directoryProperties2 = client2.GetProperties(); - EXPECT_EQ(directoryProperties2->FileCreatedOn, directoryProperties1->FileCreatedOn); - EXPECT_EQ(directoryProperties2->FileLastWrittenOn, directoryProperties1->FileLastWrittenOn); - EXPECT_EQ(directoryProperties2->FileAttributes, directoryProperties1->FileAttributes); + EXPECT_EQ( + directoryProperties2->SmbProperties.CreatedOn.GetValue(), + directoryProperties1->SmbProperties.CreatedOn.GetValue()); + EXPECT_EQ( + directoryProperties2->SmbProperties.LastWrittenOn.GetValue(), + directoryProperties1->SmbProperties.LastWrittenOn.GetValue()); + EXPECT_EQ( + directoryProperties2->SmbProperties.Attributes, + directoryProperties1->SmbProperties.Attributes); } } @@ -305,7 +323,7 @@ namespace Azure { namespace Storage { namespace Test { = fileClient.UploadFrom(fileContent.data(), static_cast(fileSize), options); auto properties = *fileClient.GetProperties(); - EXPECT_EQ(properties.ContentLength, fileSize); + EXPECT_EQ(properties.FileSize, fileSize); EXPECT_EQ(properties.Metadata, options.Metadata); std::vector downloadContent(static_cast(fileSize), '\x00'); fileClient.DownloadTo(downloadContent.data(), static_cast(fileSize)); @@ -333,7 +351,7 @@ namespace Azure { namespace Storage { namespace Test { auto res = fileClient.UploadFrom(tempFilename, options); auto properties = *fileClient.GetProperties(); - EXPECT_EQ(properties.ContentLength, fileSize); + EXPECT_EQ(properties.FileSize, fileSize); EXPECT_EQ(properties.Metadata, options.Metadata); std::vector downloadContent(static_cast(fileSize), '\x00'); fileClient.DownloadTo(downloadContent.data(), static_cast(fileSize)); @@ -425,8 +443,8 @@ namespace Azure { namespace Storage { namespace Test { if (actualDownloadSize > 0) { auto res = m_fileClient->DownloadTo(downloadBuffer.data(), downloadBuffer.size(), options); - EXPECT_EQ(res->ContentLength, actualDownloadSize); - downloadBuffer.resize(static_cast(res->ContentLength)); + EXPECT_EQ(res->ContentRange.Length.GetValue(), actualDownloadSize); + downloadBuffer.resize(static_cast(res->ContentRange.Length.GetValue())); EXPECT_EQ(downloadBuffer, expectedData); } else @@ -494,7 +512,7 @@ namespace Azure { namespace Storage { namespace Test { if (actualDownloadSize > 0) { auto res = m_fileClient->DownloadTo(tempFilename, options); - EXPECT_EQ(res->ContentLength, actualDownloadSize); + EXPECT_EQ(res->ContentRange.Length.GetValue(), actualDownloadSize); EXPECT_EQ(ReadFile(tempFilename), expectedData); } else