From 4aeba6e3f7032eb727d339985ad697874c030240 Mon Sep 17 00:00:00 2001 From: Ben McIlwain Date: Tue, 30 Jun 2026 12:34:15 -0400 Subject: [PATCH] Validate non-empty tlds in refresh DNS action (#3114) Add validation to RefreshDnsForAllDomainsAction to ensure the tlds parameter is not empty when invoked. Previously, invoking the action without specifying tlds would result in a no-op that logged an empty list and exited without error. This change makes missing tlds an explicit error, throwing an IllegalArgumentException so users running the command via nomulus curl receive clear feedback that the parameter is required. --- .../server/RefreshDnsForAllDomainsAction.java | 1 + .../server/RefreshDnsForAllDomainsActionTest.java | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/core/src/main/java/google/registry/tools/server/RefreshDnsForAllDomainsAction.java b/core/src/main/java/google/registry/tools/server/RefreshDnsForAllDomainsAction.java index 873f6363b..e48f2d1ac 100644 --- a/core/src/main/java/google/registry/tools/server/RefreshDnsForAllDomainsAction.java +++ b/core/src/main/java/google/registry/tools/server/RefreshDnsForAllDomainsAction.java @@ -105,6 +105,7 @@ public class RefreshDnsForAllDomainsAction implements Runnable { @Override public void run() { + checkArgument(!tlds.isEmpty(), "Must specify TLDs to refresh"); assertTldsExist(tlds); checkArgument(batchSize > 0, "Must specify a positive number for batch size"); logger.atInfo().log("Enqueueing DNS refresh tasks for TLDs %s.", tlds); diff --git a/core/src/test/java/google/registry/tools/server/RefreshDnsForAllDomainsActionTest.java b/core/src/test/java/google/registry/tools/server/RefreshDnsForAllDomainsActionTest.java index 863728f57..c10b4e81c 100644 --- a/core/src/test/java/google/registry/tools/server/RefreshDnsForAllDomainsActionTest.java +++ b/core/src/test/java/google/registry/tools/server/RefreshDnsForAllDomainsActionTest.java @@ -24,6 +24,7 @@ import static google.registry.testing.DatabaseHelper.createTld; import static google.registry.testing.DatabaseHelper.persistActiveDomain; import static google.registry.testing.DatabaseHelper.persistDeletedDomain; import static google.registry.util.DateTimeUtils.minusYears; +import static org.junit.jupiter.api.Assertions.assertThrows; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; @@ -151,4 +152,18 @@ public class RefreshDnsForAllDomainsActionTest { action.run(); assertDnsRequestsWithRequestTime(clock.now(), 11); } + + @Test + void test_runAction_emptyTlds_throwsException() { + action = + new RefreshDnsForAllDomainsAction( + response, + ImmutableSet.of(), + Optional.of(10), + Optional.empty(), + Optional.empty(), + new Random()); + IllegalArgumentException thrown = assertThrows(IllegalArgumentException.class, action::run); + assertThat(thrown).hasMessageThat().isEqualTo("Must specify TLDs to refresh"); + } }