From bbecdbcf391982d4c2b51b68d2638cb3dd254a5b Mon Sep 17 00:00:00 2001 From: Nidhi Nandwani Date: Wed, 10 Jun 2026 08:51:01 +0000 Subject: [PATCH] samples(storagecontrol): add delete folder recursive sample [Generated-by: AI] --- .../DeleteFolderRecursiveSample.cs | 36 +++++++++ .../DeleteFolderRecursiveSampleTest.cs | 77 +++++++++++++++++++ ...e.Cloud.Storage.Control.V2.Snippets.csproj | 3 +- 3 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 apis/Google.Cloud.Storage.Control.V2/Google.Cloud.Storage.Control.V2.Snippets/DeleteFolderRecursiveSample.cs create mode 100644 apis/Google.Cloud.Storage.Control.V2/Google.Cloud.Storage.Control.V2.Snippets/DeleteFolderRecursiveSampleTest.cs diff --git a/apis/Google.Cloud.Storage.Control.V2/Google.Cloud.Storage.Control.V2.Snippets/DeleteFolderRecursiveSample.cs b/apis/Google.Cloud.Storage.Control.V2/Google.Cloud.Storage.Control.V2.Snippets/DeleteFolderRecursiveSample.cs new file mode 100644 index 000000000000..468448fbbb8c --- /dev/null +++ b/apis/Google.Cloud.Storage.Control.V2/Google.Cloud.Storage.Control.V2.Snippets/DeleteFolderRecursiveSample.cs @@ -0,0 +1,36 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using Google.Cloud.Storage.Control.V2; +using System; + +namespace Google.Cloud.Storage.Control.V2.Snippets +{ + public class DeleteFolderRecursiveSample + { + public void DeleteFolderRecursive(string bucketName, string folderName) + { + // [START storage_control_delete_folder_recursive] + StorageControlClient storageControlClient = StorageControlClient.Create(); + + // Format: projects/{project}/buckets/{bucket}/folders/{folder} + string folderResourceName = $"projects/_/buckets/{bucketName}/folders/{folderName}"; + + storageControlClient.DeleteFolderRecursive(folderResourceName).PollUntilCompleted(); + + Console.WriteLine($"Deleted folder {folderName} recursively"); + // [END storage_control_delete_folder_recursive] + } + } +} diff --git a/apis/Google.Cloud.Storage.Control.V2/Google.Cloud.Storage.Control.V2.Snippets/DeleteFolderRecursiveSampleTest.cs b/apis/Google.Cloud.Storage.Control.V2/Google.Cloud.Storage.Control.V2.Snippets/DeleteFolderRecursiveSampleTest.cs new file mode 100644 index 000000000000..c6cc658e536f --- /dev/null +++ b/apis/Google.Cloud.Storage.Control.V2/Google.Cloud.Storage.Control.V2.Snippets/DeleteFolderRecursiveSampleTest.cs @@ -0,0 +1,77 @@ +// Copyright 2026 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using Google.Cloud.ClientTesting; +using Google.Cloud.Storage.V1; +using Google.Cloud.Storage.Control.V2; +using System; +using Xunit; + +namespace Google.Cloud.Storage.Control.V2.Snippets +{ + [SnippetOutputCollector] + public class DeleteFolderRecursiveSampleTest + { + [SkippableFact] + public void TestDeleteFolderRecursive() + { + string projectId = Environment.GetEnvironmentVariable("TEST_PROJECT"); + Skip.If(string.IsNullOrEmpty(projectId), "No TEST_PROJECT environment variable set."); + + // Setup: Create HN bucket, add folder. + var storageClient = StorageClient.Create(); + string bucketName = IdGenerator.FromGuid(prefix: "test-hn-bucket-"); + string folderName = "test-folder"; + + var bucket = new Google.Apis.Storage.v1.Data.Bucket + { + Name = bucketName, + HierarchicalNamespace = new Google.Apis.Storage.v1.Data.Bucket.HierarchicalNamespaceData { Enabled = true }, + IamConfiguration = new Google.Apis.Storage.v1.Data.Bucket.IamConfigurationData + { + UniformBucketLevelAccess = new Google.Apis.Storage.v1.Data.Bucket.IamConfigurationData.UniformBucketLevelAccessData { Enabled = true } + } + }; + + storageClient.CreateBucket(projectId, bucket); + + try + { + var storageControlClient = StorageControlClient.Create(); + + var folder = new Folder { Name = $"projects/_/buckets/{bucketName}/folders/{folderName}" }; + storageControlClient.CreateFolder(new CreateFolderRequest + { + ParentAsBucketName = BucketName.FromProjectBucket("_", bucketName), + FolderId = folderName, + Folder = folder + }); + + // Execution: Call sample method. + var sample = new DeleteFolderRecursiveSample(); + sample.DeleteFolderRecursive(bucketName, folderName); + + // Verification: Assert successful deletion by trying to get the folder. + var ex = Assert.Throws(() => + storageControlClient.GetFolder(new GetFolderRequest { Name = folder.Name })); + Assert.Equal(Grpc.Core.StatusCode.NotFound, ex.StatusCode); + } + finally + { + // Cleanup: Standard Dispose. + storageClient.DeleteBucket(bucketName); + } + } + } +} diff --git a/apis/Google.Cloud.Storage.Control.V2/Google.Cloud.Storage.Control.V2.Snippets/Google.Cloud.Storage.Control.V2.Snippets.csproj b/apis/Google.Cloud.Storage.Control.V2/Google.Cloud.Storage.Control.V2.Snippets/Google.Cloud.Storage.Control.V2.Snippets.csproj index 735d14a62824..4df1873a565f 100644 --- a/apis/Google.Cloud.Storage.Control.V2/Google.Cloud.Storage.Control.V2.Snippets/Google.Cloud.Storage.Control.V2.Snippets.csproj +++ b/apis/Google.Cloud.Storage.Control.V2/Google.Cloud.Storage.Control.V2.Snippets/Google.Cloud.Storage.Control.V2.Snippets.csproj @@ -1,4 +1,4 @@ - + net8.0;net462 @@ -15,6 +15,7 @@ + \ No newline at end of file