From 8bb66dd36521acdf1d6c6403b996b2c4d12b370a Mon Sep 17 00:00:00 2001 From: mountford Date: Mon, 1 May 2017 14:05:51 -0700 Subject: [PATCH] Add delete_host nomulus tool command This is needed to delete an invalid host resulting from a previous bug. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=154757425 --- .../registry/tools/DeleteHostCommand.java | 58 ++++++++++++ java/google/registry/tools/RegistryTool.java | 1 + java/google/registry/tools/soy/DeleteHost.soy | 42 +++++++++ .../registry/tools/DeleteHostCommandTest.java | 89 +++++++++++++++++++ .../registry/tools/testdata/host_delete.xml | 17 ++++ .../testdata/host_delete_by_registrar.xml | 17 ++++ .../host_delete_multiple_word_reason.xml | 17 ++++ 7 files changed, 241 insertions(+) create mode 100644 java/google/registry/tools/DeleteHostCommand.java create mode 100644 java/google/registry/tools/soy/DeleteHost.soy create mode 100644 javatests/google/registry/tools/DeleteHostCommandTest.java create mode 100644 javatests/google/registry/tools/testdata/host_delete.xml create mode 100644 javatests/google/registry/tools/testdata/host_delete_by_registrar.xml create mode 100644 javatests/google/registry/tools/testdata/host_delete_multiple_word_reason.xml diff --git a/java/google/registry/tools/DeleteHostCommand.java b/java/google/registry/tools/DeleteHostCommand.java new file mode 100644 index 000000000..1070ea49c --- /dev/null +++ b/java/google/registry/tools/DeleteHostCommand.java @@ -0,0 +1,58 @@ +// Copyright 2017 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 com.beust.jcommander.Parameter; +import com.beust.jcommander.Parameters; +import com.google.template.soy.data.SoyMapData; +import google.registry.tools.soy.DeleteHostSoyInfo; + +/** A command to delete a host via EPP. */ +@Parameters(separators = " =", commandDescription = "Delete host") +final class DeleteHostCommand extends MutatingEppToolCommand { + + @Parameter( + names = {"-c", "--client"}, + description = "Client identifier of the registrar to execute the command as", + required = true) + String clientId; + + @Parameter( + names = "--host", + description = "Host name to delete.", + required = true) + private String hostName; + + @Parameter( + names = {"--reason"}, + description = "Reason for the change.", + required = true) + private String reason; + + @Parameter( + names = {"--registrar_request"}, + description = "Whether the change was requested by a registrar.", + arity = 1) + private boolean requestedByRegistrar = false; + + @Override + protected void initMutatingEppToolCommand() { + setSoyTemplate(DeleteHostSoyInfo.getInstance(), DeleteHostSoyInfo.DELETEHOST); + addSoyRecord(clientId, new SoyMapData( + "hostName", hostName, + "reason", reason, + "requestedByRegistrar", requestedByRegistrar)); + } +} diff --git a/java/google/registry/tools/RegistryTool.java b/java/google/registry/tools/RegistryTool.java index e82efa233..6751ba65a 100644 --- a/java/google/registry/tools/RegistryTool.java +++ b/java/google/registry/tools/RegistryTool.java @@ -50,6 +50,7 @@ public final class RegistryTool { .put("delete_credit", DeleteCreditCommand.class) .put("delete_domain", DeleteDomainCommand.class) .put("delete_entity", DeleteEntityCommand.class) + .put("delete_host", DeleteHostCommand.class) .put("delete_premium_list", DeletePremiumListCommand.class) .put("delete_reserved_list", DeleteReservedListCommand.class) .put("delete_tld", DeleteTldCommand.class) diff --git a/java/google/registry/tools/soy/DeleteHost.soy b/java/google/registry/tools/soy/DeleteHost.soy new file mode 100644 index 000000000..78dd151d7 --- /dev/null +++ b/java/google/registry/tools/soy/DeleteHost.soy @@ -0,0 +1,42 @@ +// Copyright 2017 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. + +{namespace domain.registry.tools autoescape="strict"} + +/** + * Delete host request + */ +{template .deletehost} +{@param hostName: string} +{@param reason: string} +{@param requestedByRegistrar: any} + + + + + + {$hostName} + + + + + Deleted by registry administrator: {$reason} + {$requestedByRegistrar} + + + RegistryTool + + +{/template} diff --git a/javatests/google/registry/tools/DeleteHostCommandTest.java b/javatests/google/registry/tools/DeleteHostCommandTest.java new file mode 100644 index 000000000..9579b9fee --- /dev/null +++ b/javatests/google/registry/tools/DeleteHostCommandTest.java @@ -0,0 +1,89 @@ +// Copyright 2017 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 com.beust.jcommander.ParameterException; +import org.junit.Test; + +/** Unit tests for {@link DeleteHostCommand}. */ +public class DeleteHostCommandTest extends EppToolCommandTestCase { + + @Test + public void testSuccess() throws Exception { + runCommand("--client=NewRegistrar", "--host=ns1.example.tld", "--force", "--reason=Test"); + eppVerifier().verifySent("host_delete.xml"); + } + + @Test + public void testSuccess_multipleWordReason() throws Exception { + runCommand( + "--client=NewRegistrar", "--host=ns1.example.tld", "--force", "--reason=\"Test test\""); + eppVerifier().verifySent("host_delete_multiple_word_reason.xml"); + } + + @Test + public void testSuccess_requestedByRegistrarFalse() throws Exception { + runCommand( + "--client=NewRegistrar", + "--host=ns1.example.tld", + "--force", + "--reason=Test", + "--registrar_request=false"); + eppVerifier().verifySent("host_delete.xml"); + } + + @Test + public void testSuccess_requestedByRegistrarTrue() throws Exception { + runCommand( + "--client=NewRegistrar", + "--host=ns1.example.tld", + "--force", + "--reason=Test", + "--registrar_request=true"); + eppVerifier().verifySent("host_delete_by_registrar.xml"); + } + + @Test + public void testFailure_noReason() throws Exception { + thrown.expect(ParameterException.class); + runCommand("--client=NewRegistrar", "--host=ns1.example.tld", "--force"); + } + + @Test + public void testFailure_missingClientId() throws Exception { + thrown.expect(ParameterException.class); + runCommand("--host=ns1.example.tld", "--force", "--reason=Test"); + } + + @Test + public void testFailure_missingHostName() throws Exception { + thrown.expect(ParameterException.class); + runCommand("--client=NewRegistrar", "--force", "--reason=Test"); + } + + @Test + public void testFailure_unknownFlag() throws Exception { + thrown.expect(ParameterException.class); + runCommand( + "--client=NewRegistrar", "--host=ns1.example.tld", "--force", "--reason=Test", "--foo"); + } + + @Test + public void testFailure_mainParameter() throws Exception { + thrown.expect(ParameterException.class); + runCommand( + "--client=NewRegistrar", "--host=ns1.example.tld", "--force", "--reason=Test", "foo"); + } +} diff --git a/javatests/google/registry/tools/testdata/host_delete.xml b/javatests/google/registry/tools/testdata/host_delete.xml new file mode 100644 index 000000000..b56877485 --- /dev/null +++ b/javatests/google/registry/tools/testdata/host_delete.xml @@ -0,0 +1,17 @@ + + + + + ns1.example.tld + + + + + Deleted by registry administrator: Test + false + + + RegistryTool + + diff --git a/javatests/google/registry/tools/testdata/host_delete_by_registrar.xml b/javatests/google/registry/tools/testdata/host_delete_by_registrar.xml new file mode 100644 index 000000000..0e5383d37 --- /dev/null +++ b/javatests/google/registry/tools/testdata/host_delete_by_registrar.xml @@ -0,0 +1,17 @@ + + + + + ns1.example.tld + + + + + Deleted by registry administrator: Test + true + + + RegistryTool + + diff --git a/javatests/google/registry/tools/testdata/host_delete_multiple_word_reason.xml b/javatests/google/registry/tools/testdata/host_delete_multiple_word_reason.xml new file mode 100644 index 000000000..3c6520131 --- /dev/null +++ b/javatests/google/registry/tools/testdata/host_delete_multiple_word_reason.xml @@ -0,0 +1,17 @@ + + + + + ns1.example.tld + + + + + Deleted by registry administrator: Test test + false + + + RegistryTool + +