diff --git a/core/src/main/java/google/registry/model/registry/Registries.java b/core/src/main/java/google/registry/model/registry/Registries.java index 020d4a0fb..a7e13c35d 100644 --- a/core/src/main/java/google/registry/model/registry/Registries.java +++ b/core/src/main/java/google/registry/model/registry/Registries.java @@ -106,6 +106,17 @@ public final class Registries { return tld; } + /** + * Pass-through check that the TLD exists, otherwise throw using the given error format message. + * + *

The specified TLD will be passed to the format message string. + */ + public static String assertTldExists(String tld, String fmtMessage) { + String message = String.format(fmtMessage, tld); + checkArgument(getTlds().contains(checkArgumentNotNull(emptyToNull(tld), message)), message); + return tld; + } + /** Pass-through check that every TLD in the given iterable exists, otherwise throw an IAE. */ public static Iterable assertTldsExist(Iterable tlds) { for (String tld : tlds) { diff --git a/core/src/main/java/google/registry/tools/CreateReservedListCommand.java b/core/src/main/java/google/registry/tools/CreateReservedListCommand.java index 93aaf7eb1..4bb5a01bb 100644 --- a/core/src/main/java/google/registry/tools/CreateReservedListCommand.java +++ b/core/src/main/java/google/registry/tools/CreateReservedListCommand.java @@ -70,7 +70,8 @@ final class CreateReservedListCommand extends CreateOrUpdateReservedListCommand checkArgument(nameParts.size() == 2, INVALID_FORMAT_ERROR_MESSAGE); String tld = nameParts.get(0); if (!tld.equals("common")) { - assertTldExists(tld); + assertTldExists( + tld, "The name must be in the format {tld|common}_list-name, yet TLD %s does not exist"); } checkArgument(nameParts.get(1).matches("[-a-zA-Z0-9]+"), INVALID_FORMAT_ERROR_MESSAGE); } diff --git a/core/src/main/java/google/registry/tools/server/CreateOrUpdatePremiumListAction.java b/core/src/main/java/google/registry/tools/server/CreateOrUpdatePremiumListAction.java index d32492305..96169d591 100644 --- a/core/src/main/java/google/registry/tools/server/CreateOrUpdatePremiumListAction.java +++ b/core/src/main/java/google/registry/tools/server/CreateOrUpdatePremiumListAction.java @@ -15,6 +15,7 @@ package google.registry.tools.server; import static com.google.common.flogger.LazyArgs.lazy; +import static google.registry.util.PreconditionsUtils.checkArgumentNotNull; import com.google.common.collect.ImmutableMap; import com.google.common.flogger.FluentLogger; @@ -45,27 +46,29 @@ public abstract class CreateOrUpdatePremiumListAction implements Runnable { @Override public void run() { try { + checkArgumentNotNull(inputData, "Input data must not be null"); save(); } catch (IllegalArgumentException e) { logger.atInfo().withCause(e).log( "Usage error in attempting to save premium list from nomulus tool command"); - response.setPayload(ImmutableMap.of("error", e.toString(), "status", "error")); + response.setPayload(ImmutableMap.of("error", e.getMessage(), "status", "error")); } catch (Exception e) { logger.atSevere().withCause(e).log( "Unexpected error saving premium list to Datastore from nomulus tool command"); - response.setPayload(ImmutableMap.of("error", e.toString(), "status", "error")); + response.setPayload(ImmutableMap.of("error", e.getMessage(), "status", "error")); } } /** Logs the premium list data at INFO, truncated if too long. */ void logInputData() { + String logData = (inputData == null) ? "(null)" : inputData; logger.atInfo().log( "Received the following input data: %s", lazy( () -> - (inputData.length() < MAX_LOGGING_PREMIUM_LIST_LENGTH) - ? inputData - : (inputData.substring(0, MAX_LOGGING_PREMIUM_LIST_LENGTH) + ""))); + (logData.length() < MAX_LOGGING_PREMIUM_LIST_LENGTH) + ? logData + : (logData.substring(0, MAX_LOGGING_PREMIUM_LIST_LENGTH) + ""))); } /** Saves the premium list to both Datastore and Cloud SQL. */ diff --git a/core/src/main/java/google/registry/tools/server/CreatePremiumListAction.java b/core/src/main/java/google/registry/tools/server/CreatePremiumListAction.java index 401247726..c67385904 100644 --- a/core/src/main/java/google/registry/tools/server/CreatePremiumListAction.java +++ b/core/src/main/java/google/registry/tools/server/CreatePremiumListAction.java @@ -51,9 +51,12 @@ public class CreatePremiumListAction extends CreateOrUpdatePremiumListAction { @Override protected void save() { checkArgument( - !PremiumListDualDao.exists(name), "A premium list of this name already exists: %s.", name); + !PremiumListDualDao.exists(name), "A premium list of this name already exists: %s", name); if (!override) { - assertTldExists(name); + assertTldExists( + name, + "Premium names must match the name of the TLD they are intended to be used on" + + " (unless --override is specified), yet TLD %s does not exist"); } logger.atInfo().log("Saving premium list for TLD %s", name); logInputData(); diff --git a/core/src/test/java/google/registry/tools/CreateReservedListCommandTest.java b/core/src/test/java/google/registry/tools/CreateReservedListCommandTest.java index 9fd065a4c..ad1523939 100644 --- a/core/src/test/java/google/registry/tools/CreateReservedListCommandTest.java +++ b/core/src/test/java/google/registry/tools/CreateReservedListCommandTest.java @@ -113,7 +113,9 @@ class CreateReservedListCommandTest @Test void testNamingRules_tldThatDoesNotExist_failsWithoutOverride() { - runNameTestExpectedFailure("footld_reserved-list", "TLD footld does not exist"); + runNameTestExpectedFailure( + "footld_reserved-list", + "The name must be in the format {tld|common}_list-name, yet TLD footld does not exist"); } @Test @@ -153,7 +155,9 @@ class CreateReservedListCommandTest @Test void testNamingRules_commonAsListName_failsWithoutOverride() { - runNameTestExpectedFailure("invalidtld_common", "TLD invalidtld does not exist"); + runNameTestExpectedFailure( + "invalidtld_common", + "The name must be in the format {tld|common}_list-name, yet TLD invalidtld does not exist"); } @Test diff --git a/core/src/test/java/google/registry/tools/server/CreatePremiumListActionTest.java b/core/src/test/java/google/registry/tools/server/CreatePremiumListActionTest.java index 89786c20c..15f29ac05 100644 --- a/core/src/test/java/google/registry/tools/server/CreatePremiumListActionTest.java +++ b/core/src/test/java/google/registry/tools/server/CreatePremiumListActionTest.java @@ -70,6 +70,18 @@ public class CreatePremiumListActionTest { assertThat(error).contains("A premium list of this name already exists"); } + @Test + void test_nonExistentTld_fails() { + action.name = "zanzibar"; + action.inputData = "zanzibar,USD 100"; + action.run(); + assertThat(response.getResponseMap().get("status")).isEqualTo("error"); + assertThat(response.getResponseMap().get("error").toString()) + .isEqualTo( + "Premium names must match the name of the TLD they are intended to be used on" + + " (unless --override is specified), yet TLD zanzibar does not exist"); + } + @Test void test_nonExistentTld_successWithOverride() { action.name = "zanzibar";