From 85c3443a2ad129740c8e8ca4861ec8f925abc95c Mon Sep 17 00:00:00 2001 From: Ben McIlwain Date: Mon, 29 Jun 2026 13:53:05 -0400 Subject: [PATCH] Validate non-empty tlds in refresh DNS action 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 873f6363b30..e48f2d1acd6 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 863728f5710..c10b4e81c88 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.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 @@ void test_successfullyBatchesNames() { 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"); + } }