mirror of
https://github.com/google/nomulus.git
synced 2025-08-05 17:28:25 +02:00
Implement Uniform [] Suspension Tool
The tool needs to: * Replace all hosts on a domain with a provided set of hosts * Add 3 server locks to the domain * Print an undo command that restores the domain to its original state ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=121944934
This commit is contained in:
parent
758a4ac387
commit
371ffdf0c1
8 changed files with 491 additions and 0 deletions
|
@ -0,0 +1,162 @@
|
|||
// Copyright 2016 The Domain Registry 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.DatastoreHelper.newDomainResource;
|
||||
import static google.registry.testing.DatastoreHelper.persistActiveDomain;
|
||||
import static google.registry.testing.DatastoreHelper.persistActiveHost;
|
||||
import static google.registry.testing.DatastoreHelper.persistResource;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
|
||||
import com.beust.jcommander.ParameterException;
|
||||
import com.googlecode.objectify.Ref;
|
||||
|
||||
import google.registry.model.domain.ReferenceUnion;
|
||||
import google.registry.model.eppcommon.StatusValue;
|
||||
import google.registry.model.host.HostResource;
|
||||
import google.registry.model.registrar.Registrar;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
/** Unit tests for {@link UniformRapidSuspensionCommand}. */
|
||||
public class UniformRapidSuspensionCommandTest
|
||||
extends EppToolCommandTestCase<UniformRapidSuspensionCommand> {
|
||||
|
||||
@Before
|
||||
public void initRegistrar() {
|
||||
// Since the command's history client ID must be CharlestonRoad, resave TheRegistrar that way.
|
||||
persistResource(Registrar.loadByClientId("TheRegistrar").asBuilder()
|
||||
.setClientIdentifier("CharlestonRoad")
|
||||
.build());
|
||||
}
|
||||
|
||||
private void persistDomainWithHosts(HostResource... hosts) {
|
||||
ImmutableSet.Builder<ReferenceUnion<HostResource>> hostRefs = new ImmutableSet.Builder<>();
|
||||
for (HostResource host : hosts) {
|
||||
hostRefs.add(ReferenceUnion.create(Ref.create(host)));
|
||||
}
|
||||
persistResource(newDomainResource("evil.tld").asBuilder()
|
||||
.setNameservers(hostRefs.build())
|
||||
.build());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCommand_addsLocksReplacesHostsPrintsUndo() throws Exception {
|
||||
persistActiveHost("urs1.example.com");
|
||||
persistActiveHost("urs2.example.com");
|
||||
persistDomainWithHosts(
|
||||
persistActiveHost("ns1.example.com"),
|
||||
persistActiveHost("ns2.example.com"));
|
||||
runCommandForced("--domain_name=evil.tld", "--hosts=urs1.example.com,urs2.example.com");
|
||||
eppVerifier()
|
||||
.setClientIdentifier("CharlestonRoad")
|
||||
.asSuperuser()
|
||||
.verifySent("testdata/uniform_rapid_suspension.xml");
|
||||
assertInStdout("uniform_rapid_suspension "
|
||||
+ "--undo "
|
||||
+ "--domain_name evil.tld "
|
||||
+ "--hosts ns1.example.com,ns2.example.com");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCommand_respectsExistingHost() throws Exception {
|
||||
persistActiveHost("urs1.example.com");
|
||||
persistDomainWithHosts(
|
||||
persistActiveHost("urs2.example.com"),
|
||||
persistActiveHost("ns1.example.com"));
|
||||
runCommandForced("--domain_name=evil.tld", "--hosts=urs1.example.com,urs2.example.com");
|
||||
eppVerifier()
|
||||
.setClientIdentifier("CharlestonRoad")
|
||||
.asSuperuser()
|
||||
.verifySent("testdata/uniform_rapid_suspension_existing_host.xml");
|
||||
assertInStdout("uniform_rapid_suspension "
|
||||
+ "--undo "
|
||||
+ "--domain_name evil.tld "
|
||||
+ "--hosts ns1.example.com,urs2.example.com");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCommand_generatesUndoForUndelegatedDomain() throws Exception {
|
||||
persistActiveHost("urs1.example.com");
|
||||
persistActiveHost("urs2.example.com");
|
||||
persistActiveDomain("evil.tld");
|
||||
runCommandForced("--domain_name=evil.tld", "--hosts=urs1.example.com,urs2.example.com");
|
||||
assertInStdout("uniform_rapid_suspension --undo --domain_name evil.tld");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCommand_generatesUndoWithPreserve() throws Exception {
|
||||
persistResource(
|
||||
newDomainResource("evil.tld").asBuilder()
|
||||
.addStatusValue(StatusValue.SERVER_DELETE_PROHIBITED)
|
||||
.build());
|
||||
runCommandForced("--domain_name=evil.tld");
|
||||
assertInStdout(
|
||||
"uniform_rapid_suspension --undo --domain_name evil.tld --preserve serverDeleteProhibited");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUndo_removesLocksReplacesHosts() throws Exception {
|
||||
persistActiveHost("ns1.example.com");
|
||||
persistActiveHost("ns2.example.com");
|
||||
persistDomainWithHosts(
|
||||
persistActiveHost("urs1.example.com"),
|
||||
persistActiveHost("urs2.example.com"));
|
||||
runCommandForced(
|
||||
"--domain_name=evil.tld", "--undo", "--hosts=ns1.example.com,ns2.example.com");
|
||||
eppVerifier()
|
||||
.setClientIdentifier("CharlestonRoad")
|
||||
.asSuperuser()
|
||||
.verifySent("testdata/uniform_rapid_suspension_undo.xml");
|
||||
assertNotInStdout("--undo"); // Undo shouldn't print a new undo command.
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUndo_respectsPreserveFlag() throws Exception {
|
||||
persistActiveHost("ns1.example.com");
|
||||
persistActiveHost("ns2.example.com");
|
||||
persistDomainWithHosts(
|
||||
persistActiveHost("urs1.example.com"),
|
||||
persistActiveHost("urs2.example.com"));
|
||||
runCommandForced(
|
||||
"--domain_name=evil.tld",
|
||||
"--undo",
|
||||
"--preserve=serverDeleteProhibited",
|
||||
"--hosts=ns1.example.com,ns2.example.com");
|
||||
eppVerifier()
|
||||
.setClientIdentifier("CharlestonRoad")
|
||||
.asSuperuser()
|
||||
.verifySent("testdata/uniform_rapid_suspension_undo_preserve.xml");
|
||||
assertNotInStdout("--undo"); // Undo shouldn't print a new undo command.
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFailure_preserveWithoutUndo() throws Exception {
|
||||
persistActiveDomain("evil.tld");
|
||||
thrown.expect(IllegalArgumentException.class, "--undo");
|
||||
runCommandForced("--domain_name=evil.tld", "--preserve=serverDeleteProhibited");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFailure_domainNameRequired() throws Exception {
|
||||
persistActiveHost("urs1.example.com");
|
||||
persistActiveHost("urs2.example.com");
|
||||
persistActiveDomain("evil.tld");
|
||||
thrown.expect(ParameterException.class, "--domain_name");
|
||||
runCommandForced("--hosts=urs1.example.com,urs2.example.com");
|
||||
}
|
||||
}
|
32
javatests/google/registry/tools/testdata/uniform_rapid_suspension.xml
vendored
Normal file
32
javatests/google/registry/tools/testdata/uniform_rapid_suspension.xml
vendored
Normal file
|
@ -0,0 +1,32 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
|
||||
<command>
|
||||
<update>
|
||||
<domain:update xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
|
||||
<domain:name>evil.tld</domain:name>
|
||||
<domain:add>
|
||||
<domain:ns>
|
||||
<domain:hostObj>urs1.example.com</domain:hostObj>
|
||||
<domain:hostObj>urs2.example.com</domain:hostObj>
|
||||
</domain:ns>
|
||||
<domain:status s="serverDeleteProhibited" />
|
||||
<domain:status s="serverTransferProhibited" />
|
||||
<domain:status s="serverUpdateProhibited" />
|
||||
</domain:add>
|
||||
<domain:rem>
|
||||
<domain:ns>
|
||||
<domain:hostObj>ns2.example.com</domain:hostObj>
|
||||
<domain:hostObj>ns1.example.com</domain:hostObj>
|
||||
</domain:ns>
|
||||
</domain:rem>
|
||||
</domain:update>
|
||||
</update>
|
||||
<extension>
|
||||
<metadata:metadata xmlns:metadata="urn:google:params:xml:ns:metadata-1.0">
|
||||
<metadata:reason>Uniform Rapid Suspension</metadata:reason>
|
||||
<metadata:requestedByRegistrar>false</metadata:requestedByRegistrar>
|
||||
</metadata:metadata>
|
||||
</extension>
|
||||
<clTRID>GTechTool</clTRID>
|
||||
</command>
|
||||
</epp>
|
30
javatests/google/registry/tools/testdata/uniform_rapid_suspension_existing_host.xml
vendored
Normal file
30
javatests/google/registry/tools/testdata/uniform_rapid_suspension_existing_host.xml
vendored
Normal file
|
@ -0,0 +1,30 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
|
||||
<command>
|
||||
<update>
|
||||
<domain:update xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
|
||||
<domain:name>evil.tld</domain:name>
|
||||
<domain:add>
|
||||
<domain:ns>
|
||||
<domain:hostObj>urs1.example.com</domain:hostObj>
|
||||
</domain:ns>
|
||||
<domain:status s="serverDeleteProhibited" />
|
||||
<domain:status s="serverTransferProhibited" />
|
||||
<domain:status s="serverUpdateProhibited" />
|
||||
</domain:add>
|
||||
<domain:rem>
|
||||
<domain:ns>
|
||||
<domain:hostObj>ns1.example.com</domain:hostObj>
|
||||
</domain:ns>
|
||||
</domain:rem>
|
||||
</domain:update>
|
||||
</update>
|
||||
<extension>
|
||||
<metadata:metadata xmlns:metadata="urn:google:params:xml:ns:metadata-1.0">
|
||||
<metadata:reason>Uniform Rapid Suspension</metadata:reason>
|
||||
<metadata:requestedByRegistrar>false</metadata:requestedByRegistrar>
|
||||
</metadata:metadata>
|
||||
</extension>
|
||||
<clTRID>GTechTool</clTRID>
|
||||
</command>
|
||||
</epp>
|
32
javatests/google/registry/tools/testdata/uniform_rapid_suspension_undo.xml
vendored
Normal file
32
javatests/google/registry/tools/testdata/uniform_rapid_suspension_undo.xml
vendored
Normal file
|
@ -0,0 +1,32 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
|
||||
<command>
|
||||
<update>
|
||||
<domain:update xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
|
||||
<domain:name>evil.tld</domain:name>
|
||||
<domain:add>
|
||||
<domain:ns>
|
||||
<domain:hostObj>ns1.example.com</domain:hostObj>
|
||||
<domain:hostObj>ns2.example.com</domain:hostObj>
|
||||
</domain:ns>
|
||||
</domain:add>
|
||||
<domain:rem>
|
||||
<domain:ns>
|
||||
<domain:hostObj>urs1.example.com</domain:hostObj>
|
||||
<domain:hostObj>urs2.example.com</domain:hostObj>
|
||||
</domain:ns>
|
||||
<domain:status s="serverDeleteProhibited" />
|
||||
<domain:status s="serverTransferProhibited" />
|
||||
<domain:status s="serverUpdateProhibited" />
|
||||
</domain:rem>
|
||||
</domain:update>
|
||||
</update>
|
||||
<extension>
|
||||
<metadata:metadata xmlns:metadata="urn:google:params:xml:ns:metadata-1.0">
|
||||
<metadata:reason>Undo Uniform Rapid Suspension</metadata:reason>
|
||||
<metadata:requestedByRegistrar>false</metadata:requestedByRegistrar>
|
||||
</metadata:metadata>
|
||||
</extension>
|
||||
<clTRID>GTechTool</clTRID>
|
||||
</command>
|
||||
</epp>
|
31
javatests/google/registry/tools/testdata/uniform_rapid_suspension_undo_preserve.xml
vendored
Normal file
31
javatests/google/registry/tools/testdata/uniform_rapid_suspension_undo_preserve.xml
vendored
Normal file
|
@ -0,0 +1,31 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
|
||||
<command>
|
||||
<update>
|
||||
<domain:update xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
|
||||
<domain:name>evil.tld</domain:name>
|
||||
<domain:add>
|
||||
<domain:ns>
|
||||
<domain:hostObj>ns1.example.com</domain:hostObj>
|
||||
<domain:hostObj>ns2.example.com</domain:hostObj>
|
||||
</domain:ns>
|
||||
</domain:add>
|
||||
<domain:rem>
|
||||
<domain:ns>
|
||||
<domain:hostObj>urs1.example.com</domain:hostObj>
|
||||
<domain:hostObj>urs2.example.com</domain:hostObj>
|
||||
</domain:ns>
|
||||
<domain:status s="serverTransferProhibited" />
|
||||
<domain:status s="serverUpdateProhibited" />
|
||||
</domain:rem>
|
||||
</domain:update>
|
||||
</update>
|
||||
<extension>
|
||||
<metadata:metadata xmlns:metadata="urn:google:params:xml:ns:metadata-1.0">
|
||||
<metadata:reason>Undo Uniform Rapid Suspension</metadata:reason>
|
||||
<metadata:requestedByRegistrar>false</metadata:requestedByRegistrar>
|
||||
</metadata:metadata>
|
||||
</extension>
|
||||
<clTRID>GTechTool</clTRID>
|
||||
</command>
|
||||
</epp>
|
Loading…
Add table
Add a link
Reference in a new issue