From 3b405ad463ffe61432d92b8fa2e16e839712980d Mon Sep 17 00:00:00 2001 From: Lawrence Qiu Date: Thu, 4 Jun 2026 19:41:42 +0000 Subject: [PATCH 1/4] test(logging): re-enable ITSinkTest and scope sink cleanup to test prefix Fixes b/482174880 (GitHub Issue #11906) by ensuring setUp() only cleans up leaked test sinks matching TEST_SINK_PREFIX, avoiding PERMISSION_DENIED errors on immutable built-in system sinks (_Required, _Default). Also wraps test verification logic in try...finally blocks for robust self-cleanup. BUG=b/482174880 TAG=agy CONV=d4a74f94-579a-4c3f-96c3-f90fcbc6c699 --- .../google/cloud/logging/it/ITSinkTest.java | 37 +++++++++++-------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/java-logging/google-cloud-logging/src/test/java/com/google/cloud/logging/it/ITSinkTest.java b/java-logging/google-cloud-logging/src/test/java/com/google/cloud/logging/it/ITSinkTest.java index ee429a094ce9..9e27da91688b 100644 --- a/java-logging/google-cloud-logging/src/test/java/com/google/cloud/logging/it/ITSinkTest.java +++ b/java-logging/google-cloud-logging/src/test/java/com/google/cloud/logging/it/ITSinkTest.java @@ -34,11 +34,12 @@ import java.util.Iterator; import java.util.Set; import org.junit.BeforeClass; -import org.junit.Ignore; import org.junit.Test; public class ITSinkTest extends BaseSystemTest { + private static final String TEST_SINK_PREFIX = "test-"; + @BeforeClass public static void setUp() { // Cleanup all stucked sinks if any @@ -47,6 +48,9 @@ public static void setUp() { Iterator iterator = sinkPage.iterateAll().iterator(); while (iterator.hasNext()) { Sink sink = iterator.next(); + if (!sink.getName().startsWith(TEST_SINK_PREFIX)) { + continue; + } try { sink.delete(); } catch (Exception ex) { @@ -56,7 +60,6 @@ public static void setUp() { } @Test - @Ignore public void testCreateGetUpdateAndDeleteSink() { String name = formatForTest("test-create-get-update-sink"); SinkInfo sinkInfo = @@ -65,19 +68,23 @@ public void testCreateGetUpdateAndDeleteSink() { .setVersionFormat(SinkInfo.VersionFormat.V2) .build(); Sink sink = logging.create(sinkInfo); - assertEquals(name, sink.getName()); - assertEquals(SinkInfo.VersionFormat.V2, sink.getVersionFormat()); - assertEquals("severity>=ERROR", sink.getFilter()); - SinkInfo.Destination.DatasetDestination datasetDestination = sink.getDestination(); - assertEquals(logging.getOptions().getProjectId(), datasetDestination.getProject()); - assertEquals("dataset", datasetDestination.getDataset()); - assertEquals(sink, logging.getSink(name)); - sink = sink.toBuilder().setFilter("severity<=ERROR").build().update(); - assertEquals(name, sink.getName()); - assertEquals(SinkInfo.VersionFormat.V2, sink.getVersionFormat()); - assertEquals("severity<=ERROR", sink.getFilter()); - assertTrue(sink.delete()); - assertFalse(sink.delete()); + try { + assertEquals(name, sink.getName()); + assertEquals(SinkInfo.VersionFormat.V2, sink.getVersionFormat()); + assertEquals("severity>=ERROR", sink.getFilter()); + SinkInfo.Destination.DatasetDestination datasetDestination = sink.getDestination(); + assertEquals(logging.getOptions().getProjectId(), datasetDestination.getProject()); + assertEquals("dataset", datasetDestination.getDataset()); + assertEquals(sink, logging.getSink(name)); + sink = sink.toBuilder().setFilter("severity<=ERROR").build().update(); + assertEquals(name, sink.getName()); + assertEquals(SinkInfo.VersionFormat.V2, sink.getVersionFormat()); + assertEquals("severity<=ERROR", sink.getFilter()); + assertTrue(sink.delete()); + assertFalse(sink.delete()); + } finally { + logging.deleteSink(name); + } } @Test From fd9b20e8bfa1356878a2d77d3d691342a79bb11f Mon Sep 17 00:00:00 2001 From: Lawrence Qiu Date: Thu, 4 Jun 2026 19:57:40 +0000 Subject: [PATCH 2/4] test(logging): introduce class-local formatForTest wrapper in ITSinkTest Replaces static import of RemoteLoggingHelper.formatForTest with a class-local helper method that automatically prepends TEST_SINK_PREFIX, ensuring a standardized log entry and test sink prefix across all test cases within ITSinkTest. BUG=b/482174880 TAG=agy CONV=d4a74f94-579a-4c3f-96c3-f90fcbc6c699 --- .../com/google/cloud/logging/it/ITSinkTest.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/java-logging/google-cloud-logging/src/test/java/com/google/cloud/logging/it/ITSinkTest.java b/java-logging/google-cloud-logging/src/test/java/com/google/cloud/logging/it/ITSinkTest.java index 9e27da91688b..dd512364d550 100644 --- a/java-logging/google-cloud-logging/src/test/java/com/google/cloud/logging/it/ITSinkTest.java +++ b/java-logging/google-cloud-logging/src/test/java/com/google/cloud/logging/it/ITSinkTest.java @@ -16,7 +16,6 @@ package com.google.cloud.logging.it; -import static com.google.cloud.logging.testing.RemoteLoggingHelper.formatForTest; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; @@ -30,6 +29,7 @@ import com.google.cloud.logging.LoggingException; import com.google.cloud.logging.Sink; import com.google.cloud.logging.SinkInfo; +import com.google.cloud.logging.testing.RemoteLoggingHelper; import com.google.common.collect.Sets; import java.util.Iterator; import java.util.Set; @@ -40,6 +40,10 @@ public class ITSinkTest extends BaseSystemTest { private static final String TEST_SINK_PREFIX = "test-"; + private static String formatForTest(String name) { + return RemoteLoggingHelper.formatForTest(TEST_SINK_PREFIX + name); + } + @BeforeClass public static void setUp() { // Cleanup all stucked sinks if any @@ -61,7 +65,7 @@ public static void setUp() { @Test public void testCreateGetUpdateAndDeleteSink() { - String name = formatForTest("test-create-get-update-sink"); + String name = formatForTest("create-get-update-sink"); SinkInfo sinkInfo = SinkInfo.newBuilder(name, SinkInfo.Destination.DatasetDestination.of("dataset")) .setFilter("severity>=ERROR") @@ -89,7 +93,7 @@ public void testCreateGetUpdateAndDeleteSink() { @Test public void testUpdateNonExistingSink() { - String name = formatForTest("test-update-non-existing-sink"); + String name = formatForTest("update-non-existing-sink"); SinkInfo sinkInfo = SinkInfo.newBuilder(name, SinkInfo.Destination.DatasetDestination.of("dataset")) .setFilter("severity>=ERROR") @@ -106,8 +110,8 @@ public void testUpdateNonExistingSink() { @Test public void testListSinks() throws InterruptedException { - String firstName = formatForTest("test-list-sinks-1"); - String secondName = formatForTest("test-list-sinks-2"); + String firstName = formatForTest("list-sinks-1"); + String secondName = formatForTest("list-sinks-2"); Sink firstSink = logging.create( SinkInfo.of(firstName, SinkInfo.Destination.DatasetDestination.of("dataset"))); From ef0d358d01c750eea20ce6d87aac6fd6a47b86c8 Mon Sep 17 00:00:00 2001 From: Lawrence Qiu Date: Thu, 4 Jun 2026 20:01:49 +0000 Subject: [PATCH 3/4] test(logging): centralize test prefix handling inside RemoteLoggingHelper Embeds TEST_SINK_PREFIX directly within RemoteLoggingHelper.formatForTest(), ensuring all client test cases across the entire test suite consistently receive standardized prefix formatting without requiring class-local wrappers or repetitive literal string prefixes. BUG=b/482174880 TAG=agy CONV=d4a74f94-579a-4c3f-96c3-f90fcbc6c699 --- .../google/cloud/logging/testing/RemoteLoggingHelper.java | 4 +++- .../test/java/com/google/cloud/logging/it/ITSinkTest.java | 6 +----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/java-logging/google-cloud-logging/src/main/java/com/google/cloud/logging/testing/RemoteLoggingHelper.java b/java-logging/google-cloud-logging/src/main/java/com/google/cloud/logging/testing/RemoteLoggingHelper.java index d1cc027aa080..594260867167 100644 --- a/java-logging/google-cloud-logging/src/main/java/com/google/cloud/logging/testing/RemoteLoggingHelper.java +++ b/java-logging/google-cloud-logging/src/main/java/com/google/cloud/logging/testing/RemoteLoggingHelper.java @@ -37,6 +37,7 @@ public class RemoteLoggingHelper { private static final Logger log = Logger.getLogger(RemoteLoggingHelper.class.getName()); + private static final String TEST_SINK_PREFIX = "test-"; private final LoggingOptions options; private RemoteLoggingHelper(LoggingOptions options) { @@ -96,7 +97,8 @@ public static RemoteLoggingHelper create() { * name. */ public static String formatForTest(String name) { - return name + "-" + UUID.randomUUID(); + String prefix = name.startsWith(TEST_SINK_PREFIX) ? "" : TEST_SINK_PREFIX; + return prefix + name + "-" + UUID.randomUUID(); } private static RetrySettings retrySettings() { diff --git a/java-logging/google-cloud-logging/src/test/java/com/google/cloud/logging/it/ITSinkTest.java b/java-logging/google-cloud-logging/src/test/java/com/google/cloud/logging/it/ITSinkTest.java index dd512364d550..7b0546d27eba 100644 --- a/java-logging/google-cloud-logging/src/test/java/com/google/cloud/logging/it/ITSinkTest.java +++ b/java-logging/google-cloud-logging/src/test/java/com/google/cloud/logging/it/ITSinkTest.java @@ -16,6 +16,7 @@ package com.google.cloud.logging.it; +import static com.google.cloud.logging.testing.RemoteLoggingHelper.formatForTest; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; @@ -29,7 +30,6 @@ import com.google.cloud.logging.LoggingException; import com.google.cloud.logging.Sink; import com.google.cloud.logging.SinkInfo; -import com.google.cloud.logging.testing.RemoteLoggingHelper; import com.google.common.collect.Sets; import java.util.Iterator; import java.util.Set; @@ -40,10 +40,6 @@ public class ITSinkTest extends BaseSystemTest { private static final String TEST_SINK_PREFIX = "test-"; - private static String formatForTest(String name) { - return RemoteLoggingHelper.formatForTest(TEST_SINK_PREFIX + name); - } - @BeforeClass public static void setUp() { // Cleanup all stucked sinks if any From 1fbacffa4cb802e4913f7a6b921dfbdb6e01d4df Mon Sep 17 00:00:00 2001 From: Lawrence Qiu Date: Thu, 4 Jun 2026 20:39:38 +0000 Subject: [PATCH 4/4] test(logging): expose and reuse TEST_SINK_PREFIX from RemoteLoggingHelper Exposes TEST_SINK_PREFIX as public constant in RemoteLoggingHelper and statically imports it directly into ITSinkTest, removing duplicate local constant declarations. BUG=b/482174880 TAG=agy CONV=d4a74f94-579a-4c3f-96c3-f90fcbc6c699 --- .../com/google/cloud/logging/testing/RemoteLoggingHelper.java | 2 +- .../src/test/java/com/google/cloud/logging/it/ITSinkTest.java | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/java-logging/google-cloud-logging/src/main/java/com/google/cloud/logging/testing/RemoteLoggingHelper.java b/java-logging/google-cloud-logging/src/main/java/com/google/cloud/logging/testing/RemoteLoggingHelper.java index 594260867167..dd8d465f268b 100644 --- a/java-logging/google-cloud-logging/src/main/java/com/google/cloud/logging/testing/RemoteLoggingHelper.java +++ b/java-logging/google-cloud-logging/src/main/java/com/google/cloud/logging/testing/RemoteLoggingHelper.java @@ -37,7 +37,7 @@ public class RemoteLoggingHelper { private static final Logger log = Logger.getLogger(RemoteLoggingHelper.class.getName()); - private static final String TEST_SINK_PREFIX = "test-"; + public static final String TEST_SINK_PREFIX = "test-"; private final LoggingOptions options; private RemoteLoggingHelper(LoggingOptions options) { diff --git a/java-logging/google-cloud-logging/src/test/java/com/google/cloud/logging/it/ITSinkTest.java b/java-logging/google-cloud-logging/src/test/java/com/google/cloud/logging/it/ITSinkTest.java index 7b0546d27eba..abdd17a49326 100644 --- a/java-logging/google-cloud-logging/src/test/java/com/google/cloud/logging/it/ITSinkTest.java +++ b/java-logging/google-cloud-logging/src/test/java/com/google/cloud/logging/it/ITSinkTest.java @@ -16,6 +16,7 @@ package com.google.cloud.logging.it; +import static com.google.cloud.logging.testing.RemoteLoggingHelper.TEST_SINK_PREFIX; import static com.google.cloud.logging.testing.RemoteLoggingHelper.formatForTest; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -38,8 +39,6 @@ public class ITSinkTest extends BaseSystemTest { - private static final String TEST_SINK_PREFIX = "test-"; - @BeforeClass public static void setUp() { // Cleanup all stucked sinks if any