diff --git a/core/src/main/java/google/registry/model/EppResourceUtils.java b/core/src/main/java/google/registry/model/EppResourceUtils.java index 45b931cb7..a2f5ed93c 100644 --- a/core/src/main/java/google/registry/model/EppResourceUtils.java +++ b/core/src/main/java/google/registry/model/EppResourceUtils.java @@ -40,8 +40,8 @@ import google.registry.model.transfer.DomainTransferData; import google.registry.model.transfer.TransferData; import google.registry.model.transfer.TransferStatus; import google.registry.persistence.VKey; +import java.util.Collection; import java.util.Comparator; -import java.util.List; import java.util.Optional; import java.util.function.Function; import java.util.function.Supplier; @@ -183,7 +183,7 @@ public final class EppResourceUtils { * @param now the logical time of the check */ public static ImmutableSet checkResourcesExist( - Class clazz, List uniqueIds, final DateTime now) { + Class clazz, Collection uniqueIds, final DateTime now) { return ForeignKeyUtils.load(clazz, uniqueIds, now).keySet(); } diff --git a/core/src/main/java/google/registry/tools/UniformRapidSuspensionCommand.java b/core/src/main/java/google/registry/tools/UniformRapidSuspensionCommand.java index 9a19ae73d..cd0f3b3af 100644 --- a/core/src/main/java/google/registry/tools/UniformRapidSuspensionCommand.java +++ b/core/src/main/java/google/registry/tools/UniformRapidSuspensionCommand.java @@ -35,11 +35,12 @@ import google.registry.model.domain.Domain; import google.registry.model.domain.secdns.DomainDsData; import google.registry.model.eppcommon.StatusValue; import google.registry.model.host.Host; +import google.registry.tools.params.NameserversParameter; import google.registry.tools.soy.DomainRenewSoyInfo; import google.registry.tools.soy.UniformRapidSuspensionSoyInfo; import google.registry.util.Clock; -import google.registry.util.DomainNameUtils; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Optional; import java.util.Set; @@ -69,9 +70,12 @@ final class UniformRapidSuspensionCommand extends MutatingEppToolCommand { @Parameter( names = {"-h", "--hosts"}, - description = "Comma-delimited set of fully qualified host names to replace the current hosts" - + " on the domain.") - private List newHosts = new ArrayList<>(); + description = + "Comma-delimited set of fully qualified host names to replace the current hosts" + + " on the domain.", + converter = NameserversParameter.class, + validateWith = NameserversParameter.class) + private Set newHosts = new HashSet<>(); @Parameter( names = {"-s", "--dsdata"}, @@ -126,14 +130,10 @@ final class UniformRapidSuspensionCommand extends MutatingEppToolCommand { protected void initMutatingEppToolCommand() { superuser = true; DateTime now = clock.nowUtc(); - ImmutableList newCanonicalHosts = - newHosts.stream().map(DomainNameUtils::canonicalizeHostname).collect(toImmutableList()); - ImmutableSet newHostsSet = ImmutableSet.copyOf(newCanonicalHosts); Optional domainOpt = loadByForeignKey(Domain.class, domainName, now); checkArgumentPresent(domainOpt, "Domain '%s' does not exist or is deleted", domainName); Domain domain = domainOpt.get(); - Set missingHosts = - difference(newHostsSet, checkResourcesExist(Host.class, newCanonicalHosts, now)); + Set missingHosts = difference(newHosts, checkResourcesExist(Host.class, newHosts, now)); checkArgument(missingHosts.isEmpty(), "Hosts do not exist: %s", missingHosts); checkArgument( locksToPreserve.isEmpty() || undo, @@ -187,9 +187,9 @@ final class UniformRapidSuspensionCommand extends MutatingEppToolCommand { "domainName", domainName, "hostsToAdd", - difference(newHostsSet, existingNameservers), + difference(newHosts, existingNameservers), "hostsToRemove", - difference(existingNameservers, newHostsSet), + difference(existingNameservers, newHosts), "statusesToApply", statusesToApply, "statusesToRemove", diff --git a/core/src/main/java/google/registry/tools/params/NameserversParameter.java b/core/src/main/java/google/registry/tools/params/NameserversParameter.java index f97168843..3b5b2a4b8 100644 --- a/core/src/main/java/google/registry/tools/params/NameserversParameter.java +++ b/core/src/main/java/google/registry/tools/params/NameserversParameter.java @@ -25,6 +25,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.re2j.Matcher; import com.google.re2j.Pattern; +import google.registry.util.DomainNameUtils; import java.util.Set; import java.util.stream.Stream; @@ -50,12 +51,9 @@ public final class NameserversParameter extends ParameterConverterValidatorThis was coded for testing RDE since its queries depend on the associated entries. * - * * @see #persistResource(ImmutableObject) */ public static R persistEppResource(final R resource) { diff --git a/core/src/test/java/google/registry/tools/CreateDomainCommandTest.java b/core/src/test/java/google/registry/tools/CreateDomainCommandTest.java index f3caaf242..0d680d727 100644 --- a/core/src/test/java/google/registry/tools/CreateDomainCommandTest.java +++ b/core/src/test/java/google/registry/tools/CreateDomainCommandTest.java @@ -57,6 +57,23 @@ class CreateDomainCommandTest extends EppToolCommandTestCase