Added support for specifying public access type when creating a file system. (#1447)
This commit is contained in:
parent
6b71b5416d
commit
6f6c3c9cde
@ -10,6 +10,7 @@
|
||||
- Moved all protocol layer generated result types to `Details` namespace.
|
||||
- Renamed `FileSystem` type returned from `ListDataLakeFileSystems` to be `FileSystemItem`. Member object name `FileSystems` is renamed to `Items`.
|
||||
- Renamed `Path` type returned from `ListDataLakePaths` to be `PathItem`. Member object name `Paths` is renamed to `Items`.
|
||||
- Added support for specifying public access type when creating a file system.
|
||||
- Added `DataLakeDirectoryClient::ListPathsSinglePage` API to list DataLake paths under certain directory.
|
||||
- Added `Metadata`, `AccessType`, `HasImmutabilityPolicy`, `HasLegalHold`, `LeaseDuration`, `LeaseState` and `LeaseStatus` to `FileSystemItem`.
|
||||
- Added new type `LeaseDurationType` to indicate if a lease duration is fixed or infinite.
|
||||
|
||||
@ -120,6 +120,11 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
|
||||
* ISO-8859-1 character set.
|
||||
*/
|
||||
Storage::Metadata Metadata;
|
||||
|
||||
/**
|
||||
* @brief The public access type of the file system.
|
||||
*/
|
||||
Models::PublicAccessType AccessType = Models::PublicAccessType::None;
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@ -193,6 +193,22 @@ namespace Azure { namespace Storage { namespace Files { namespace DataLake {
|
||||
Blobs::CreateBlobContainerOptions blobOptions;
|
||||
blobOptions.Context = options.Context;
|
||||
blobOptions.Metadata = options.Metadata;
|
||||
if (options.AccessType == Models::PublicAccessType::FileSystem)
|
||||
{
|
||||
blobOptions.AccessType = Blobs::Models::PublicAccessType::BlobContainer;
|
||||
}
|
||||
else if (options.AccessType == Models::PublicAccessType::Path)
|
||||
{
|
||||
blobOptions.AccessType = Blobs::Models::PublicAccessType::Blob;
|
||||
}
|
||||
else if (options.AccessType == Models::PublicAccessType::None)
|
||||
{
|
||||
blobOptions.AccessType = Blobs::Models::PublicAccessType::Private;
|
||||
}
|
||||
else
|
||||
{
|
||||
blobOptions.AccessType = Blobs::Models::PublicAccessType(options.AccessType.Get());
|
||||
}
|
||||
auto result = m_blobContainerClient.Create(blobOptions);
|
||||
Models::CreateDataLakeFileSystemResult ret;
|
||||
ret.ETag = std::move(result->ETag);
|
||||
|
||||
@ -368,50 +368,79 @@ namespace Azure { namespace Storage { namespace Test {
|
||||
|
||||
TEST_F(DataLakeFileSystemClientTest, GetSetAccessPolicy)
|
||||
{
|
||||
auto fileSystem = Files::DataLake::DataLakeFileSystemClient::CreateFromConnectionString(
|
||||
AdlsGen2ConnectionString(), LowercaseRandomString());
|
||||
fileSystem.Create();
|
||||
|
||||
Files::DataLake::SetDataLakeFileSystemAccessPolicyOptions options;
|
||||
options.AccessType = Files::DataLake::Models::PublicAccessType::Path;
|
||||
Files::DataLake::Models::DataLakeSignedIdentifier identifier;
|
||||
identifier.Id = RandomString(64);
|
||||
identifier.StartsOn = std::chrono::system_clock::now() - std::chrono::minutes(1);
|
||||
identifier.ExpiresOn = std::chrono::system_clock::now() + std::chrono::minutes(1);
|
||||
identifier.Permissions = "r";
|
||||
options.SignedIdentifiers.emplace_back(identifier);
|
||||
identifier.Id = RandomString(64);
|
||||
identifier.StartsOn = std::chrono::system_clock::now() - std::chrono::minutes(2);
|
||||
identifier.ExpiresOn = std::chrono::system_clock::now() + std::chrono::minutes(2);
|
||||
identifier.Permissions = "racwdxlt";
|
||||
options.SignedIdentifiers.emplace_back(identifier);
|
||||
|
||||
auto ret = fileSystem.SetAccessPolicy(options);
|
||||
EXPECT_FALSE(ret->ETag.empty());
|
||||
EXPECT_TRUE(IsValidTime(ret->LastModified));
|
||||
|
||||
auto ret2 = fileSystem.GetAccessPolicy();
|
||||
EXPECT_EQ(ret2->ETag, ret->ETag);
|
||||
EXPECT_EQ(ret2->LastModified, ret->LastModified);
|
||||
EXPECT_EQ(ret2->AccessType, options.AccessType);
|
||||
for (size_t i = 0; i < ret2->SignedIdentifiers.size(); ++i)
|
||||
{
|
||||
EXPECT_EQ(ret2->SignedIdentifiers[i].StartsOn, options.SignedIdentifiers[i].StartsOn);
|
||||
EXPECT_EQ(ret2->SignedIdentifiers[i].ExpiresOn, options.SignedIdentifiers[i].ExpiresOn);
|
||||
EXPECT_EQ(ret2->SignedIdentifiers[i].Id, options.SignedIdentifiers[i].Id);
|
||||
EXPECT_EQ(ret2->SignedIdentifiers[i].Permissions, options.SignedIdentifiers[i].Permissions);
|
||||
auto fileSystem = Files::DataLake::DataLakeFileSystemClient::CreateFromConnectionString(
|
||||
AdlsGen2ConnectionString(), LowercaseRandomString());
|
||||
fileSystem.Create();
|
||||
|
||||
Files::DataLake::SetDataLakeFileSystemAccessPolicyOptions options;
|
||||
options.AccessType = Files::DataLake::Models::PublicAccessType::Path;
|
||||
Files::DataLake::Models::DataLakeSignedIdentifier identifier;
|
||||
identifier.Id = RandomString(64);
|
||||
identifier.StartsOn = std::chrono::system_clock::now() - std::chrono::minutes(1);
|
||||
identifier.ExpiresOn = std::chrono::system_clock::now() + std::chrono::minutes(1);
|
||||
identifier.Permissions = "r";
|
||||
options.SignedIdentifiers.emplace_back(identifier);
|
||||
identifier.Id = RandomString(64);
|
||||
identifier.StartsOn = std::chrono::system_clock::now() - std::chrono::minutes(2);
|
||||
identifier.ExpiresOn = std::chrono::system_clock::now() + std::chrono::minutes(2);
|
||||
identifier.Permissions = "racwdxlt";
|
||||
options.SignedIdentifiers.emplace_back(identifier);
|
||||
|
||||
auto ret = fileSystem.SetAccessPolicy(options);
|
||||
EXPECT_FALSE(ret->ETag.empty());
|
||||
EXPECT_TRUE(IsValidTime(ret->LastModified));
|
||||
|
||||
auto ret2 = fileSystem.GetAccessPolicy();
|
||||
EXPECT_EQ(ret2->ETag, ret->ETag);
|
||||
EXPECT_EQ(ret2->LastModified, ret->LastModified);
|
||||
EXPECT_EQ(ret2->AccessType, options.AccessType);
|
||||
for (size_t i = 0; i < ret2->SignedIdentifiers.size(); ++i)
|
||||
{
|
||||
EXPECT_EQ(ret2->SignedIdentifiers[i].StartsOn, options.SignedIdentifiers[i].StartsOn);
|
||||
EXPECT_EQ(ret2->SignedIdentifiers[i].ExpiresOn, options.SignedIdentifiers[i].ExpiresOn);
|
||||
EXPECT_EQ(ret2->SignedIdentifiers[i].Id, options.SignedIdentifiers[i].Id);
|
||||
EXPECT_EQ(ret2->SignedIdentifiers[i].Permissions, options.SignedIdentifiers[i].Permissions);
|
||||
}
|
||||
|
||||
options.AccessType = Files::DataLake::Models::PublicAccessType::FileSystem;
|
||||
EXPECT_NO_THROW(fileSystem.SetAccessPolicy(options));
|
||||
ret2 = fileSystem.GetAccessPolicy();
|
||||
EXPECT_EQ(ret2->AccessType, options.AccessType);
|
||||
|
||||
options.AccessType = Files::DataLake::Models::PublicAccessType::None;
|
||||
EXPECT_NO_THROW(fileSystem.SetAccessPolicy(options));
|
||||
ret2 = fileSystem.GetAccessPolicy();
|
||||
EXPECT_EQ(ret2->AccessType, options.AccessType);
|
||||
|
||||
fileSystem.Delete();
|
||||
}
|
||||
{
|
||||
auto fileSystem = Files::DataLake::DataLakeFileSystemClient::CreateFromConnectionString(
|
||||
AdlsGen2ConnectionString(), LowercaseRandomString());
|
||||
Files::DataLake::CreateDataLakeFileSystemOptions options;
|
||||
options.AccessType = Files::DataLake::Models::PublicAccessType::FileSystem;
|
||||
fileSystem.Create(options);
|
||||
auto ret = fileSystem.GetAccessPolicy();
|
||||
EXPECT_EQ(Files::DataLake::Models::PublicAccessType::FileSystem, ret->AccessType);
|
||||
}
|
||||
{
|
||||
auto fileSystem = Files::DataLake::DataLakeFileSystemClient::CreateFromConnectionString(
|
||||
AdlsGen2ConnectionString(), LowercaseRandomString());
|
||||
Files::DataLake::CreateDataLakeFileSystemOptions options;
|
||||
options.AccessType = Files::DataLake::Models::PublicAccessType::Path;
|
||||
fileSystem.Create(options);
|
||||
auto ret = fileSystem.GetAccessPolicy();
|
||||
EXPECT_EQ(Files::DataLake::Models::PublicAccessType::Path, ret->AccessType);
|
||||
}
|
||||
{
|
||||
auto fileSystem = Files::DataLake::DataLakeFileSystemClient::CreateFromConnectionString(
|
||||
AdlsGen2ConnectionString(), LowercaseRandomString());
|
||||
Files::DataLake::CreateDataLakeFileSystemOptions options;
|
||||
options.AccessType = Files::DataLake::Models::PublicAccessType::Path;
|
||||
fileSystem.Create(options);
|
||||
auto ret = fileSystem.GetAccessPolicy();
|
||||
EXPECT_EQ(Files::DataLake::Models::PublicAccessType::Path, ret->AccessType);
|
||||
}
|
||||
|
||||
options.AccessType = Files::DataLake::Models::PublicAccessType::FileSystem;
|
||||
EXPECT_NO_THROW(fileSystem.SetAccessPolicy(options));
|
||||
ret2 = fileSystem.GetAccessPolicy();
|
||||
EXPECT_EQ(ret2->AccessType, options.AccessType);
|
||||
|
||||
// options.AccessType = Files::DataLake::Models::PublicAccessType::Private;
|
||||
// EXPECT_NO_THROW(fileSystem.SetAccessPolicy(options));
|
||||
// ret2 = fileSystem.GetAccessPolicy();
|
||||
// EXPECT_EQ(ret2->AccessType, options.AccessType.GetValue());
|
||||
|
||||
fileSystem.Delete();
|
||||
}
|
||||
}}} // namespace Azure::Storage::Test
|
||||
|
||||
Loading…
Reference in New Issue
Block a user