diff --git a/core/src/main/java/google/registry/export/ExportPremiumTermsAction.java b/core/src/main/java/google/registry/export/ExportPremiumTermsAction.java index 74f2a5edc..a285e3029 100644 --- a/core/src/main/java/google/registry/export/ExportPremiumTermsAction.java +++ b/core/src/main/java/google/registry/export/ExportPremiumTermsAction.java @@ -31,6 +31,7 @@ import com.google.common.flogger.FluentLogger; import com.google.common.net.MediaType; import google.registry.config.RegistryConfig.Config; import google.registry.model.registry.Registry; +import google.registry.model.registry.label.PremiumList.PremiumListEntry; import google.registry.model.registry.label.PremiumListDualDao; import google.registry.request.Action; import google.registry.request.Parameter; @@ -141,7 +142,7 @@ public class ExportPremiumTermsAction implements Runnable { PremiumListDualDao.exists(premiumListName), "Could not load premium list for " + tld); SortedSet premiumTerms = Streams.stream(PremiumListDualDao.loadAllPremiumListEntries(premiumListName)) - .map(entry -> Joiner.on(",").join(entry.getLabel(), entry.getValue())) + .map(PremiumListEntry::toString) .collect(ImmutableSortedSet.toImmutableSortedSet(String::compareTo)); return Joiner.on("\n") diff --git a/core/src/main/java/google/registry/model/registry/label/PremiumList.java b/core/src/main/java/google/registry/model/registry/label/PremiumList.java index 285c72e81..9b0ea2845 100644 --- a/core/src/main/java/google/registry/model/registry/label/PremiumList.java +++ b/core/src/main/java/google/registry/model/registry/label/PremiumList.java @@ -208,6 +208,12 @@ public final class PremiumList extends BaseDomainLabelList mainParameters; + + @Override + public void run() throws Exception { + for (String premiumListName : mainParameters) { + if (PremiumListDualDao.exists(premiumListName)) { + System.out.printf( + "%s:\n%s\n", + premiumListName, + Streams.stream(PremiumListDualDao.loadAllPremiumListEntries(premiumListName)) + .sorted(Comparator.comparing(PremiumListEntry::getLabel)) + .map(PremiumListEntry::toString) + .collect(Collectors.joining("\n"))); + } else { + System.out.println(String.format("No list found with name %s.", premiumListName)); + } + } + } +} diff --git a/core/src/main/java/google/registry/tools/RegistryTool.java b/core/src/main/java/google/registry/tools/RegistryTool.java index 91c418f84..2b195742d 100644 --- a/core/src/main/java/google/registry/tools/RegistryTool.java +++ b/core/src/main/java/google/registry/tools/RegistryTool.java @@ -76,6 +76,7 @@ public final class RegistryTool { .put("get_host", GetHostCommand.class) .put("get_keyring_secret", GetKeyringSecretCommand.class) .put("get_operation_status", GetOperationStatusCommand.class) + .put("get_premium_list", GetPremiumListCommand.class) .put("get_registrar", GetRegistrarCommand.class) .put("get_resource_by_key", GetResourceByKeyCommand.class) .put("get_routing_map", GetRoutingMapCommand.class) diff --git a/core/src/test/java/google/registry/tools/GetPremiumListCommandTest.java b/core/src/test/java/google/registry/tools/GetPremiumListCommandTest.java new file mode 100644 index 000000000..69efed53f --- /dev/null +++ b/core/src/test/java/google/registry/tools/GetPremiumListCommandTest.java @@ -0,0 +1,71 @@ +// Copyright 2021 The Nomulus Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package google.registry.tools; + +import static google.registry.testing.DatabaseHelper.createTld; +import static org.junit.Assert.assertThrows; + +import com.beust.jcommander.ParameterException; +import google.registry.testing.DualDatabaseTest; +import google.registry.testing.TestOfyAndSql; +import org.junit.jupiter.api.BeforeEach; + +@DualDatabaseTest +public class GetPremiumListCommandTest extends CommandTestCase { + + private static final String BASE_LIST_CONTENTS = + "tld:\n" + + "aluminum,USD 11.00\n" + + "brass,USD 20.00\n" + + "copper,USD 15.00\n" + + "diamond,USD 1000000.00\n" + + "gold,USD 24317.00\n" + + "iridium,USD 13117.00\n" + + "palladium,USD 877.00\n" + + "platinum,USD 87741.00\n" + + "rhodium,USD 88415.00\n" + + "rich,USD 100.00\n" + + "richer,USD 1000.00\n" + + "silver,USD 588.00\n"; + + @BeforeEach + void beforeEach() { + createTld("tld"); + } + + @TestOfyAndSql + void testSuccess_list() throws Exception { + runCommand("tld"); + assertStdoutIs(BASE_LIST_CONTENTS); + } + + @TestOfyAndSql + void testSuccess_onlyOneExists() throws Exception { + runCommand("tld", "nonexistent"); + assertStdoutIs(BASE_LIST_CONTENTS + "No list found with name nonexistent.\n"); + } + + @TestOfyAndSql + void testFailure_nonexistent() throws Exception { + runCommand("nonexistent", "othernonexistent"); + assertStdoutIs( + "No list found with name nonexistent.\nNo list found with name othernonexistent.\n"); + } + + @TestOfyAndSql + void testFailure_noArgs() { + assertThrows(ParameterException.class, this::runCommand); + } +}