@@ -107,6 +107,9 @@ BucketMetadata CreateBucketMetadataForTest() {
107107 "defaultKmsKeyName": "projects/test-project-name/locations/us-central1/keyRings/test-keyring-name/cryptoKeys/test-key-name"
108108 },
109109 "etag": "XYZ=",
110+ "hierarchicalNamespace": {
111+ "enabled": true
112+ },
110113 "iamConfiguration": {
111114 "uniformBucketLevelAccess": {
112115 "enabled": true,
@@ -216,6 +219,10 @@ TEST(BucketMetadataTest, Parse) {
216219 " test-keyring-name/cryptoKeys/test-key-name" ,
217220 actual.encryption ().default_kms_key_name );
218221 EXPECT_EQ (" XYZ=" , actual.etag ());
222+ // hierarchicalNamespace
223+ ASSERT_TRUE (actual.has_hierarchical_namespace ());
224+ ASSERT_TRUE (actual.hierarchical_namespace_as_optional ().has_value ());
225+ ASSERT_EQ (actual.hierarchical_namespace (), BucketHierarchicalNamespace{true });
219226 ASSERT_TRUE (actual.has_iam_configuration ());
220227 ASSERT_TRUE (
221228 actual.iam_configuration ().uniform_bucket_level_access .has_value ());
@@ -361,6 +368,12 @@ TEST(BucketMetadataTest, IOStream) {
361368 HasSubstr (" projects/test-project-name/locations/us-central1/"
362369 " keyRings/test-keyring-name/cryptoKeys/test-key-name" ));
363370
371+ // hierarchical_namespace()
372+ EXPECT_THAT (
373+ actual,
374+ HasSubstr (
375+ " hierarchical_namespace=BucketHierarchicalNamespace={enabled=true}" ));
376+
364377 // iam_policy()
365378 EXPECT_THAT (actual, HasSubstr (" BucketIamConfiguration={" ));
366379 EXPECT_THAT (actual, HasSubstr (" locked_time=2020-01-02T03:04:05Z" ));
@@ -466,6 +479,11 @@ TEST(BucketMetadataTest, ToJsonString) {
466479 " test-keyring-name/cryptoKeys/test-key-name" ,
467480 actual[" encryption" ].value (" defaultKmsKeyName" , " " ));
468481
482+ // hierarchical_namespace()
483+ ASSERT_EQ (1 , actual.count (" hierarchicalNamespace" ));
484+ EXPECT_EQ (actual[" hierarchicalNamespace" ],
485+ nlohmann::json ({{" enabled" , true }}));
486+
469487 // iam_configuration()
470488 ASSERT_EQ (1U , actual.count (" iamConfiguration" ));
471489 nlohmann::json expected_iam_configuration{
@@ -747,6 +765,25 @@ TEST(BucketMetadataTest, SetDefaultObjectAcl) {
747765 EXPECT_NE (expected, copy);
748766}
749767
768+ // / @test Verify we can change the Hierarchical Namespace configuration.
769+ TEST (BucketMetadataTest, SetHierarchicalNamespace) {
770+ auto expected = CreateBucketMetadataForTest ();
771+ auto copy = expected;
772+ copy.set_hierarchical_namespace (BucketHierarchicalNamespace{false });
773+ ASSERT_TRUE (copy.has_hierarchical_namespace ());
774+ EXPECT_EQ (copy.hierarchical_namespace (), BucketHierarchicalNamespace{false });
775+ EXPECT_NE (expected, copy);
776+ }
777+
778+ // / @test Verify we can reset the Hierarchical Namespace configuration.
779+ TEST (BucketMetadataTest, ResetHierarchicalNamespace) {
780+ auto expected = CreateBucketMetadataForTest ();
781+ auto copy = expected;
782+ copy.reset_hierarchical_namespace ();
783+ ASSERT_FALSE (copy.has_hierarchical_namespace ());
784+ EXPECT_NE (expected, copy);
785+ }
786+
750787// / @test Verify we can change the IAM Configuration in BucketMetadata.
751788TEST (BucketMetadataTest, SetIamConfigurationUBLA) {
752789 auto expected = CreateBucketMetadataForTest ();
@@ -1226,6 +1263,26 @@ TEST(BucketMetadataPatchBuilder, ResetIamConfiguration) {
12261263 ASSERT_TRUE (json[" iamConfiguration" ].is_null ()) << json;
12271264}
12281265
1266+ TEST (BucketMetadataPatchBuilder, SetHierarchicalNamespace) {
1267+ BucketMetadataPatchBuilder builder;
1268+ builder.SetHierarchicalNamespace (BucketHierarchicalNamespace{true });
1269+
1270+ auto actual = builder.BuildPatch ();
1271+ auto json = nlohmann::json::parse (actual);
1272+ ASSERT_EQ (1U , json.count (" hierarchicalNamespace" )) << json;
1273+ ASSERT_EQ (json[" hierarchicalNamespace" ], nlohmann::json ({{" enabled" , true }}));
1274+ }
1275+
1276+ TEST (BucketMetadataPatchBuilder, ResetHierarchicalNamespace) {
1277+ BucketMetadataPatchBuilder builder;
1278+ builder.ResetHierarchicalNamespace ();
1279+
1280+ auto actual = builder.BuildPatch ();
1281+ auto json = nlohmann::json::parse (actual);
1282+ ASSERT_EQ (1U , json.count (" hierarchicalNamespace" )) << json;
1283+ ASSERT_TRUE (json[" hierarhicalNamespace" ].is_null ()) << json;
1284+ }
1285+
12291286TEST (BucketMetadataPatchBuilder, SetEncryption) {
12301287 BucketMetadataPatchBuilder builder;
12311288 std::string expected =
0 commit comments