From 6e923300a4c976d2b38a3167300928968b496891 Mon Sep 17 00:00:00 2001 From: Nidhi Nandwani Date: Tue, 16 Jun 2026 06:39:10 +0000 Subject: [PATCH] feat(storage): update compose sample to support deleteSourceObjects option Update composeObject snippet to support deleteSourceObjects option. Add corresponding system integration tests. [Generated-by: AI] --- .../example/storage/object/ComposeObject.java | 8 +++-- .../com/example/storage/ITObjectSnippets.java | 29 ++++++++++++++++++- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/java-storage/samples/snippets/src/main/java/com/example/storage/object/ComposeObject.java b/java-storage/samples/snippets/src/main/java/com/example/storage/object/ComposeObject.java index a1707ce26ce8..3b548e6de44f 100644 --- a/java-storage/samples/snippets/src/main/java/com/example/storage/object/ComposeObject.java +++ b/java-storage/samples/snippets/src/main/java/com/example/storage/object/ComposeObject.java @@ -28,7 +28,8 @@ public static void composeObject( String firstObjectName, String secondObjectName, String targetObjectName, - String projectId) { + String projectId, + boolean deleteSourceObjects) { // The ID of your GCP project // String projectId = "your-project-id"; @@ -70,17 +71,20 @@ public static void composeObject( .addSource(firstObjectName, secondObjectName) .setTarget(BlobInfo.newBuilder(bucketName, targetObjectName).build()) .setTargetOptions(precondition) + .setDeleteSourceObjects(deleteSourceObjects) .build(); Blob compositeObject = storage.compose(composeRequest); + String deletionMessage = deleteSourceObjects ? " and the source objects were deleted." : "."; System.out.println( "New composite object " + compositeObject.getName() + " was created by combining " + firstObjectName + " and " - + secondObjectName); + + secondObjectName + + deletionMessage); } } // [END storage_compose_file] diff --git a/java-storage/samples/snippets/src/test/java/com/example/storage/ITObjectSnippets.java b/java-storage/samples/snippets/src/test/java/com/example/storage/ITObjectSnippets.java index 4789c02524cf..195932c73dec 100644 --- a/java-storage/samples/snippets/src/test/java/com/example/storage/ITObjectSnippets.java +++ b/java-storage/samples/snippets/src/test/java/com/example/storage/ITObjectSnippets.java @@ -468,12 +468,39 @@ public void testComposeObject() { BlobInfo.newBuilder(bucket.getName(), secondObject).build(), secondObject.getBytes(UTF_8)); ComposeObject.composeObject( - bucket.getName(), firstObject, secondObject, targetObject, GOOGLE_CLOUD_PROJECT); + bucket.getName(), firstObject, secondObject, targetObject, GOOGLE_CLOUD_PROJECT, false); String got = stdOut.getCapturedOutputAsUtf8String(); assertThat(got).contains(firstObject); assertThat(got).contains(secondObject); assertThat(got).contains(targetObject); + // Verify source objects still exist + assertThat(storage.get(bucket.getName(), firstObject)).isNotNull(); + assertThat(storage.get(bucket.getName(), secondObject)).isNotNull(); + } + + @Test + public void testComposeObjectWithDeleteSources() { + String firstObject = generator.randomObjectName(); + String secondObject = generator.randomObjectName(); + String targetObject = generator.randomObjectName(); + storage.create( + BlobInfo.newBuilder(bucket.getName(), firstObject).build(), firstObject.getBytes(UTF_8)); + storage.create( + BlobInfo.newBuilder(bucket.getName(), secondObject).build(), secondObject.getBytes(UTF_8)); + + ComposeObject.composeObject( + bucket.getName(), firstObject, secondObject, targetObject, GOOGLE_CLOUD_PROJECT, true); + + String got = stdOut.getCapturedOutputAsUtf8String(); + assertThat(got).contains(firstObject); + assertThat(got).contains(secondObject); + assertThat(got).contains(targetObject); + assertThat(got).contains("and the source objects were deleted"); + + // Verify source objects are deleted + assertThat(storage.get(bucket.getName(), firstObject)).isNull(); + assertThat(storage.get(bucket.getName(), secondObject)).isNull(); } @Test