From 96da4a536259d6fa0edf52de46862361eceded0f Mon Sep 17 00:00:00 2001 From: durgesh-ninave-crest Date: Wed, 23 Jul 2025 14:00:18 +0530 Subject: [PATCH 1/3] chore(secretmanager): Added samples for delayed destroy --- .../CreateSecretWithDelayedDestroy.java | 65 ++++++++++++++++ .../DisableSecretDelayedDestroy.java | 62 +++++++++++++++ .../UpdateSecretWithDelayedDestroy.java | 66 ++++++++++++++++ ...reateRegionalSecretWithDelayedDestroy.java | 69 +++++++++++++++++ .../DisableRegionalSecretDelayedDestroy.java | 72 ++++++++++++++++++ ...pdateRegionalSecretWithDelayedDestroy.java | 76 +++++++++++++++++++ .../test/java/secretmanager/SnippetsIT.java | 33 +++++++- .../regionalsamples/SnippetsIT.java | 34 +++++++++ 8 files changed, 476 insertions(+), 1 deletion(-) create mode 100644 secretmanager/src/main/java/secretmanager/CreateSecretWithDelayedDestroy.java create mode 100644 secretmanager/src/main/java/secretmanager/DisableSecretDelayedDestroy.java create mode 100644 secretmanager/src/main/java/secretmanager/UpdateSecretWithDelayedDestroy.java create mode 100644 secretmanager/src/main/java/secretmanager/regionalsamples/CreateRegionalSecretWithDelayedDestroy.java create mode 100644 secretmanager/src/main/java/secretmanager/regionalsamples/DisableRegionalSecretDelayedDestroy.java create mode 100644 secretmanager/src/main/java/secretmanager/regionalsamples/UpdateRegionalSecretWithDelayedDestroy.java diff --git a/secretmanager/src/main/java/secretmanager/CreateSecretWithDelayedDestroy.java b/secretmanager/src/main/java/secretmanager/CreateSecretWithDelayedDestroy.java new file mode 100644 index 00000000000..de3bb9f2845 --- /dev/null +++ b/secretmanager/src/main/java/secretmanager/CreateSecretWithDelayedDestroy.java @@ -0,0 +1,65 @@ +/* + * Copyright 2025 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 + * + * http://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. + */ + +package secretmanager; + +// [START secretmanager_create_secret_with_delayed_destroy] + +import com.google.cloud.secretmanager.v1.ProjectName; +import com.google.cloud.secretmanager.v1.Replication; +import com.google.cloud.secretmanager.v1.Secret; +import com.google.cloud.secretmanager.v1.SecretManagerServiceClient; +import com.google.protobuf.Duration; +import java.io.IOException; + +public class CreateSecretWithDelayedDestroy { + + public static void createSecretWithDelayedDestroy() throws IOException { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String secretId = "your-secret-id"; + Integer versionDestroyTtl = 86400; + createSecretWithDelayedDestroy(projectId, secretId, versionDestroyTtl); + } + + // Create secret with version destroy TTL. + public static void createSecretWithDelayedDestroy( + String projectId, + String secretId, + Integer versionDestroyTtl) + throws IOException { + // Initialize the client that will be used to send requests. + try (SecretManagerServiceClient client = SecretManagerServiceClient.create()) { + // Build the parent name from the project. + ProjectName projectName = ProjectName.of(projectId); + + // Build the secret to create. + Secret secret = + Secret.newBuilder() + .setReplication( + Replication.newBuilder() + .setAutomatic(Replication.Automatic.newBuilder().build()) + .build()) + .setVersionDestroyTtl(Duration.newBuilder().setSeconds(versionDestroyTtl)) + .build(); + + // Create the secret. + Secret createdSecret = client.createSecret(projectName, secretId, secret); + System.out.printf("Created secret with version destroy ttl %s\n", createdSecret.getName()); + } + } +} +// [END secretmanager_create_secret_with_delayed_destroy] diff --git a/secretmanager/src/main/java/secretmanager/DisableSecretDelayedDestroy.java b/secretmanager/src/main/java/secretmanager/DisableSecretDelayedDestroy.java new file mode 100644 index 00000000000..e4e56e474a4 --- /dev/null +++ b/secretmanager/src/main/java/secretmanager/DisableSecretDelayedDestroy.java @@ -0,0 +1,62 @@ +/* + * Copyright 2025 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 + * + * http://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. + */ + +package secretmanager; + +// [START secretmanager_disable_secret_delayed_destroy] + +import com.google.cloud.secretmanager.v1.Secret; +import com.google.cloud.secretmanager.v1.SecretManagerServiceClient; +import com.google.cloud.secretmanager.v1.SecretName; +import com.google.protobuf.FieldMask; +import com.google.protobuf.util.FieldMaskUtil; +import java.io.IOException; + +public class DisableSecretDelayedDestroy { + + public static void disableSecretDelayedDestroy() throws IOException { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String secretId = "your-secret-id"; + disableSecretDelayedDestroy(projectId, secretId); + } + + // Disables delayed destroy for a secret. + public static void disableSecretDelayedDestroy( + String projectId, + String secretId) + throws IOException { + // Initialize the client that will be used to send requests. + try (SecretManagerServiceClient client = SecretManagerServiceClient.create()) { + // Build the parent name from the project and secret. + SecretName secretName = SecretName.of(projectId, secretId); + + // Build the secret to update. + Secret secret = + Secret.newBuilder() + .setName(secretName.toString()) + .build(); + + // Build the field mask. + FieldMask fieldMask = FieldMaskUtil.fromString("version_destroy_ttl"); + + // Update the secret. + Secret updatedSecret = client.updateSecret(secret, fieldMask); + System.out.printf("Updated secret %s\n", updatedSecret.getName()); + } + } +} +// [END secretmanager_disable_secret_delayed_destroy] diff --git a/secretmanager/src/main/java/secretmanager/UpdateSecretWithDelayedDestroy.java b/secretmanager/src/main/java/secretmanager/UpdateSecretWithDelayedDestroy.java new file mode 100644 index 00000000000..707dc73d746 --- /dev/null +++ b/secretmanager/src/main/java/secretmanager/UpdateSecretWithDelayedDestroy.java @@ -0,0 +1,66 @@ +/* + * Copyright 2025 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 + * + * http://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. + */ + +package secretmanager; + +// [START secretmanager_update_secret_with_delayed_destroy] + +import com.google.cloud.secretmanager.v1.Secret; +import com.google.cloud.secretmanager.v1.SecretManagerServiceClient; +import com.google.cloud.secretmanager.v1.SecretName; +import com.google.protobuf.Duration; +import com.google.protobuf.FieldMask; +import com.google.protobuf.util.FieldMaskUtil; +import java.io.IOException; + +public class UpdateSecretWithDelayedDestroy { + + public static void updateSecretWithDelayedDestroy() throws IOException { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String secretId = "your-secret-id"; + Integer versionDestroyTtl = 86400; + updateSecretWithDelayedDestroy(projectId, secretId, versionDestroyTtl); + } + + // Update secret with version destroy TTL. + public static void updateSecretWithDelayedDestroy( + String projectId, + String secretId, + Integer versionDestroyTtl) + throws IOException { + // Initialize the client that will be used to send requests. + try (SecretManagerServiceClient client = SecretManagerServiceClient.create()) { + // Build the parent name from the project and secret. + SecretName secretName = SecretName.of(projectId, secretId); + + // Build the secret to update. + Secret secret = + Secret.newBuilder() + .setName(secretName.toString()) + .setVersionDestroyTtl(Duration.newBuilder().setSeconds(versionDestroyTtl)) + .build(); + + // Build the field mask. + FieldMask fieldMask = FieldMaskUtil.fromString("version_destroy_ttl"); + + // Update the secret. + Secret updatedSecret = client.updateSecret(secret, fieldMask); + System.out.printf("Updated secret %s\n", updatedSecret.getName()); + } + } +} +// [END secretmanager_update_secret_with_delayed_destroy] diff --git a/secretmanager/src/main/java/secretmanager/regionalsamples/CreateRegionalSecretWithDelayedDestroy.java b/secretmanager/src/main/java/secretmanager/regionalsamples/CreateRegionalSecretWithDelayedDestroy.java new file mode 100644 index 00000000000..15d176a9c75 --- /dev/null +++ b/secretmanager/src/main/java/secretmanager/regionalsamples/CreateRegionalSecretWithDelayedDestroy.java @@ -0,0 +1,69 @@ +/* + * Copyright 2025 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 + * + * http://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. + */ + +package secretmanager.regionalsamples; + +// [START secretmanager_create_regional_secret_with_delayed_destroy] + +import com.google.cloud.secretmanager.v1.LocationName; +import com.google.cloud.secretmanager.v1.Secret; +import com.google.cloud.secretmanager.v1.SecretManagerServiceClient; +import com.google.cloud.secretmanager.v1.SecretManagerServiceSettings; +import com.google.protobuf.Duration; +import java.io.IOException; + +public class CreateRegionalSecretWithDelayedDestroy { + + public static void createRegionalSecretWithDelayedDestroy() throws IOException { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String locationId = "your-location-id"; + String secretId = "your-secret-id"; + Integer versionDestroyTtl = 86400; + createRegionalSecretWithDelayedDestroy(projectId, secretId, locationId, versionDestroyTtl); + } + + // Create secret with version destroy TTL. + public static void createRegionalSecretWithDelayedDestroy( + String projectId, + String locationId, + String secretId, + Integer versionDestroyTtl) + throws IOException { + // Endpoint to call the regional secret manager sever + String apiEndpoint = String.format("secretmanager.%s.rep.googleapis.com:443", locationId); + SecretManagerServiceSettings secretManagerServiceSettings = + SecretManagerServiceSettings.newBuilder().setEndpoint(apiEndpoint).build(); + + // Initialize the client that will be used to send requests. + try (SecretManagerServiceClient client = + SecretManagerServiceClient.create(secretManagerServiceSettings)) { + // Build the parent name from the project. + LocationName locationName = LocationName.of(projectId, locationId); + + // Build the secret to create. + Secret secret = + Secret.newBuilder() + .setVersionDestroyTtl(Duration.newBuilder().setSeconds(versionDestroyTtl)) + .build(); + + // Create the secret. + Secret createdSecret = client.createSecret(locationName, secretId, secret); + System.out.printf("Created secret with version destroy ttl %s\n", createdSecret.getName()); + } + } +} +// [END secretmanager_create_regional_secret_with_delayed_destroy] diff --git a/secretmanager/src/main/java/secretmanager/regionalsamples/DisableRegionalSecretDelayedDestroy.java b/secretmanager/src/main/java/secretmanager/regionalsamples/DisableRegionalSecretDelayedDestroy.java new file mode 100644 index 00000000000..cb567d64422 --- /dev/null +++ b/secretmanager/src/main/java/secretmanager/regionalsamples/DisableRegionalSecretDelayedDestroy.java @@ -0,0 +1,72 @@ +/* + * Copyright 2025 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 + * + * http://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. + */ + +package secretmanager.regionalsamples; + +// [START secretmanager_disable_regional_secret_delayed_destroy] + +import com.google.cloud.secretmanager.v1.Secret; +import com.google.cloud.secretmanager.v1.SecretManagerServiceClient; +import com.google.cloud.secretmanager.v1.SecretManagerServiceSettings; +import com.google.cloud.secretmanager.v1.SecretName; +import com.google.protobuf.FieldMask; +import com.google.protobuf.util.FieldMaskUtil; +import java.io.IOException; + +public class DisableRegionalSecretDelayedDestroy { + + public static void disableRegionalSecretDelayedDestroy() throws IOException { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String locationId = "your-location-id"; + String secretId = "your-secret-id"; + disableRegionalSecretDelayedDestroy(projectId, locationId, secretId); + } + + // Disables the secret's delayed destroy. + public static void disableRegionalSecretDelayedDestroy( + String projectId, + String locationId, + String secretId) + throws IOException { + // Endpoint to call the regional secret manager sever + String apiEndpoint = String.format("secretmanager.%s.rep.googleapis.com:443", locationId); + SecretManagerServiceSettings secretManagerServiceSettings = + SecretManagerServiceSettings.newBuilder().setEndpoint(apiEndpoint).build(); + + // Initialize the client that will be used to send requests. + try (SecretManagerServiceClient client = + SecretManagerServiceClient.create(secretManagerServiceSettings)) { + // Build the parent name from the project and secret. + SecretName secretName = + SecretName.ofProjectLocationSecretName(projectId, locationId, secretId); + + // Build the secret to update. + Secret secret = + Secret.newBuilder() + .setName(secretName.toString()) + .build(); + + // Build the field mask. + FieldMask fieldMask = FieldMaskUtil.fromString("version_destroy_ttl"); + + // Update the secret. + Secret updatedSecret = client.updateSecret(secret, fieldMask); + System.out.printf("Updated secret %s\n", updatedSecret.getName()); + } + } +} +// [END secretmanager_disable_regional_secret_delayed_destroy] diff --git a/secretmanager/src/main/java/secretmanager/regionalsamples/UpdateRegionalSecretWithDelayedDestroy.java b/secretmanager/src/main/java/secretmanager/regionalsamples/UpdateRegionalSecretWithDelayedDestroy.java new file mode 100644 index 00000000000..e2fd1984d18 --- /dev/null +++ b/secretmanager/src/main/java/secretmanager/regionalsamples/UpdateRegionalSecretWithDelayedDestroy.java @@ -0,0 +1,76 @@ +/* + * Copyright 2025 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 + * + * http://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. + */ + +package secretmanager.regionalsamples; + +// [START secretmanager_update_regional_secret_with_delayed_destroy] + +import com.google.cloud.secretmanager.v1.Secret; +import com.google.cloud.secretmanager.v1.SecretManagerServiceClient; +import com.google.cloud.secretmanager.v1.SecretManagerServiceSettings; +import com.google.cloud.secretmanager.v1.SecretName; +import com.google.protobuf.Duration; +import com.google.protobuf.FieldMask; +import com.google.protobuf.util.FieldMaskUtil; +import java.io.IOException; + +public class UpdateRegionalSecretWithDelayedDestroy { + + public static void updateRegionalSecretWithDelayedDestroy() throws IOException { + // TODO(developer): Replace these variables before running the sample. + String projectId = "your-project-id"; + String locationId = "your-location-id"; + String secretId = "your-secret-id"; + Integer versionDestroyTtl = 86400; + updateRegionalSecretWithDelayedDestroy(projectId, locationId, secretId, versionDestroyTtl); + } + + // Update secret with version destroy TTL. + public static void updateRegionalSecretWithDelayedDestroy( + String projectId, + String locationId, + String secretId, + Integer versionDestroyTtl) + throws IOException { + // Endpoint to call the regional secret manager sever + String apiEndpoint = String.format("secretmanager.%s.rep.googleapis.com:443", locationId); + SecretManagerServiceSettings secretManagerServiceSettings = + SecretManagerServiceSettings.newBuilder().setEndpoint(apiEndpoint).build(); + + // Initialize the client that will be used to send requests. + try (SecretManagerServiceClient client = + SecretManagerServiceClient.create(secretManagerServiceSettings)) { + // Build the parent name from the project and secret. + SecretName secretName = + SecretName.ofProjectLocationSecretName(projectId, locationId, secretId); + + // Build the secret to update. + Secret secret = + Secret.newBuilder() + .setName(secretName.toString()) + .setVersionDestroyTtl(Duration.newBuilder().setSeconds(versionDestroyTtl)) + .build(); + + // Build the field mask. + FieldMask fieldMask = FieldMaskUtil.fromString("version_destroy_ttl"); + + // Update the secret. + Secret updatedSecret = client.updateSecret(secret, fieldMask); + System.out.printf("Updated secret %s\n", updatedSecret.getName()); + } + } +} +// [END secretmanager_update_regional_secret_with_delayed_destroy] diff --git a/secretmanager/src/test/java/secretmanager/SnippetsIT.java b/secretmanager/src/test/java/secretmanager/SnippetsIT.java index a67edf2b303..f5543306faf 100644 --- a/secretmanager/src/test/java/secretmanager/SnippetsIT.java +++ b/secretmanager/src/test/java/secretmanager/SnippetsIT.java @@ -89,7 +89,9 @@ public class SnippetsIT { private static Secret TEST_SECRET; private static Secret TEST_SECRET_TO_DELETE; private static Secret TEST_SECRET_TO_DELETE_WITH_ETAG; + private static Secret TEST_SECRET_TO_DELAYED_DESTROY; private static Secret TEST_SECRET_WITH_VERSIONS; + private static SecretName TEST_SECRET_WITH_DELAYED_DESTROY; private static SecretName TEST_SECRET_TO_CREATE_NAME; private static SecretName TEST_SECRET_WITH_LABEL_TO_CREATE_NAME; private static SecretName TEST_SECRET_WITH_TAGS_TO_CREATE_NAME; @@ -116,6 +118,8 @@ public static void beforeAll() throws Exception { TEST_SECRET_TO_DELETE = createSecret(false); TEST_SECRET_TO_DELETE_WITH_ETAG = createSecret(false); TEST_SECRET_WITH_VERSIONS = createSecret(false); + TEST_SECRET_TO_DELAYED_DESTROY = createSecret(false); + TEST_SECRET_WITH_DELAYED_DESTROY = SecretName.of(PROJECT_ID, randomSecretId()); TEST_SECRET_TO_CREATE_NAME = SecretName.of(PROJECT_ID, randomSecretId()); TEST_UMMR_SECRET_TO_CREATE_NAME = SecretName.of(PROJECT_ID, randomSecretId()); TEST_SECRET_WITH_TAGS_TO_CREATE_NAME = SecretName.of(PROJECT_ID, randomSecretId()); @@ -160,6 +164,8 @@ public static void afterAll() throws Exception { deleteSecret(TEST_SECRET_TO_DELETE.getName()); deleteSecret(TEST_SECRET_TO_DELETE_WITH_ETAG.getName()); deleteSecret(TEST_SECRET_WITH_VERSIONS.getName()); + deleteSecret(TEST_SECRET_WITH_DELAYED_DESTROY.toString()); + deleteSecret(TEST_SECRET_TO_DELAYED_DESTROY.getName()); deleteTags(); } @@ -583,6 +589,32 @@ public void testUpdateSecretWithAlias() throws IOException { assertThat(stdOut.toString()).contains("test"); } + @Test + public void testCreateSecretWithDelayedDestroy() throws IOException { + SecretName name = TEST_SECRET_WITH_DELAYED_DESTROY; + CreateSecretWithDelayedDestroy.createSecretWithDelayedDestroy( + name.getProject(), name.getSecret(), 86400); + + assertThat(stdOut.toString()).contains("Created secret with version destroy ttl"); + } + + @Test + public void testUpdateSecretWithDelayedDestroy() throws IOException { + SecretName name = SecretName.parse(TEST_SECRET_TO_DELAYED_DESTROY.getName()); + UpdateSecretWithDelayedDestroy.updateSecretWithDelayedDestroy( + name.getProject(), name.getSecret(), 86400); + + assertThat(stdOut.toString()).contains("Updated secret"); + } + + @Test + public void testDisableSecretDelayedDestroy() throws IOException { + SecretName name = SecretName.parse(TEST_SECRET_TO_DELAYED_DESTROY.getName()); + DisableSecretDelayedDestroy.disableSecretDelayedDestroy(name.getProject(), name.getSecret()); + + assertThat(stdOut.toString()).contains("Updated secret"); + } + @Test public void testConsumeEventNotification() { String message = "hello!"; @@ -599,5 +631,4 @@ public void testConsumeEventNotification() { assertThat(log).isEqualTo( "Received SECRET_UPDATE for projects/p/secrets/s. New metadata: hello!"); } - } diff --git a/secretmanager/src/test/java/secretmanager/regionalsamples/SnippetsIT.java b/secretmanager/src/test/java/secretmanager/regionalsamples/SnippetsIT.java index 55313b3a12a..8057bdc42f2 100644 --- a/secretmanager/src/test/java/secretmanager/regionalsamples/SnippetsIT.java +++ b/secretmanager/src/test/java/secretmanager/regionalsamples/SnippetsIT.java @@ -99,6 +99,8 @@ public class SnippetsIT { private static Secret TEST_REGIONAL_SECRET_TO_DELETE; private static Secret TEST_REGIONAL_SECRET_TO_DELETE_WITH_ETAG; private static Secret TEST_REGIONAL_SECRET_WITH_VERSIONS; + private static Secret TEST_REGIONAL_SECRET_TO_DELAYED_DESTROY; + private static SecretName TEST_REGIONAL_SECRET_WITH_DELAYED_DESTROY; private static SecretName TEST_REGIONAL_SECRET_TO_CREATE_NAME; private static SecretName TEST_REGIONAL_SECRET_WITH_LABEL_TO_CREATE_NAME; private static SecretName TEST_REGIONAL_SECRET_WITH_TAGS_TO_CREATE_NAME; @@ -126,6 +128,9 @@ public static void beforeAll() throws Exception { TEST_REGIONAL_SECRET_TO_DELETE = createRegionalSecret(); TEST_REGIONAL_SECRET_TO_DELETE_WITH_ETAG = createRegionalSecret(); TEST_REGIONAL_SECRET_WITH_VERSIONS = createRegionalSecret(); + TEST_REGIONAL_SECRET_TO_DELAYED_DESTROY = createRegionalSecret(); + TEST_REGIONAL_SECRET_WITH_DELAYED_DESTROY = + SecretName.ofProjectLocationSecretName(PROJECT_ID, LOCATION_ID, randomSecretId()); TEST_REGIONAL_SECRET_TO_CREATE_NAME = SecretName.ofProjectLocationSecretName(PROJECT_ID, LOCATION_ID, randomSecretId()); TEST_REGIONAL_SECRET_WITH_ANNOTATION_TO_CREATE_NAME = @@ -178,6 +183,8 @@ public static void afterAll() throws Exception { deleteRegionalSecret(TEST_REGIONAL_SECRET_TO_DELETE.getName()); deleteRegionalSecret(TEST_REGIONAL_SECRET_TO_DELETE_WITH_ETAG.getName()); deleteRegionalSecret(TEST_REGIONAL_SECRET_WITH_VERSIONS.getName()); + deleteRegionalSecret(TEST_REGIONAL_SECRET_WITH_DELAYED_DESTROY.toString()); + deleteRegionalSecret(TEST_REGIONAL_SECRET_TO_DELAYED_DESTROY.getName()); deleteTags(); } @@ -674,5 +681,32 @@ public void testEditSecretAnnotations() throws IOException { assertThat(updatedSecret.getAnnotationsMap()).containsEntry( UPDATED_ANNOTATION_KEY, UPDATED_ANNOTATION_VALUE); } + + @Test + public void testCreateRegionalSecretWithDelayedDestroy() throws IOException { + SecretName name = TEST_REGIONAL_SECRET_WITH_DELAYED_DESTROY; + CreateRegionalSecretWithDelayedDestroy.createRegionalSecretWithDelayedDestroy( + name.getProject(), name.getLocation(), name.getSecret(), 86400); + + assertThat(stdOut.toString()).contains("Created secret with version destroy ttl"); + } + + @Test + public void testUpdateRegionalSecretWithDelayedDestroy() throws IOException { + SecretName name = SecretName.parse(TEST_REGIONAL_SECRET_TO_DELAYED_DESTROY.getName()); + UpdateRegionalSecretWithDelayedDestroy.updateRegionalSecretWithDelayedDestroy( + name.getProject(), name.getLocation(), name.getSecret(), 86400); + + assertThat(stdOut.toString()).contains("Updated secret"); + } + + @Test + public void testDisableRegionalSecretDelayedDestroy() throws IOException { + SecretName name = SecretName.parse(TEST_REGIONAL_SECRET_TO_DELAYED_DESTROY.getName()); + DisableRegionalSecretDelayedDestroy.disableRegionalSecretDelayedDestroy( + name.getProject(), name.getLocation(), name.getSecret()); + + assertThat(stdOut.toString()).contains("Updated secret"); + } } From d27f6662086905e8293c42c364cc25491594d90a Mon Sep 17 00:00:00 2001 From: durgesh-ninave-crest Date: Wed, 23 Jul 2025 14:14:22 +0530 Subject: [PATCH 2/3] chore(secretmanager): Update code sample --- .../regionalsamples/CreateRegionalSecretWithDelayedDestroy.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/secretmanager/src/main/java/secretmanager/regionalsamples/CreateRegionalSecretWithDelayedDestroy.java b/secretmanager/src/main/java/secretmanager/regionalsamples/CreateRegionalSecretWithDelayedDestroy.java index 15d176a9c75..9125cb76653 100644 --- a/secretmanager/src/main/java/secretmanager/regionalsamples/CreateRegionalSecretWithDelayedDestroy.java +++ b/secretmanager/src/main/java/secretmanager/regionalsamples/CreateRegionalSecretWithDelayedDestroy.java @@ -33,7 +33,7 @@ public static void createRegionalSecretWithDelayedDestroy() throws IOException { String locationId = "your-location-id"; String secretId = "your-secret-id"; Integer versionDestroyTtl = 86400; - createRegionalSecretWithDelayedDestroy(projectId, secretId, locationId, versionDestroyTtl); + createRegionalSecretWithDelayedDestroy(projectId, locationId, secretId, versionDestroyTtl); } // Create secret with version destroy TTL. From 280112939efcd059f28fcf839edaa9511b949073 Mon Sep 17 00:00:00 2001 From: durgesh-ninave-crest Date: Fri, 25 Jul 2025 16:05:20 +0530 Subject: [PATCH 3/3] chore(secretmanager): Update test assertions --- .../CreateSecretWithDelayedDestroy.java | 4 +++- .../secretmanager/DisableSecretDelayedDestroy.java | 4 +++- .../UpdateSecretWithDelayedDestroy.java | 4 +++- .../CreateRegionalSecretWithDelayedDestroy.java | 4 +++- .../DisableRegionalSecretDelayedDestroy.java | 4 +++- .../UpdateRegionalSecretWithDelayedDestroy.java | 4 +++- .../src/test/java/secretmanager/SnippetsIT.java | 12 ++++++++---- .../secretmanager/regionalsamples/SnippetsIT.java | 11 +++++++---- 8 files changed, 33 insertions(+), 14 deletions(-) diff --git a/secretmanager/src/main/java/secretmanager/CreateSecretWithDelayedDestroy.java b/secretmanager/src/main/java/secretmanager/CreateSecretWithDelayedDestroy.java index de3bb9f2845..a75199e005f 100644 --- a/secretmanager/src/main/java/secretmanager/CreateSecretWithDelayedDestroy.java +++ b/secretmanager/src/main/java/secretmanager/CreateSecretWithDelayedDestroy.java @@ -36,7 +36,7 @@ public static void createSecretWithDelayedDestroy() throws IOException { } // Create secret with version destroy TTL. - public static void createSecretWithDelayedDestroy( + public static Secret createSecretWithDelayedDestroy( String projectId, String secretId, Integer versionDestroyTtl) @@ -59,6 +59,8 @@ public static void createSecretWithDelayedDestroy( // Create the secret. Secret createdSecret = client.createSecret(projectName, secretId, secret); System.out.printf("Created secret with version destroy ttl %s\n", createdSecret.getName()); + + return createdSecret; } } } diff --git a/secretmanager/src/main/java/secretmanager/DisableSecretDelayedDestroy.java b/secretmanager/src/main/java/secretmanager/DisableSecretDelayedDestroy.java index e4e56e474a4..d558f1c1de5 100644 --- a/secretmanager/src/main/java/secretmanager/DisableSecretDelayedDestroy.java +++ b/secretmanager/src/main/java/secretmanager/DisableSecretDelayedDestroy.java @@ -35,7 +35,7 @@ public static void disableSecretDelayedDestroy() throws IOException { } // Disables delayed destroy for a secret. - public static void disableSecretDelayedDestroy( + public static Secret disableSecretDelayedDestroy( String projectId, String secretId) throws IOException { @@ -56,6 +56,8 @@ public static void disableSecretDelayedDestroy( // Update the secret. Secret updatedSecret = client.updateSecret(secret, fieldMask); System.out.printf("Updated secret %s\n", updatedSecret.getName()); + + return updatedSecret; } } } diff --git a/secretmanager/src/main/java/secretmanager/UpdateSecretWithDelayedDestroy.java b/secretmanager/src/main/java/secretmanager/UpdateSecretWithDelayedDestroy.java index 707dc73d746..21d061f9dbe 100644 --- a/secretmanager/src/main/java/secretmanager/UpdateSecretWithDelayedDestroy.java +++ b/secretmanager/src/main/java/secretmanager/UpdateSecretWithDelayedDestroy.java @@ -37,7 +37,7 @@ public static void updateSecretWithDelayedDestroy() throws IOException { } // Update secret with version destroy TTL. - public static void updateSecretWithDelayedDestroy( + public static Secret updateSecretWithDelayedDestroy( String projectId, String secretId, Integer versionDestroyTtl) @@ -60,6 +60,8 @@ public static void updateSecretWithDelayedDestroy( // Update the secret. Secret updatedSecret = client.updateSecret(secret, fieldMask); System.out.printf("Updated secret %s\n", updatedSecret.getName()); + + return updatedSecret; } } } diff --git a/secretmanager/src/main/java/secretmanager/regionalsamples/CreateRegionalSecretWithDelayedDestroy.java b/secretmanager/src/main/java/secretmanager/regionalsamples/CreateRegionalSecretWithDelayedDestroy.java index 9125cb76653..2866dfaea57 100644 --- a/secretmanager/src/main/java/secretmanager/regionalsamples/CreateRegionalSecretWithDelayedDestroy.java +++ b/secretmanager/src/main/java/secretmanager/regionalsamples/CreateRegionalSecretWithDelayedDestroy.java @@ -37,7 +37,7 @@ public static void createRegionalSecretWithDelayedDestroy() throws IOException { } // Create secret with version destroy TTL. - public static void createRegionalSecretWithDelayedDestroy( + public static Secret createRegionalSecretWithDelayedDestroy( String projectId, String locationId, String secretId, @@ -63,6 +63,8 @@ public static void createRegionalSecretWithDelayedDestroy( // Create the secret. Secret createdSecret = client.createSecret(locationName, secretId, secret); System.out.printf("Created secret with version destroy ttl %s\n", createdSecret.getName()); + + return createdSecret; } } } diff --git a/secretmanager/src/main/java/secretmanager/regionalsamples/DisableRegionalSecretDelayedDestroy.java b/secretmanager/src/main/java/secretmanager/regionalsamples/DisableRegionalSecretDelayedDestroy.java index cb567d64422..03753d09d77 100644 --- a/secretmanager/src/main/java/secretmanager/regionalsamples/DisableRegionalSecretDelayedDestroy.java +++ b/secretmanager/src/main/java/secretmanager/regionalsamples/DisableRegionalSecretDelayedDestroy.java @@ -37,7 +37,7 @@ public static void disableRegionalSecretDelayedDestroy() throws IOException { } // Disables the secret's delayed destroy. - public static void disableRegionalSecretDelayedDestroy( + public static Secret disableRegionalSecretDelayedDestroy( String projectId, String locationId, String secretId) @@ -66,6 +66,8 @@ public static void disableRegionalSecretDelayedDestroy( // Update the secret. Secret updatedSecret = client.updateSecret(secret, fieldMask); System.out.printf("Updated secret %s\n", updatedSecret.getName()); + + return updatedSecret; } } } diff --git a/secretmanager/src/main/java/secretmanager/regionalsamples/UpdateRegionalSecretWithDelayedDestroy.java b/secretmanager/src/main/java/secretmanager/regionalsamples/UpdateRegionalSecretWithDelayedDestroy.java index e2fd1984d18..2d233846d97 100644 --- a/secretmanager/src/main/java/secretmanager/regionalsamples/UpdateRegionalSecretWithDelayedDestroy.java +++ b/secretmanager/src/main/java/secretmanager/regionalsamples/UpdateRegionalSecretWithDelayedDestroy.java @@ -39,7 +39,7 @@ public static void updateRegionalSecretWithDelayedDestroy() throws IOException { } // Update secret with version destroy TTL. - public static void updateRegionalSecretWithDelayedDestroy( + public static Secret updateRegionalSecretWithDelayedDestroy( String projectId, String locationId, String secretId, @@ -70,6 +70,8 @@ public static void updateRegionalSecretWithDelayedDestroy( // Update the secret. Secret updatedSecret = client.updateSecret(secret, fieldMask); System.out.printf("Updated secret %s\n", updatedSecret.getName()); + + return updatedSecret; } } } diff --git a/secretmanager/src/test/java/secretmanager/SnippetsIT.java b/secretmanager/src/test/java/secretmanager/SnippetsIT.java index f5543306faf..41f88a1e6d9 100644 --- a/secretmanager/src/test/java/secretmanager/SnippetsIT.java +++ b/secretmanager/src/test/java/secretmanager/SnippetsIT.java @@ -592,27 +592,31 @@ public void testUpdateSecretWithAlias() throws IOException { @Test public void testCreateSecretWithDelayedDestroy() throws IOException { SecretName name = TEST_SECRET_WITH_DELAYED_DESTROY; - CreateSecretWithDelayedDestroy.createSecretWithDelayedDestroy( + Secret secret = CreateSecretWithDelayedDestroy.createSecretWithDelayedDestroy( name.getProject(), name.getSecret(), 86400); assertThat(stdOut.toString()).contains("Created secret with version destroy ttl"); + assertThat(secret.getVersionDestroyTtl().getSeconds()).isEqualTo(86400); } @Test public void testUpdateSecretWithDelayedDestroy() throws IOException { SecretName name = SecretName.parse(TEST_SECRET_TO_DELAYED_DESTROY.getName()); - UpdateSecretWithDelayedDestroy.updateSecretWithDelayedDestroy( - name.getProject(), name.getSecret(), 86400); + Secret secret = UpdateSecretWithDelayedDestroy.updateSecretWithDelayedDestroy( + name.getProject(), name.getSecret(), 86520); assertThat(stdOut.toString()).contains("Updated secret"); + assertThat(secret.getVersionDestroyTtl().getSeconds()).isEqualTo(86520); } @Test public void testDisableSecretDelayedDestroy() throws IOException { SecretName name = SecretName.parse(TEST_SECRET_TO_DELAYED_DESTROY.getName()); - DisableSecretDelayedDestroy.disableSecretDelayedDestroy(name.getProject(), name.getSecret()); + Secret secret = DisableSecretDelayedDestroy.disableSecretDelayedDestroy( + name.getProject(), name.getSecret()); assertThat(stdOut.toString()).contains("Updated secret"); + assertThat(secret.getVersionDestroyTtl().getSeconds()).isEqualTo(0); } @Test diff --git a/secretmanager/src/test/java/secretmanager/regionalsamples/SnippetsIT.java b/secretmanager/src/test/java/secretmanager/regionalsamples/SnippetsIT.java index 8057bdc42f2..11ca876dc30 100644 --- a/secretmanager/src/test/java/secretmanager/regionalsamples/SnippetsIT.java +++ b/secretmanager/src/test/java/secretmanager/regionalsamples/SnippetsIT.java @@ -685,28 +685,31 @@ public void testEditSecretAnnotations() throws IOException { @Test public void testCreateRegionalSecretWithDelayedDestroy() throws IOException { SecretName name = TEST_REGIONAL_SECRET_WITH_DELAYED_DESTROY; - CreateRegionalSecretWithDelayedDestroy.createRegionalSecretWithDelayedDestroy( + Secret secret = CreateRegionalSecretWithDelayedDestroy.createRegionalSecretWithDelayedDestroy( name.getProject(), name.getLocation(), name.getSecret(), 86400); assertThat(stdOut.toString()).contains("Created secret with version destroy ttl"); + assertThat(secret.getVersionDestroyTtl().getSeconds()).isEqualTo(86400); } @Test public void testUpdateRegionalSecretWithDelayedDestroy() throws IOException { SecretName name = SecretName.parse(TEST_REGIONAL_SECRET_TO_DELAYED_DESTROY.getName()); - UpdateRegionalSecretWithDelayedDestroy.updateRegionalSecretWithDelayedDestroy( - name.getProject(), name.getLocation(), name.getSecret(), 86400); + Secret secret = UpdateRegionalSecretWithDelayedDestroy.updateRegionalSecretWithDelayedDestroy( + name.getProject(), name.getLocation(), name.getSecret(), 86520); assertThat(stdOut.toString()).contains("Updated secret"); + assertThat(secret.getVersionDestroyTtl().getSeconds()).isEqualTo(86520); } @Test public void testDisableRegionalSecretDelayedDestroy() throws IOException { SecretName name = SecretName.parse(TEST_REGIONAL_SECRET_TO_DELAYED_DESTROY.getName()); - DisableRegionalSecretDelayedDestroy.disableRegionalSecretDelayedDestroy( + Secret secret = DisableRegionalSecretDelayedDestroy.disableRegionalSecretDelayedDestroy( name.getProject(), name.getLocation(), name.getSecret()); assertThat(stdOut.toString()).contains("Updated secret"); + assertThat(secret.getVersionDestroyTtl().getSeconds()).isEqualTo(0); } }