mirror of
https://github.com/google/nomulus.git
synced 2025-05-13 07:57:13 +02:00
Add registry_tool host_create command
------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=130953679
This commit is contained in:
parent
91f8b6da38
commit
965cf6edc3
6 changed files with 204 additions and 0 deletions
76
java/google/registry/tools/CreateHostCommand.java
Normal file
76
java/google/registry/tools/CreateHostCommand.java
Normal file
|
@ -0,0 +1,76 @@
|
|||
// 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.util.CollectionUtils.nullToEmpty;
|
||||
|
||||
import com.beust.jcommander.Parameter;
|
||||
import com.beust.jcommander.Parameters;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.net.InetAddresses;
|
||||
import com.google.template.soy.data.SoyMapData;
|
||||
import google.registry.tools.Command.GtechCommand;
|
||||
import google.registry.tools.soy.HostCreateSoyInfo;
|
||||
import java.net.Inet4Address;
|
||||
import java.net.Inet6Address;
|
||||
import java.net.InetAddress;
|
||||
import java.util.List;
|
||||
|
||||
/** A command to create a new host via EPP. */
|
||||
@Parameters(separators = " =", commandDescription = "Create a new host via EPP.")
|
||||
final class CreateHostCommand extends MutatingEppToolCommand implements GtechCommand {
|
||||
|
||||
@Parameter(
|
||||
names = {"-c", "--client"},
|
||||
description = "Client identifier of the registrar to execute the command as.",
|
||||
required = true)
|
||||
String clientIdentifier;
|
||||
|
||||
@Parameter(
|
||||
names = "--host",
|
||||
description = "Host name.",
|
||||
required = true)
|
||||
private String hostName;
|
||||
|
||||
@Parameter(
|
||||
names = {"-a", "--addresses"},
|
||||
description = "List of addresses in IPv4 and/or IPv6 format.",
|
||||
variableArity = true)
|
||||
private List<String> addresses;
|
||||
|
||||
@Override
|
||||
protected void initMutatingEppToolCommand() {
|
||||
setSoyTemplate(HostCreateSoyInfo.getInstance(), HostCreateSoyInfo.HOSTCREATE);
|
||||
ImmutableList.Builder<String> ipv4Addresses = new ImmutableList.Builder<>();
|
||||
ImmutableList.Builder<String> ipv6Addresses = new ImmutableList.Builder<>();
|
||||
for (String address : nullToEmpty(addresses)) {
|
||||
InetAddress inetAddress = InetAddresses.forString(address);
|
||||
if (inetAddress instanceof Inet4Address) {
|
||||
ipv4Addresses.add(inetAddress.getHostAddress());
|
||||
} else if (inetAddress instanceof Inet6Address) {
|
||||
ipv6Addresses.add(inetAddress.getHostAddress());
|
||||
} else {
|
||||
throw new IllegalArgumentException(
|
||||
String.format("IP address in unknown format: %s", address));
|
||||
}
|
||||
}
|
||||
addSoyRecord(
|
||||
clientIdentifier,
|
||||
new SoyMapData(
|
||||
"hostname", hostName,
|
||||
"ipv4addresses", ipv4Addresses.build(),
|
||||
"ipv6addresses", ipv6Addresses.build()));
|
||||
}
|
||||
}
|
|
@ -37,6 +37,7 @@ public final class GtechTool {
|
|||
.put("create_credit", CreateCreditCommand.class)
|
||||
.put("create_credit_balance", CreateCreditBalanceCommand.class)
|
||||
.put("create_domain", CreateDomainCommand.class)
|
||||
.put("create_host", CreateHostCommand.class)
|
||||
.put("create_registrar_groups", CreateRegistrarGroupsCommand.class)
|
||||
.put("create_registrar", CreateRegistrarCommand.class)
|
||||
.put("create_sandbox_tld", CreateSandboxTldCommand.class)
|
||||
|
|
45
java/google/registry/tools/soy/HostCreate.soy
Normal file
45
java/google/registry/tools/soy/HostCreate.soy
Normal file
|
@ -0,0 +1,45 @@
|
|||
// 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.
|
||||
|
||||
{namespace domain.registry.tools autoescape="strict"}
|
||||
/**
|
||||
* Create host
|
||||
*/
|
||||
{template .hostcreate}
|
||||
{@param hostname: string}
|
||||
{@param? ipv4addresses: list<string>}
|
||||
{@param? ipv6addresses: list<string>}
|
||||
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
|
||||
<command>
|
||||
<create>
|
||||
<host:create xmlns:host="urn:ietf:params:xml:ns:host-1.0">
|
||||
<host:name>{$hostname}</host:name>
|
||||
{if $ipv4addresses}
|
||||
{foreach $ipv4 in $ipv4addresses}
|
||||
<host:addr ip="v4">{$ipv4}</host:addr>
|
||||
{/foreach}
|
||||
{/if}
|
||||
{if $ipv6addresses}
|
||||
{foreach $ipv6 in $ipv6addresses}
|
||||
<host:addr ip="v6">{$ipv6}</host:addr>
|
||||
{/foreach}
|
||||
{/if}
|
||||
</host:create>
|
||||
</create>
|
||||
<clTRID>GTechTool</clTRID>
|
||||
</command>
|
||||
</epp>
|
||||
{/template}
|
59
javatests/google/registry/tools/CreateHostCommandTest.java
Normal file
59
javatests/google/registry/tools/CreateHostCommandTest.java
Normal file
|
@ -0,0 +1,59 @@
|
|||
// 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.createTld;
|
||||
|
||||
import com.beust.jcommander.ParameterException;
|
||||
import org.junit.Test;
|
||||
|
||||
/** Unit tests for {@link CreateHostCommand}. */
|
||||
public class CreateHostCommandTest extends EppToolCommandTestCase<CreateHostCommand> {
|
||||
|
||||
@Test
|
||||
public void testSuccess_complete() throws Exception {
|
||||
createTld("tld");
|
||||
runCommandForced(
|
||||
"--client=NewRegistrar",
|
||||
"--host=example.tld",
|
||||
"--addresses=162.100.102.99,2001:0db8:85a3:0000:0000:8a2e:0370:7334,4.5.6.7");
|
||||
eppVerifier().verifySent("host_create_complete.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSuccess_minimal() throws Exception {
|
||||
// Test that each optional field can be omitted.
|
||||
runCommandForced(
|
||||
"--client=NewRegistrar",
|
||||
"--host=notours.external");
|
||||
eppVerifier().verifySent("host_create_minimal.xml");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFailure_missingHost() throws Exception {
|
||||
thrown.expect(ParameterException.class);
|
||||
runCommandForced("--client=NewRegistrar");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFailure_invalidIpAddress() throws Exception {
|
||||
createTld("tld");
|
||||
thrown.expect(IllegalArgumentException.class, "'a.b.c.d' is not an IP string literal.");
|
||||
runCommandForced(
|
||||
"--client=NewRegistrar",
|
||||
"--host=example.tld",
|
||||
"--addresses=a.b.c.d");
|
||||
}
|
||||
}
|
13
javatests/google/registry/tools/testdata/host_create_complete.xml
vendored
Normal file
13
javatests/google/registry/tools/testdata/host_create_complete.xml
vendored
Normal file
|
@ -0,0 +1,13 @@
|
|||
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
|
||||
<command>
|
||||
<create>
|
||||
<host:create xmlns:host="urn:ietf:params:xml:ns:host-1.0">
|
||||
<host:name>example.tld</host:name>
|
||||
<host:addr ip="v4">162.100.102.99</host:addr>
|
||||
<host:addr ip="v4">4.5.6.7</host:addr>
|
||||
<host:addr ip="v6">2001:0db8:85a3:0000:0000:8a2e:0370:7334</host:addr>
|
||||
</host:create>
|
||||
</create>
|
||||
<clTRID>GTechTool</clTRID>
|
||||
</command>
|
||||
</epp>
|
10
javatests/google/registry/tools/testdata/host_create_minimal.xml
vendored
Normal file
10
javatests/google/registry/tools/testdata/host_create_minimal.xml
vendored
Normal file
|
@ -0,0 +1,10 @@
|
|||
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
|
||||
<command>
|
||||
<create>
|
||||
<host:create xmlns:host="urn:ietf:params:xml:ns:host-1.0">
|
||||
<host:name>notours.external</host:name>
|
||||
</host:create>
|
||||
</create>
|
||||
<clTRID>GTechTool</clTRID>
|
||||
</command>
|
||||
</epp>
|
Loading…
Add table
Add a link
Reference in a new issue