diff --git a/storage/api/Storage.Samples.Tests/StorageControlDeleteFolderRecursiveTest.cs b/storage/api/Storage.Samples.Tests/StorageControlDeleteFolderRecursiveTest.cs new file mode 100644 index 00000000000..1084d15d4b0 --- /dev/null +++ b/storage/api/Storage.Samples.Tests/StorageControlDeleteFolderRecursiveTest.cs @@ -0,0 +1,48 @@ +// 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 System.Linq; +using Xunit; + +namespace Storage.Samples.Tests; + +[Collection(nameof(StorageFixture))] +public class StorageControlDeleteFolderRecursiveTest +{ + private readonly StorageFixture _fixture; + + public StorageControlDeleteFolderRecursiveTest(StorageFixture fixture) + { + _fixture = fixture; + } + + [Fact] + public void TestStorageControlDeleteFolderRecursive() + { + string parentFolderName = _fixture.GenerateName(); + string subfolderName = $"{parentFolderName}/{_fixture.GenerateName()}"; + StorageControlCreateFolderSample createSample = new StorageControlCreateFolderSample(); + var parentFolder = createSample.StorageControlCreateFolder(_fixture.BucketNameHns, parentFolderName); + var subfolder = createSample.StorageControlCreateFolder(_fixture.BucketNameHns, subfolderName); + + StorageControlDeleteFolderRecursiveSample deleteSample = new StorageControlDeleteFolderRecursiveSample(); + deleteSample.StorageControlDeleteFolderRecursive(_fixture.BucketNameHns, parentFolderName); + + StorageControlListFoldersSample listFoldersSample = new StorageControlListFoldersSample(); + var folders = listFoldersSample.StorageControlListFolders(_fixture.BucketNameHns); + + Assert.False(folders.Any(f => f.Name == parentFolder.Name)); + Assert.False(folders.Any(f => f.Name == subfolder.Name)); + } +} diff --git a/storage/api/Storage.Samples/Storage.Samples.csproj b/storage/api/Storage.Samples/Storage.Samples.csproj index 02621c159cc..fca943768b8 100644 --- a/storage/api/Storage.Samples/Storage.Samples.csproj +++ b/storage/api/Storage.Samples/Storage.Samples.csproj @@ -1,11 +1,11 @@ - + netstandard2.1 - + diff --git a/storage/api/Storage.Samples/StorageControlDeleteFolderRecursive.cs b/storage/api/Storage.Samples/StorageControlDeleteFolderRecursive.cs new file mode 100644 index 00000000000..4fed42b8fb4 --- /dev/null +++ b/storage/api/Storage.Samples/StorageControlDeleteFolderRecursive.cs @@ -0,0 +1,34 @@ +// 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. + +// [START storage_control_delete_folder_recursive] +using Google.Cloud.Storage.Control.V2; +using System; + +public class StorageControlDeleteFolderRecursiveSample +{ + public void StorageControlDeleteFolderRecursive(string bucketName = "your-unique-bucket-name", string folderName = "your_folder_name") + { + StorageControlClient storageControl = StorageControlClient.Create(); + + // Set project to "_" to signify globally scoped bucket + string folderResourceName = FolderName.FormatProjectBucketFolder("_", bucketName, folderName); + + // Execute the long-running operation and wait for completion + storageControl.DeleteFolderRecursive(folderResourceName).PollUntilCompleted(); + + Console.WriteLine($"Deleted folder {folderResourceName}"); + } +} +// [END storage_control_delete_folder_recursive]