StartsOn and ExpiresOn were changed to nullable (#2828)

This commit is contained in:
JinmingHu 2021-09-03 12:57:50 +08:00 committed by GitHub
parent b2b1bdffd0
commit 98b188330b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 100 additions and 49 deletions

View File

@ -6,6 +6,8 @@
### Breaking Changes
- `StartsOn` and `ExpiresOn` in `SignedIdentifier` were changed to nullable.
### Bugs Fixed
### Other Changes

View File

@ -296,11 +296,11 @@ namespace Azure { namespace Storage { namespace Blobs {
/**
* Date and time since when this policy is active.
*/
Azure::DateTime StartsOn;
Azure::Nullable<Azure::DateTime> StartsOn;
/**
* Date and time the policy expires.
*/
Azure::DateTime ExpiresOn;
Azure::Nullable<Azure::DateTime> ExpiresOn;
/**
* The permissions for this ACL policy.
*/
@ -6527,22 +6527,28 @@ namespace Azure { namespace Storage { namespace Blobs {
writer.Write(_internal::XmlNode{_internal::XmlNodeType::Text, std::string(), options.Id});
writer.Write(_internal::XmlNode{_internal::XmlNodeType::EndTag});
writer.Write(_internal::XmlNode{_internal::XmlNodeType::StartTag, "AccessPolicy"});
writer.Write(_internal::XmlNode{_internal::XmlNodeType::StartTag, "Start"});
writer.Write(_internal::XmlNode{
_internal::XmlNodeType::Text,
std::string(),
options.StartsOn.ToString(
Azure::DateTime::DateFormat::Rfc3339,
Azure::DateTime::TimeFractionFormat::AllDigits)});
writer.Write(_internal::XmlNode{_internal::XmlNodeType::EndTag});
writer.Write(_internal::XmlNode{_internal::XmlNodeType::StartTag, "Expiry"});
writer.Write(_internal::XmlNode{
_internal::XmlNodeType::Text,
std::string(),
options.ExpiresOn.ToString(
Azure::DateTime::DateFormat::Rfc3339,
Azure::DateTime::TimeFractionFormat::AllDigits)});
writer.Write(_internal::XmlNode{_internal::XmlNodeType::EndTag});
if (options.StartsOn.HasValue())
{
writer.Write(_internal::XmlNode{_internal::XmlNodeType::StartTag, "Start"});
writer.Write(_internal::XmlNode{
_internal::XmlNodeType::Text,
std::string(),
options.StartsOn.Value().ToString(
Azure::DateTime::DateFormat::Rfc3339,
Azure::DateTime::TimeFractionFormat::AllDigits)});
writer.Write(_internal::XmlNode{_internal::XmlNodeType::EndTag});
}
if (options.ExpiresOn.HasValue())
{
writer.Write(_internal::XmlNode{_internal::XmlNodeType::StartTag, "Expiry"});
writer.Write(_internal::XmlNode{
_internal::XmlNodeType::Text,
std::string(),
options.ExpiresOn.Value().ToString(
Azure::DateTime::DateFormat::Rfc3339,
Azure::DateTime::TimeFractionFormat::AllDigits)});
writer.Write(_internal::XmlNode{_internal::XmlNodeType::EndTag});
}
writer.Write(_internal::XmlNode{_internal::XmlNodeType::StartTag, "Permission"});
writer.Write(
_internal::XmlNode{_internal::XmlNodeType::Text, std::string(), options.Permissions});

View File

@ -15,7 +15,10 @@ namespace Azure { namespace Storage { namespace Blobs { namespace Models {
bool operator==(const SignedIdentifier& lhs, const SignedIdentifier& rhs)
{
return lhs.Id == rhs.Id && lhs.StartsOn == rhs.StartsOn && lhs.ExpiresOn == rhs.ExpiresOn
return lhs.Id == rhs.Id && lhs.StartsOn.HasValue() == rhs.StartsOn.HasValue()
&& (!lhs.StartsOn.HasValue() || lhs.StartsOn.Value() == rhs.StartsOn.Value())
&& lhs.ExpiresOn.HasValue() == rhs.ExpiresOn.HasValue()
&& (!lhs.ExpiresOn.HasValue() || lhs.ExpiresOn.Value() == rhs.ExpiresOn.Value())
&& lhs.Permissions == rhs.Permissions;
}
@ -381,18 +384,36 @@ namespace Azure { namespace Storage { namespace Test {
Blobs::SetBlobContainerAccessPolicyOptions options;
options.AccessType = Blobs::Models::PublicAccessType::Blob;
Blobs::Models::SignedIdentifier 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);
/* cspell:disable-next-line */
identifier.Permissions = "racwdxlt";
options.SignedIdentifiers.emplace_back(identifier);
{
Blobs::Models::SignedIdentifier 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);
}
{
Blobs::Models::SignedIdentifier identifier;
identifier.Id = RandomString(64);
identifier.StartsOn = std::chrono::system_clock::now() - std::chrono::minutes(2);
identifier.ExpiresOn.Reset();
/* cspell:disable-next-line */
identifier.Permissions = "racwdxlt";
options.SignedIdentifiers.emplace_back(identifier);
}
{
Blobs::Models::SignedIdentifier identifier;
identifier.Id = RandomString(64);
identifier.Permissions = "r";
options.SignedIdentifiers.emplace_back(identifier);
}
{
Blobs::Models::SignedIdentifier 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);
options.SignedIdentifiers.emplace_back(identifier);
}
auto ret = container_client.SetAccessPolicy(options);
EXPECT_TRUE(ret.Value.ETag.HasValue());

View File

@ -6,6 +6,8 @@
### Breaking Changes
- `StartsOn` and `ExpiresOn` in `SignedIdentifier` were changed to nullable.
### Bugs Fixed
### Other Changes

View File

@ -8,6 +8,12 @@
#include <azure/identity/client_secret_credential.hpp>
#include <azure/storage/common/crypt.hpp>
namespace Azure { namespace Storage { namespace Blobs { namespace Models {
bool operator==(const SignedIdentifier& lhs, const SignedIdentifier& rhs);
}}}} // namespace Azure::Storage::Blobs::Models
namespace Azure { namespace Storage { namespace Test {
const size_t PathTestSize = 5;
@ -361,18 +367,36 @@ namespace Azure { namespace Storage { namespace Test {
Files::DataLake::SetFileSystemAccessPolicyOptions options;
options.AccessType = Files::DataLake::Models::PublicAccessType::Path;
Files::DataLake::Models::SignedIdentifier 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);
/* cspell:disable-next-line */
identifier.Permissions = "racwdxlt";
options.SignedIdentifiers.emplace_back(identifier);
{
Files::DataLake::Models::SignedIdentifier 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);
}
{
Files::DataLake::Models::SignedIdentifier identifier;
identifier.Id = RandomString(64);
identifier.StartsOn = std::chrono::system_clock::now() - std::chrono::minutes(2);
identifier.ExpiresOn.Reset();
/* cspell:disable-next-line */
identifier.Permissions = "racwdxlt";
options.SignedIdentifiers.emplace_back(identifier);
}
{
Files::DataLake::Models::SignedIdentifier identifier;
identifier.Id = RandomString(64);
identifier.Permissions = "r";
options.SignedIdentifiers.emplace_back(identifier);
}
{
Files::DataLake::Models::SignedIdentifier 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);
options.SignedIdentifiers.emplace_back(identifier);
}
auto ret = fileSystem.SetAccessPolicy(options);
EXPECT_TRUE(ret.Value.ETag.HasValue());
@ -380,14 +404,10 @@ namespace Azure { namespace Storage { namespace Test {
auto ret2 = fileSystem.GetAccessPolicy();
EXPECT_EQ(ret2.Value.AccessType, options.AccessType);
ASSERT_EQ(ret2.Value.SignedIdentifiers.size(), options.SignedIdentifiers.size());
for (size_t i = 0; i < ret2.Value.SignedIdentifiers.size(); ++i)
{
EXPECT_EQ(ret2.Value.SignedIdentifiers[i].StartsOn, options.SignedIdentifiers[i].StartsOn);
EXPECT_EQ(
ret2.Value.SignedIdentifiers[i].ExpiresOn, options.SignedIdentifiers[i].ExpiresOn);
EXPECT_EQ(ret2.Value.SignedIdentifiers[i].Id, options.SignedIdentifiers[i].Id);
EXPECT_EQ(
ret2.Value.SignedIdentifiers[i].Permissions, options.SignedIdentifiers[i].Permissions);
EXPECT_EQ(ret2.Value.SignedIdentifiers[i], options.SignedIdentifiers[i]);
}
options.AccessType = Files::DataLake::Models::PublicAccessType::FileSystem;