mirror of
https://github.com/google/nomulus
synced 2026-10-01 04:05:49 +00:00
Support Fee Extension standard in rfc 8748 (#2855)
* Support Fee Extension standard in rfc 8748 Adding support to the final version of RFC 8748. Compared with draft-0.12, the only meaningful change is in the namespace. The rest is either schema-tightening that reflects actual usage, or optional server-side features that we do not support. We reuse draft-0.12 tests, only changing namespace uris in the input and output files for the new version. * Addressing reviews
This commit is contained in:
@@ -77,6 +77,7 @@ import google.registry.model.domain.fee.FeeTransformResponseExtension;
|
|||||||
import google.registry.model.domain.fee06.FeeDeleteResponseExtensionV06;
|
import google.registry.model.domain.fee06.FeeDeleteResponseExtensionV06;
|
||||||
import google.registry.model.domain.fee11.FeeDeleteResponseExtensionV11;
|
import google.registry.model.domain.fee11.FeeDeleteResponseExtensionV11;
|
||||||
import google.registry.model.domain.fee12.FeeDeleteResponseExtensionV12;
|
import google.registry.model.domain.fee12.FeeDeleteResponseExtensionV12;
|
||||||
|
import google.registry.model.domain.feestdv1.FeeDeleteResponseExtensionStdV1;
|
||||||
import google.registry.model.domain.metadata.MetadataExtension;
|
import google.registry.model.domain.metadata.MetadataExtension;
|
||||||
import google.registry.model.domain.rgp.GracePeriodStatus;
|
import google.registry.model.domain.rgp.GracePeriodStatus;
|
||||||
import google.registry.model.domain.secdns.SecDnsCreateExtension;
|
import google.registry.model.domain.secdns.SecDnsCreateExtension;
|
||||||
@@ -428,6 +429,9 @@ public final class DomainDeleteFlow implements MutatingFlow, SqlStatementLogging
|
|||||||
@Nullable
|
@Nullable
|
||||||
private FeeTransformResponseExtension.Builder getDeleteResponseBuilder() {
|
private FeeTransformResponseExtension.Builder getDeleteResponseBuilder() {
|
||||||
Set<String> uris = nullToEmpty(sessionMetadata.getServiceExtensionUris());
|
Set<String> uris = nullToEmpty(sessionMetadata.getServiceExtensionUris());
|
||||||
|
if (uris.contains(ServiceExtension.FEE_1_00.getUri())) {
|
||||||
|
return new FeeDeleteResponseExtensionStdV1.Builder();
|
||||||
|
}
|
||||||
if (uris.contains(ServiceExtension.FEE_0_12.getUri())) {
|
if (uris.contains(ServiceExtension.FEE_0_12.getUri())) {
|
||||||
return new FeeDeleteResponseExtensionV12.Builder();
|
return new FeeDeleteResponseExtensionV12.Builder();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ public class Fee extends BaseFee {
|
|||||||
|
|
||||||
public static final ImmutableSet<String> FEE_EXTENSION_URIS =
|
public static final ImmutableSet<String> FEE_EXTENSION_URIS =
|
||||||
ImmutableSet.of(
|
ImmutableSet.of(
|
||||||
|
ServiceExtension.FEE_1_00.getUri(),
|
||||||
ServiceExtension.FEE_0_12.getUri(),
|
ServiceExtension.FEE_0_12.getUri(),
|
||||||
ServiceExtension.FEE_0_11.getUri(),
|
ServiceExtension.FEE_0_11.getUri(),
|
||||||
ServiceExtension.FEE_0_6.getUri());
|
ServiceExtension.FEE_0_6.getUri());
|
||||||
|
|||||||
+112
@@ -0,0 +1,112 @@
|
|||||||
|
// Copyright 2025 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.model.domain.feestdv1;
|
||||||
|
|
||||||
|
import com.google.common.base.Ascii;
|
||||||
|
import google.registry.model.domain.Period;
|
||||||
|
import google.registry.model.domain.fee.FeeCheckCommandExtensionItem;
|
||||||
|
import jakarta.xml.bind.annotation.XmlAttribute;
|
||||||
|
import jakarta.xml.bind.annotation.XmlElement;
|
||||||
|
import jakarta.xml.bind.annotation.XmlType;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.Optional;
|
||||||
|
import org.joda.money.CurrencyUnit;
|
||||||
|
import org.joda.time.DateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An individual price check item in version 1.0 of the fee extension on domain check commands.
|
||||||
|
* Items look like:
|
||||||
|
*
|
||||||
|
* <pre>{@code
|
||||||
|
* <fee:command name="renew" phase="sunrise" subphase="hello">
|
||||||
|
* <fee:period unit="y">1</fee:period>
|
||||||
|
* <fee:class>premium</fee:class>
|
||||||
|
* <fee:date>2017-05-17T13:22:21.0Z</fee:date>
|
||||||
|
* </fee:command>
|
||||||
|
* }</pre>
|
||||||
|
*/
|
||||||
|
@XmlType(propOrder = {"period", "feeClass", "feeDate"})
|
||||||
|
public class FeeCheckCommandExtensionItemStdV1 extends FeeCheckCommandExtensionItem {
|
||||||
|
|
||||||
|
/** The default validity period (if not specified) is 1 year for all operations. */
|
||||||
|
static final Period DEFAULT_PERIOD = Period.create(1, Period.Unit.YEARS);
|
||||||
|
|
||||||
|
@XmlAttribute(name = "name")
|
||||||
|
String commandName;
|
||||||
|
|
||||||
|
@XmlAttribute String phase;
|
||||||
|
|
||||||
|
@XmlAttribute String subphase;
|
||||||
|
|
||||||
|
@XmlElement(name = "class")
|
||||||
|
String feeClass;
|
||||||
|
|
||||||
|
@XmlElement(name = "date")
|
||||||
|
DateTime feeDate;
|
||||||
|
|
||||||
|
/** Version 1.0 does not support domain name or currency in fee extension items. */
|
||||||
|
@Override
|
||||||
|
public boolean isDomainNameSupported() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDomainName() {
|
||||||
|
throw new UnsupportedOperationException("Domain not supported");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CurrencyUnit getCurrency() {
|
||||||
|
return null; // This version of the fee extension doesn't specify currency per-item.
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getUnparsedCommandName() {
|
||||||
|
return commandName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommandName getCommandName() {
|
||||||
|
// Require the xml string to be lowercase.
|
||||||
|
if (commandName != null && commandName.toLowerCase(Locale.ENGLISH).equals(commandName)) {
|
||||||
|
try {
|
||||||
|
return CommandName.valueOf(Ascii.toUpperCase(commandName));
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
// Swallow this and return UNKNOWN below because there's no matching CommandName.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return CommandName.UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getPhase() {
|
||||||
|
return phase;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getSubphase() {
|
||||||
|
return subphase;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FeeCheckResponseExtensionItemStdV1.Builder createResponseBuilder() {
|
||||||
|
return new FeeCheckResponseExtensionItemStdV1.Builder();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<DateTime> getEffectiveDate() {
|
||||||
|
return Optional.ofNullable(feeDate);
|
||||||
|
}
|
||||||
|
}
|
||||||
+63
@@ -0,0 +1,63 @@
|
|||||||
|
// Copyright 2025 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.model.domain.feestdv1;
|
||||||
|
|
||||||
|
import static google.registry.util.CollectionUtils.nullToEmptyImmutableCopy;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import google.registry.model.ImmutableObject;
|
||||||
|
import google.registry.model.domain.fee.FeeCheckCommandExtension;
|
||||||
|
import google.registry.model.domain.fee.FeeCheckResponseExtensionItem;
|
||||||
|
import jakarta.xml.bind.annotation.XmlElement;
|
||||||
|
import jakarta.xml.bind.annotation.XmlRootElement;
|
||||||
|
import jakarta.xml.bind.annotation.XmlType;
|
||||||
|
import java.util.List;
|
||||||
|
import org.joda.money.CurrencyUnit;
|
||||||
|
|
||||||
|
/** Version 1.0 of the fee extension that may be present on domain check commands. */
|
||||||
|
@XmlRootElement(name = "check")
|
||||||
|
@XmlType(propOrder = {"currency", "items"})
|
||||||
|
public class FeeCheckCommandExtensionStdV1 extends ImmutableObject
|
||||||
|
implements FeeCheckCommandExtension<
|
||||||
|
FeeCheckCommandExtensionItemStdV1, FeeCheckResponseExtensionStdV1> {
|
||||||
|
|
||||||
|
CurrencyUnit currency;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CurrencyUnit getCurrency() {
|
||||||
|
return currency;
|
||||||
|
}
|
||||||
|
|
||||||
|
@XmlElement(name = "command")
|
||||||
|
List<FeeCheckCommandExtensionItemStdV1> items;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ImmutableList<FeeCheckCommandExtensionItemStdV1> getItems() {
|
||||||
|
return nullToEmptyImmutableCopy(items);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FeeCheckResponseExtensionStdV1 createResponse(
|
||||||
|
ImmutableList<? extends FeeCheckResponseExtensionItem> items) {
|
||||||
|
ImmutableList.Builder<FeeCheckResponseExtensionItemStdV1> builder =
|
||||||
|
new ImmutableList.Builder<>();
|
||||||
|
for (FeeCheckResponseExtensionItem item : items) {
|
||||||
|
if (item instanceof FeeCheckResponseExtensionItemStdV1) {
|
||||||
|
builder.add((FeeCheckResponseExtensionItemStdV1) item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return FeeCheckResponseExtensionStdV1.create(currency, builder.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
+119
@@ -0,0 +1,119 @@
|
|||||||
|
// Copyright 2025 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.model.domain.feestdv1;
|
||||||
|
|
||||||
|
import static google.registry.util.CollectionUtils.forceEmptyToNull;
|
||||||
|
|
||||||
|
import com.google.common.base.Ascii;
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import google.registry.model.Buildable;
|
||||||
|
import google.registry.model.ImmutableObject;
|
||||||
|
import google.registry.model.domain.Period;
|
||||||
|
import google.registry.model.domain.fee.Fee;
|
||||||
|
import google.registry.model.domain.fee.FeeQueryCommandExtensionItem.CommandName;
|
||||||
|
import jakarta.xml.bind.annotation.XmlAttribute;
|
||||||
|
import jakarta.xml.bind.annotation.XmlElement;
|
||||||
|
import jakarta.xml.bind.annotation.XmlType;
|
||||||
|
import java.util.List;
|
||||||
|
import org.joda.time.DateTime;
|
||||||
|
|
||||||
|
/** The version 1.0 response command entity for a domain check on a single resource. */
|
||||||
|
@XmlType(propOrder = {"period", "fee", "feeClass", "effectiveDate", "notAfterDate"})
|
||||||
|
public class FeeCheckResponseExtensionItemCommandStdV1 extends ImmutableObject {
|
||||||
|
|
||||||
|
/** The command that was checked. */
|
||||||
|
@XmlAttribute(name = "name")
|
||||||
|
String commandName;
|
||||||
|
|
||||||
|
/** The phase that was checked. */
|
||||||
|
@XmlAttribute String phase;
|
||||||
|
|
||||||
|
/** The subphase that was checked. */
|
||||||
|
@XmlAttribute String subphase;
|
||||||
|
|
||||||
|
/** The period that was checked. */
|
||||||
|
Period period;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The magnitude of the fee, in the specified units, with an optional description.
|
||||||
|
*
|
||||||
|
* <p>This is a list because a single operation can involve multiple fees.
|
||||||
|
*/
|
||||||
|
List<Fee> fee;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The type of the fee.
|
||||||
|
*
|
||||||
|
* <p>We will use "premium" for fees on premium names, and omit the field otherwise.
|
||||||
|
*/
|
||||||
|
@XmlElement(name = "class")
|
||||||
|
String feeClass;
|
||||||
|
|
||||||
|
/** The effective date that the check is to be performed on (if specified in the query). */
|
||||||
|
@XmlElement(name = "date")
|
||||||
|
DateTime effectiveDate;
|
||||||
|
|
||||||
|
/** The date after which the quoted fee is no longer valid (if applicable). */
|
||||||
|
@XmlElement(name = "notAfter")
|
||||||
|
DateTime notAfterDate;
|
||||||
|
|
||||||
|
public String getFeeClass() {
|
||||||
|
return feeClass;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Builder for {@link FeeCheckResponseExtensionItemCommandStdV1}. */
|
||||||
|
public static class Builder extends Buildable.Builder<FeeCheckResponseExtensionItemCommandStdV1> {
|
||||||
|
|
||||||
|
public Builder setCommandName(CommandName commandName) {
|
||||||
|
getInstance().commandName = Ascii.toLowerCase(commandName.name());
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder setPhase(String phase) {
|
||||||
|
getInstance().phase = phase;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder setSubphase(String subphase) {
|
||||||
|
getInstance().subphase = subphase;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder setPeriod(Period period) {
|
||||||
|
getInstance().period = period;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder setEffectiveDate(DateTime effectiveDate) {
|
||||||
|
getInstance().effectiveDate = effectiveDate;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder setNotAfterDate(DateTime notAfterDate) {
|
||||||
|
getInstance().notAfterDate = notAfterDate;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder setFee(List<Fee> fees) {
|
||||||
|
getInstance().fee = forceEmptyToNull(ImmutableList.copyOf(fees));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Builder setClass(String feeClass) {
|
||||||
|
getInstance().feeClass = feeClass;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+122
@@ -0,0 +1,122 @@
|
|||||||
|
// Copyright 2025 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.model.domain.feestdv1;
|
||||||
|
|
||||||
|
import static google.registry.util.CollectionUtils.forceEmptyToNull;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import google.registry.model.domain.DomainObjectSpec;
|
||||||
|
import google.registry.model.domain.Period;
|
||||||
|
import google.registry.model.domain.fee.Fee;
|
||||||
|
import google.registry.model.domain.fee.FeeCheckResponseExtensionItem;
|
||||||
|
import google.registry.model.domain.fee.FeeQueryCommandExtensionItem.CommandName;
|
||||||
|
import jakarta.xml.bind.annotation.XmlType;
|
||||||
|
import org.joda.time.DateTime;
|
||||||
|
|
||||||
|
/** The version 1.0 response for a domain check on a single resource. */
|
||||||
|
@XmlType(propOrder = {"object", "command"})
|
||||||
|
public class FeeCheckResponseExtensionItemStdV1 extends FeeCheckResponseExtensionItem {
|
||||||
|
|
||||||
|
/** The domain that was checked. */
|
||||||
|
DomainObjectSpec object;
|
||||||
|
|
||||||
|
/** The command that was checked. */
|
||||||
|
FeeCheckResponseExtensionItemCommandStdV1 command;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is overridden and not annotated for JAXB because this version of the extension
|
||||||
|
* doesn't support "period".
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Period getPeriod() {
|
||||||
|
return super.getPeriod();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is overridden and not annotated for JAXB because this version of the extension
|
||||||
|
* doesn't support "fee".
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public ImmutableList<Fee> getFees() {
|
||||||
|
return super.getFees();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is not annotated for JAXB because this version of the extension doesn't support
|
||||||
|
* "feeClass" and because the data comes off of the command object rather than a field.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String getFeeClass() {
|
||||||
|
return command.getFeeClass();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Builder for {@link FeeCheckResponseExtensionItemStdV1}. */
|
||||||
|
public static class Builder
|
||||||
|
extends FeeCheckResponseExtensionItem.Builder<FeeCheckResponseExtensionItemStdV1> {
|
||||||
|
|
||||||
|
final FeeCheckResponseExtensionItemCommandStdV1.Builder commandBuilder =
|
||||||
|
new FeeCheckResponseExtensionItemCommandStdV1.Builder();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Builder setCommand(CommandName commandName, String phase, String subphase) {
|
||||||
|
commandBuilder.setCommandName(commandName);
|
||||||
|
commandBuilder.setPhase(phase);
|
||||||
|
commandBuilder.setSubphase(subphase);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Builder setPeriod(Period period) {
|
||||||
|
commandBuilder.setPeriod(period);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Builder setFees(ImmutableList<Fee> fees) {
|
||||||
|
commandBuilder.setFee(forceEmptyToNull(ImmutableList.copyOf(fees)));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Builder setClass(String feeClass) {
|
||||||
|
commandBuilder.setClass(feeClass);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Builder setDomainNameIfSupported(String name) {
|
||||||
|
getInstance().object = new DomainObjectSpec(name);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FeeCheckResponseExtensionItemStdV1 build() {
|
||||||
|
getInstance().command = commandBuilder.build();
|
||||||
|
return super.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Builder setEffectiveDateIfSupported(DateTime effectiveDate) {
|
||||||
|
commandBuilder.setEffectiveDate(effectiveDate);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Builder setNotAfterDateIfSupported(DateTime notAfterDate) {
|
||||||
|
commandBuilder.setNotAfterDate(notAfterDate);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+59
@@ -0,0 +1,59 @@
|
|||||||
|
// Copyright 2025 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.model.domain.feestdv1;
|
||||||
|
|
||||||
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import google.registry.model.ImmutableObject;
|
||||||
|
import google.registry.model.domain.fee.FeeCheckResponseExtension;
|
||||||
|
import jakarta.xml.bind.annotation.XmlElement;
|
||||||
|
import jakarta.xml.bind.annotation.XmlRootElement;
|
||||||
|
import jakarta.xml.bind.annotation.XmlType;
|
||||||
|
import org.joda.money.CurrencyUnit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An XML data object that represents version 1.0 of the fee extension that may be present on the
|
||||||
|
* response to EPP domain check commands.
|
||||||
|
*/
|
||||||
|
@XmlRootElement(name = "chkData")
|
||||||
|
@XmlType(propOrder = {"currency", "items"})
|
||||||
|
public class FeeCheckResponseExtensionStdV1 extends ImmutableObject
|
||||||
|
implements FeeCheckResponseExtension<FeeCheckResponseExtensionItemStdV1> {
|
||||||
|
|
||||||
|
CurrencyUnit currency;
|
||||||
|
|
||||||
|
/** Check responses. */
|
||||||
|
@XmlElement(name = "cd")
|
||||||
|
ImmutableList<FeeCheckResponseExtensionItemStdV1> items;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setCurrencyIfSupported(CurrencyUnit currency) {
|
||||||
|
this.currency = currency;
|
||||||
|
}
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
@Override
|
||||||
|
public ImmutableList<FeeCheckResponseExtensionItemStdV1> getItems() {
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
|
||||||
|
static FeeCheckResponseExtensionStdV1 create(
|
||||||
|
CurrencyUnit currency, ImmutableList<FeeCheckResponseExtensionItemStdV1> items) {
|
||||||
|
FeeCheckResponseExtensionStdV1 instance = new FeeCheckResponseExtensionStdV1();
|
||||||
|
instance.currency = currency;
|
||||||
|
instance.items = items;
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
}
|
||||||
+45
@@ -0,0 +1,45 @@
|
|||||||
|
// Copyright 2025 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.model.domain.feestdv1;
|
||||||
|
|
||||||
|
import static google.registry.util.CollectionUtils.nullToEmptyImmutableCopy;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import google.registry.model.domain.fee.Credit;
|
||||||
|
import google.registry.model.domain.fee.FeeCreateCommandExtension;
|
||||||
|
import google.registry.model.domain.fee.FeeTransformResponseExtension;
|
||||||
|
import jakarta.xml.bind.annotation.XmlElement;
|
||||||
|
import jakarta.xml.bind.annotation.XmlRootElement;
|
||||||
|
import jakarta.xml.bind.annotation.XmlType;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/** A fee extension that may be present on domain create commands. */
|
||||||
|
@XmlRootElement(name = "create")
|
||||||
|
@XmlType(propOrder = {"currency", "fees", "credits"})
|
||||||
|
public class FeeCreateCommandExtensionStdV1 extends FeeCreateCommandExtension {
|
||||||
|
|
||||||
|
@XmlElement(name = "credit")
|
||||||
|
List<Credit> credits;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ImmutableList<Credit> getCredits() {
|
||||||
|
return nullToEmptyImmutableCopy(credits);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FeeTransformResponseExtension.Builder createResponseBuilder() {
|
||||||
|
return new FeeTransformResponseExtension.Builder(new FeeCreateResponseExtensionStdV1());
|
||||||
|
}
|
||||||
|
}
|
||||||
+27
@@ -0,0 +1,27 @@
|
|||||||
|
// Copyright 2025 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.model.domain.feestdv1;
|
||||||
|
|
||||||
|
import google.registry.model.domain.fee.FeeTransformResponseExtension;
|
||||||
|
import jakarta.xml.bind.annotation.XmlRootElement;
|
||||||
|
import jakarta.xml.bind.annotation.XmlType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An XML data object that represents a fee extension that may be present on the response to EPP
|
||||||
|
* domain create commands.
|
||||||
|
*/
|
||||||
|
@XmlRootElement(name = "creData")
|
||||||
|
@XmlType(propOrder = {"currency", "fees", "credits"})
|
||||||
|
public class FeeCreateResponseExtensionStdV1 extends FeeTransformResponseExtension {}
|
||||||
+35
@@ -0,0 +1,35 @@
|
|||||||
|
// Copyright 2025 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.model.domain.feestdv1;
|
||||||
|
|
||||||
|
import google.registry.model.domain.fee.FeeTransformResponseExtension;
|
||||||
|
import jakarta.xml.bind.annotation.XmlRootElement;
|
||||||
|
import jakarta.xml.bind.annotation.XmlType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An XML data object that represents a fee extension that may be present on the response to EPP
|
||||||
|
* domain create commands.
|
||||||
|
*/
|
||||||
|
@XmlRootElement(name = "delData")
|
||||||
|
@XmlType(propOrder = {"currency", "fees", "credits"})
|
||||||
|
public class FeeDeleteResponseExtensionStdV1 extends FeeTransformResponseExtension {
|
||||||
|
|
||||||
|
/** Builder for {@link FeeDeleteResponseExtensionStdV1}. */
|
||||||
|
public static class Builder extends FeeTransformResponseExtension.Builder {
|
||||||
|
public Builder() {
|
||||||
|
super(new FeeDeleteResponseExtensionStdV1());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+45
@@ -0,0 +1,45 @@
|
|||||||
|
// Copyright 2025 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.model.domain.feestdv1;
|
||||||
|
|
||||||
|
import static google.registry.util.CollectionUtils.nullToEmptyImmutableCopy;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import google.registry.model.domain.fee.Credit;
|
||||||
|
import google.registry.model.domain.fee.FeeRenewCommandExtension;
|
||||||
|
import google.registry.model.domain.fee.FeeTransformResponseExtension;
|
||||||
|
import jakarta.xml.bind.annotation.XmlElement;
|
||||||
|
import jakarta.xml.bind.annotation.XmlRootElement;
|
||||||
|
import jakarta.xml.bind.annotation.XmlType;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/** A fee extension that may be present on domain renew commands. */
|
||||||
|
@XmlRootElement(name = "renew")
|
||||||
|
@XmlType(propOrder = {"currency", "fees", "credits"})
|
||||||
|
public class FeeRenewCommandExtensionStdV1 extends FeeRenewCommandExtension {
|
||||||
|
|
||||||
|
@XmlElement(name = "credit")
|
||||||
|
List<Credit> credits;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ImmutableList<Credit> getCredits() {
|
||||||
|
return nullToEmptyImmutableCopy(credits);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FeeTransformResponseExtension.Builder createResponseBuilder() {
|
||||||
|
return new FeeTransformResponseExtension.Builder(new FeeRenewResponseExtensionStdV1());
|
||||||
|
}
|
||||||
|
}
|
||||||
+27
@@ -0,0 +1,27 @@
|
|||||||
|
// Copyright 2025 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.model.domain.feestdv1;
|
||||||
|
|
||||||
|
import google.registry.model.domain.fee.FeeTransformResponseExtension;
|
||||||
|
import jakarta.xml.bind.annotation.XmlRootElement;
|
||||||
|
import jakarta.xml.bind.annotation.XmlType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An XML data object that represents a fee extension that may be present on the response to EPP
|
||||||
|
* domain renew commands.
|
||||||
|
*/
|
||||||
|
@XmlRootElement(name = "renData")
|
||||||
|
@XmlType(propOrder = {"currency", "fees", "credits"})
|
||||||
|
public class FeeRenewResponseExtensionStdV1 extends FeeTransformResponseExtension {}
|
||||||
+45
@@ -0,0 +1,45 @@
|
|||||||
|
// Copyright 2025 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.model.domain.feestdv1;
|
||||||
|
|
||||||
|
import static google.registry.util.CollectionUtils.nullToEmptyImmutableCopy;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import google.registry.model.domain.fee.Credit;
|
||||||
|
import google.registry.model.domain.fee.FeeTransferCommandExtension;
|
||||||
|
import google.registry.model.domain.fee.FeeTransformResponseExtension;
|
||||||
|
import jakarta.xml.bind.annotation.XmlElement;
|
||||||
|
import jakarta.xml.bind.annotation.XmlRootElement;
|
||||||
|
import jakarta.xml.bind.annotation.XmlType;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/** A fee extension that may be present on domain transfer requests. */
|
||||||
|
@XmlRootElement(name = "transfer")
|
||||||
|
@XmlType(propOrder = {"currency", "fees", "credits"})
|
||||||
|
public class FeeTransferCommandExtensionStdV1 extends FeeTransferCommandExtension {
|
||||||
|
|
||||||
|
@XmlElement(name = "credit")
|
||||||
|
List<Credit> credits;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ImmutableList<Credit> getCredits() {
|
||||||
|
return nullToEmptyImmutableCopy(credits);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FeeTransformResponseExtension.Builder createResponseBuilder() {
|
||||||
|
return new FeeTransformResponseExtension.Builder(new FeeTransferResponseExtensionStdV1());
|
||||||
|
}
|
||||||
|
}
|
||||||
+27
@@ -0,0 +1,27 @@
|
|||||||
|
// Copyright 2025 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.model.domain.feestdv1;
|
||||||
|
|
||||||
|
import google.registry.model.domain.fee.FeeTransformResponseExtension;
|
||||||
|
import jakarta.xml.bind.annotation.XmlRootElement;
|
||||||
|
import jakarta.xml.bind.annotation.XmlType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An XML data object that represents a fee extension that may be present on the response to EPP
|
||||||
|
* domain transfer requests.
|
||||||
|
*/
|
||||||
|
@XmlRootElement(name = "trnData")
|
||||||
|
@XmlType(propOrder = {"currency", "fees", "credits"})
|
||||||
|
public class FeeTransferResponseExtensionStdV1 extends FeeTransformResponseExtension {}
|
||||||
+45
@@ -0,0 +1,45 @@
|
|||||||
|
// Copyright 2025 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.model.domain.feestdv1;
|
||||||
|
|
||||||
|
import static google.registry.util.CollectionUtils.nullToEmptyImmutableCopy;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import google.registry.model.domain.fee.Credit;
|
||||||
|
import google.registry.model.domain.fee.FeeTransformResponseExtension;
|
||||||
|
import google.registry.model.domain.fee.FeeUpdateCommandExtension;
|
||||||
|
import jakarta.xml.bind.annotation.XmlElement;
|
||||||
|
import jakarta.xml.bind.annotation.XmlRootElement;
|
||||||
|
import jakarta.xml.bind.annotation.XmlType;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/** A fee extension that may be present on domain update commands. */
|
||||||
|
@XmlRootElement(name = "update")
|
||||||
|
@XmlType(propOrder = {"currency", "fees", "credits"})
|
||||||
|
public class FeeUpdateCommandExtensionStdV1 extends FeeUpdateCommandExtension {
|
||||||
|
|
||||||
|
@XmlElement(name = "credit")
|
||||||
|
List<Credit> credits;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ImmutableList<Credit> getCredits() {
|
||||||
|
return nullToEmptyImmutableCopy(credits);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FeeTransformResponseExtension.Builder createResponseBuilder() {
|
||||||
|
return new FeeTransformResponseExtension.Builder(new FeeUpdateResponseExtensionStdV1());
|
||||||
|
}
|
||||||
|
}
|
||||||
+27
@@ -0,0 +1,27 @@
|
|||||||
|
// Copyright 2025 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.model.domain.feestdv1;
|
||||||
|
|
||||||
|
import google.registry.model.domain.fee.FeeTransformResponseExtension;
|
||||||
|
import jakarta.xml.bind.annotation.XmlRootElement;
|
||||||
|
import jakarta.xml.bind.annotation.XmlType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An XML data object that represents a fee extension that may be present on the response to EPP
|
||||||
|
* domain update commands.
|
||||||
|
*/
|
||||||
|
@XmlRootElement(name = "updData")
|
||||||
|
@XmlType(propOrder = {"currency", "fees", "credits"})
|
||||||
|
public class FeeUpdateResponseExtensionStdV1 extends FeeTransformResponseExtension {}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
// Copyright 2025 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.
|
||||||
|
|
||||||
|
@XmlSchema(
|
||||||
|
namespace = "urn:ietf:params:xml:ns:epp:fee-1.0",
|
||||||
|
xmlns = @XmlNs(prefix = "fee_1_00", namespaceURI = "urn:ietf:params:xml:ns:epp:fee-1.0"),
|
||||||
|
elementFormDefault = XmlNsForm.QUALIFIED)
|
||||||
|
@XmlAccessorType(XmlAccessType.FIELD)
|
||||||
|
@XmlJavaTypeAdapters({
|
||||||
|
@XmlJavaTypeAdapter(CurrencyUnitAdapter.class),
|
||||||
|
@XmlJavaTypeAdapter(UtcDateTimeAdapter.class)
|
||||||
|
})
|
||||||
|
package google.registry.model.domain.feestdv1;
|
||||||
|
|
||||||
|
import google.registry.model.adapters.CurrencyUnitAdapter;
|
||||||
|
import google.registry.xml.UtcDateTimeAdapter;
|
||||||
|
import jakarta.xml.bind.annotation.XmlAccessType;
|
||||||
|
import jakarta.xml.bind.annotation.XmlAccessorType;
|
||||||
|
import jakarta.xml.bind.annotation.XmlNs;
|
||||||
|
import jakarta.xml.bind.annotation.XmlNsForm;
|
||||||
|
import jakarta.xml.bind.annotation.XmlSchema;
|
||||||
|
import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
|
||||||
|
import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
|
||||||
@@ -43,6 +43,7 @@ public class EppXmlTransformer {
|
|||||||
"fee06.xsd",
|
"fee06.xsd",
|
||||||
"fee11.xsd",
|
"fee11.xsd",
|
||||||
"fee12.xsd",
|
"fee12.xsd",
|
||||||
|
"fee-std-v1.xsd",
|
||||||
"metadata.xsd",
|
"metadata.xsd",
|
||||||
"mark.xsd",
|
"mark.xsd",
|
||||||
"dsig.xsd",
|
"dsig.xsd",
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ import google.registry.model.domain.fee11.FeeCheckCommandExtensionV11;
|
|||||||
import google.registry.model.domain.fee11.FeeCheckResponseExtensionV11;
|
import google.registry.model.domain.fee11.FeeCheckResponseExtensionV11;
|
||||||
import google.registry.model.domain.fee12.FeeCheckCommandExtensionV12;
|
import google.registry.model.domain.fee12.FeeCheckCommandExtensionV12;
|
||||||
import google.registry.model.domain.fee12.FeeCheckResponseExtensionV12;
|
import google.registry.model.domain.fee12.FeeCheckResponseExtensionV12;
|
||||||
|
import google.registry.model.domain.feestdv1.FeeCheckCommandExtensionStdV1;
|
||||||
|
import google.registry.model.domain.feestdv1.FeeCheckResponseExtensionStdV1;
|
||||||
import google.registry.model.domain.launch.LaunchCreateExtension;
|
import google.registry.model.domain.launch.LaunchCreateExtension;
|
||||||
import google.registry.model.domain.metadata.MetadataExtension;
|
import google.registry.model.domain.metadata.MetadataExtension;
|
||||||
import google.registry.model.domain.rgp.RgpUpdateExtension;
|
import google.registry.model.domain.rgp.RgpUpdateExtension;
|
||||||
@@ -54,6 +56,7 @@ public class ProtocolDefinition {
|
|||||||
FEE_0_6(FeeCheckCommandExtensionV06.class, FeeCheckResponseExtensionV06.class, true),
|
FEE_0_6(FeeCheckCommandExtensionV06.class, FeeCheckResponseExtensionV06.class, true),
|
||||||
FEE_0_11(FeeCheckCommandExtensionV11.class, FeeCheckResponseExtensionV11.class, true),
|
FEE_0_11(FeeCheckCommandExtensionV11.class, FeeCheckResponseExtensionV11.class, true),
|
||||||
FEE_0_12(FeeCheckCommandExtensionV12.class, FeeCheckResponseExtensionV12.class, true),
|
FEE_0_12(FeeCheckCommandExtensionV12.class, FeeCheckResponseExtensionV12.class, true),
|
||||||
|
FEE_1_00(FeeCheckCommandExtensionStdV1.class, FeeCheckResponseExtensionStdV1.class, true),
|
||||||
METADATA_1_0(MetadataExtension.class, null, false);
|
METADATA_1_0(MetadataExtension.class, null, false);
|
||||||
|
|
||||||
private final Class<? extends CommandExtension> commandExtensionClass;
|
private final Class<? extends CommandExtension> commandExtensionClass;
|
||||||
|
|||||||
@@ -40,6 +40,11 @@ import google.registry.model.domain.fee12.FeeCreateCommandExtensionV12;
|
|||||||
import google.registry.model.domain.fee12.FeeRenewCommandExtensionV12;
|
import google.registry.model.domain.fee12.FeeRenewCommandExtensionV12;
|
||||||
import google.registry.model.domain.fee12.FeeTransferCommandExtensionV12;
|
import google.registry.model.domain.fee12.FeeTransferCommandExtensionV12;
|
||||||
import google.registry.model.domain.fee12.FeeUpdateCommandExtensionV12;
|
import google.registry.model.domain.fee12.FeeUpdateCommandExtensionV12;
|
||||||
|
import google.registry.model.domain.feestdv1.FeeCheckCommandExtensionStdV1;
|
||||||
|
import google.registry.model.domain.feestdv1.FeeCreateCommandExtensionStdV1;
|
||||||
|
import google.registry.model.domain.feestdv1.FeeRenewCommandExtensionStdV1;
|
||||||
|
import google.registry.model.domain.feestdv1.FeeTransferCommandExtensionStdV1;
|
||||||
|
import google.registry.model.domain.feestdv1.FeeUpdateCommandExtensionStdV1;
|
||||||
import google.registry.model.domain.launch.LaunchCheckExtension;
|
import google.registry.model.domain.launch.LaunchCheckExtension;
|
||||||
import google.registry.model.domain.launch.LaunchCreateExtension;
|
import google.registry.model.domain.launch.LaunchCreateExtension;
|
||||||
import google.registry.model.domain.launch.LaunchDeleteExtension;
|
import google.registry.model.domain.launch.LaunchDeleteExtension;
|
||||||
@@ -348,6 +353,13 @@ public class EppInput extends ImmutableObject {
|
|||||||
@XmlElementRef(type = FeeTransferCommandExtensionV12.class),
|
@XmlElementRef(type = FeeTransferCommandExtensionV12.class),
|
||||||
@XmlElementRef(type = FeeUpdateCommandExtensionV12.class),
|
@XmlElementRef(type = FeeUpdateCommandExtensionV12.class),
|
||||||
|
|
||||||
|
// Fee extension standard version 1.0 (RFC 8748)
|
||||||
|
@XmlElementRef(type = FeeCheckCommandExtensionStdV1.class),
|
||||||
|
@XmlElementRef(type = FeeCreateCommandExtensionStdV1.class),
|
||||||
|
@XmlElementRef(type = FeeRenewCommandExtensionStdV1.class),
|
||||||
|
@XmlElementRef(type = FeeTransferCommandExtensionStdV1.class),
|
||||||
|
@XmlElementRef(type = FeeUpdateCommandExtensionStdV1.class),
|
||||||
|
|
||||||
// Launch phase extensions
|
// Launch phase extensions
|
||||||
@XmlElementRef(type = LaunchCheckExtension.class),
|
@XmlElementRef(type = LaunchCheckExtension.class),
|
||||||
@XmlElementRef(type = LaunchCreateExtension.class),
|
@XmlElementRef(type = LaunchCreateExtension.class),
|
||||||
|
|||||||
@@ -43,6 +43,12 @@ import google.registry.model.domain.fee12.FeeDeleteResponseExtensionV12;
|
|||||||
import google.registry.model.domain.fee12.FeeRenewResponseExtensionV12;
|
import google.registry.model.domain.fee12.FeeRenewResponseExtensionV12;
|
||||||
import google.registry.model.domain.fee12.FeeTransferResponseExtensionV12;
|
import google.registry.model.domain.fee12.FeeTransferResponseExtensionV12;
|
||||||
import google.registry.model.domain.fee12.FeeUpdateResponseExtensionV12;
|
import google.registry.model.domain.fee12.FeeUpdateResponseExtensionV12;
|
||||||
|
import google.registry.model.domain.feestdv1.FeeCheckResponseExtensionStdV1;
|
||||||
|
import google.registry.model.domain.feestdv1.FeeCreateResponseExtensionStdV1;
|
||||||
|
import google.registry.model.domain.feestdv1.FeeDeleteResponseExtensionStdV1;
|
||||||
|
import google.registry.model.domain.feestdv1.FeeRenewResponseExtensionStdV1;
|
||||||
|
import google.registry.model.domain.feestdv1.FeeTransferResponseExtensionStdV1;
|
||||||
|
import google.registry.model.domain.feestdv1.FeeUpdateResponseExtensionStdV1;
|
||||||
import google.registry.model.domain.launch.LaunchCheckResponseExtension;
|
import google.registry.model.domain.launch.LaunchCheckResponseExtension;
|
||||||
import google.registry.model.domain.rgp.RgpInfoExtension;
|
import google.registry.model.domain.rgp.RgpInfoExtension;
|
||||||
import google.registry.model.domain.secdns.SecDnsInfoExtension;
|
import google.registry.model.domain.secdns.SecDnsInfoExtension;
|
||||||
@@ -142,6 +148,12 @@ public class EppResponse extends ImmutableObject implements ResponseOrGreeting {
|
|||||||
@XmlElementRef(type = FeeRenewResponseExtensionV12.class),
|
@XmlElementRef(type = FeeRenewResponseExtensionV12.class),
|
||||||
@XmlElementRef(type = FeeTransferResponseExtensionV12.class),
|
@XmlElementRef(type = FeeTransferResponseExtensionV12.class),
|
||||||
@XmlElementRef(type = FeeUpdateResponseExtensionV12.class),
|
@XmlElementRef(type = FeeUpdateResponseExtensionV12.class),
|
||||||
|
@XmlElementRef(type = FeeCheckResponseExtensionStdV1.class),
|
||||||
|
@XmlElementRef(type = FeeCreateResponseExtensionStdV1.class),
|
||||||
|
@XmlElementRef(type = FeeDeleteResponseExtensionStdV1.class),
|
||||||
|
@XmlElementRef(type = FeeRenewResponseExtensionStdV1.class),
|
||||||
|
@XmlElementRef(type = FeeTransferResponseExtensionStdV1.class),
|
||||||
|
@XmlElementRef(type = FeeUpdateResponseExtensionStdV1.class),
|
||||||
@XmlElementRef(type = LaunchCheckResponseExtension.class),
|
@XmlElementRef(type = LaunchCheckResponseExtension.class),
|
||||||
@XmlElementRef(type = RgpInfoExtension.class),
|
@XmlElementRef(type = RgpInfoExtension.class),
|
||||||
@XmlElementRef(type = SecDnsInfoExtension.class)
|
@XmlElementRef(type = SecDnsInfoExtension.class)
|
||||||
|
|||||||
@@ -29,38 +29,40 @@ import java.nio.charset.Charset;
|
|||||||
/** Static methods for marshalling to and from the generated classes. */
|
/** Static methods for marshalling to and from the generated classes. */
|
||||||
public class XjcXmlTransformer {
|
public class XjcXmlTransformer {
|
||||||
|
|
||||||
private static final XmlTransformer INSTANCE = new XmlTransformer(
|
private static final XmlTransformer INSTANCE =
|
||||||
XjcXmlTransformer.class.getPackage(),
|
new XmlTransformer(
|
||||||
// Hardcoded XML schemas, ordered with respect to dependency.
|
XjcXmlTransformer.class.getPackage(),
|
||||||
new ImmutableMap.Builder<String, String>()
|
// Hardcoded XML schemas, ordered with respect to dependency.
|
||||||
.put("eppcom", "eppcom.xsd")
|
new ImmutableMap.Builder<String, String>()
|
||||||
.put("epp", "epp.xsd")
|
.put("eppcom", "eppcom.xsd")
|
||||||
.put("contact", "contact.xsd")
|
.put("epp", "epp.xsd")
|
||||||
.put("host", "host.xsd")
|
.put("contact", "contact.xsd")
|
||||||
.put("domain", "domain.xsd")
|
.put("host", "host.xsd")
|
||||||
.put("rgp", "rgp.xsd")
|
.put("domain", "domain.xsd")
|
||||||
.put("secdns", "secdns.xsd")
|
.put("rgp", "rgp.xsd")
|
||||||
.put("mark", "mark.xsd")
|
.put("secdns", "secdns.xsd")
|
||||||
.put("dsig", "dsig.xsd")
|
.put("mark", "mark.xsd")
|
||||||
.put("smd", "smd.xsd")
|
.put("dsig", "dsig.xsd")
|
||||||
.put("fee06", "fee06.xsd")
|
.put("smd", "smd.xsd")
|
||||||
.put("fee11", "fee11.xsd")
|
.put("fee06", "fee06.xsd")
|
||||||
.put("fee12", "fee12.xsd")
|
.put("fee11", "fee11.xsd")
|
||||||
.put("launch", "launch.xsd")
|
.put("fee12", "fee12.xsd")
|
||||||
.put("rde", "rde.xsd")
|
.put("fee_1_00", "fee-std-v1.xsd")
|
||||||
.put("rdeheader", "rde-header.xsd")
|
.put("launch", "launch.xsd")
|
||||||
.put("rdereport", "rde-report.xsd")
|
.put("rde", "rde.xsd")
|
||||||
.put("rdecontact", "rde-contact.xsd")
|
.put("rdeheader", "rde-header.xsd")
|
||||||
.put("rdehost", "rde-host.xsd")
|
.put("rdereport", "rde-report.xsd")
|
||||||
.put("rdeidn", "rde-idn.xsd")
|
.put("rdecontact", "rde-contact.xsd")
|
||||||
.put("rdedomain", "rde-domain.xsd")
|
.put("rdehost", "rde-host.xsd")
|
||||||
.put("rdeeppparams", "rde-eppparams.xsd")
|
.put("rdeidn", "rde-idn.xsd")
|
||||||
.put("rdenndn", "rde-nndn.xsd")
|
.put("rdedomain", "rde-domain.xsd")
|
||||||
.put("rdenotification", "rde-notification.xsd")
|
.put("rdeeppparams", "rde-eppparams.xsd")
|
||||||
.put("rdepolicy", "rde-policy.xsd")
|
.put("rdenndn", "rde-nndn.xsd")
|
||||||
.put("rderegistrar", "rde-registrar.xsd")
|
.put("rdenotification", "rde-notification.xsd")
|
||||||
.put("iirdea", "iirdea.xsd")
|
.put("rdepolicy", "rde-policy.xsd")
|
||||||
.build());
|
.put("rderegistrar", "rde-registrar.xsd")
|
||||||
|
.put("iirdea", "iirdea.xsd")
|
||||||
|
.build());
|
||||||
|
|
||||||
public static XmlTransformer get() {
|
public static XmlTransformer get() {
|
||||||
return INSTANCE;
|
return INSTANCE;
|
||||||
|
|||||||
@@ -164,6 +164,15 @@
|
|||||||
</nameXmlTransform>
|
</nameXmlTransform>
|
||||||
</schemaBindings>
|
</schemaBindings>
|
||||||
</bindings>
|
</bindings>
|
||||||
|
<bindings schemaLocation="fee-std-v1.xsd" node="/xsd:schema">
|
||||||
|
<schemaBindings>
|
||||||
|
<package name="google.registry.xjc.fee_1_00"/>
|
||||||
|
<nameXmlTransform>
|
||||||
|
<elementName prefix="XjcFeeStdV1"/>
|
||||||
|
<typeName prefix="XjcFeeStdV1"/>
|
||||||
|
</nameXmlTransform>
|
||||||
|
</schemaBindings>
|
||||||
|
</bindings>
|
||||||
<bindings schemaLocation="launch.xsd" node="/xsd:schema">
|
<bindings schemaLocation="launch.xsd" node="/xsd:schema">
|
||||||
<schemaBindings>
|
<schemaBindings>
|
||||||
<package name="google.registry.xjc.launch"/>
|
<package name="google.registry.xjc.launch"/>
|
||||||
|
|||||||
@@ -26,6 +26,9 @@
|
|||||||
@jakarta.xml.bind.annotation.XmlNs(
|
@jakarta.xml.bind.annotation.XmlNs(
|
||||||
prefix = "fee12",
|
prefix = "fee12",
|
||||||
namespaceURI = "urn:ietf:params:xml:ns:fee-0.12"),
|
namespaceURI = "urn:ietf:params:xml:ns:fee-0.12"),
|
||||||
|
@jakarta.xml.bind.annotation.XmlNs(
|
||||||
|
prefix = "fee_1_00",
|
||||||
|
namespaceURI = "urn:ietf:params:xml:ns:epp:fee-1.0"),
|
||||||
@jakarta.xml.bind.annotation.XmlNs(
|
@jakarta.xml.bind.annotation.XmlNs(
|
||||||
prefix = "host",
|
prefix = "host",
|
||||||
namespaceURI = "urn:ietf:params:xml:ns:host-1.0"),
|
namespaceURI = "urn:ietf:params:xml:ns:host-1.0"),
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ eppcom urn:ietf:params:xml:ns:eppcom-1.0
|
|||||||
fee06 urn:ietf:params:xml:ns:fee-0.6
|
fee06 urn:ietf:params:xml:ns:fee-0.6
|
||||||
fee11 urn:ietf:params:xml:ns:fee-0.11
|
fee11 urn:ietf:params:xml:ns:fee-0.11
|
||||||
fee12 urn:ietf:params:xml:ns:fee-0.12
|
fee12 urn:ietf:params:xml:ns:fee-0.12
|
||||||
|
fee_1_00 urn:ietf:params:xml:ns:epp:fee-1.0
|
||||||
host urn:ietf:params:xml:ns:host-1.0
|
host urn:ietf:params:xml:ns:host-1.0
|
||||||
iirdea urn:ietf:params:xml:ns:iirdea-1.0
|
iirdea urn:ietf:params:xml:ns:iirdea-1.0
|
||||||
launch urn:ietf:params:xml:ns:launch-1.0
|
launch urn:ietf:params:xml:ns:launch-1.0
|
||||||
|
|||||||
@@ -0,0 +1,242 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<schema xmlns="http://www.w3.org/2001/XMLSchema"
|
||||||
|
xmlns:fee="urn:ietf:params:xml:ns:epp:fee-1.0"
|
||||||
|
xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0"
|
||||||
|
xmlns:domain="urn:ietf:params:xml:ns:domain-1.0"
|
||||||
|
targetNamespace="urn:ietf:params:xml:ns:epp:fee-1.0"
|
||||||
|
elementFormDefault="qualified">
|
||||||
|
|
||||||
|
<import namespace="urn:ietf:params:xml:ns:eppcom-1.0" />
|
||||||
|
<import namespace="urn:ietf:params:xml:ns:domain-1.0" />
|
||||||
|
|
||||||
|
<annotation>
|
||||||
|
<documentation>Extensible Provisioning Protocol
|
||||||
|
v1.0 extension schema for fee
|
||||||
|
information.</documentation>
|
||||||
|
</annotation>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Child elements found in EPP commands and responses
|
||||||
|
-->
|
||||||
|
<element name="check" type="fee:checkType" />
|
||||||
|
<element name="chkData" type="fee:chkDataType" />
|
||||||
|
<element name="create" type="fee:transformCommandType" />
|
||||||
|
<element name="creData" type="fee:transformResultType" />
|
||||||
|
<element name="renew" type="fee:transformCommandType" />
|
||||||
|
<element name="renData" type="fee:transformResultType" />
|
||||||
|
<element name="transfer" type="fee:transformCommandType" />
|
||||||
|
<element name="trnData" type="fee:transferResultType" />
|
||||||
|
<element name="update" type="fee:transformCommandType" />
|
||||||
|
<element name="updData" type="fee:transformResultType" />
|
||||||
|
<element name="delData" type="fee:transformResultType" />
|
||||||
|
|
||||||
|
<!--
|
||||||
|
client <check> command
|
||||||
|
-->
|
||||||
|
<complexType name="checkType">
|
||||||
|
<sequence>
|
||||||
|
<element name="currency"
|
||||||
|
type="fee:currencyType"
|
||||||
|
minOccurs="0" />
|
||||||
|
<element name="command"
|
||||||
|
type="fee:commandCheckType"
|
||||||
|
maxOccurs="unbounded" />
|
||||||
|
</sequence>
|
||||||
|
</complexType>
|
||||||
|
|
||||||
|
<complexType name="commandCheckType">
|
||||||
|
<sequence>
|
||||||
|
<element name="period"
|
||||||
|
type="domain:periodType"
|
||||||
|
minOccurs="0" />
|
||||||
|
<element name="class"
|
||||||
|
type="token"
|
||||||
|
minOccurs="0" />
|
||||||
|
<element name="date"
|
||||||
|
type="dateTime"
|
||||||
|
minOccurs="0" />
|
||||||
|
</sequence>
|
||||||
|
<attribute name="name" type="fee:commandTypeValue" />
|
||||||
|
<attribute name="phase" type="token" />
|
||||||
|
<attribute name="subphase" type="token" />
|
||||||
|
</complexType>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
server <check> result
|
||||||
|
-->
|
||||||
|
<complexType name="chkDataType">
|
||||||
|
<sequence>
|
||||||
|
<!--
|
||||||
|
Dialog is ongoing with Gavin Brown about this. His XSD has a
|
||||||
|
mandatory currency field. But what if the different domains being
|
||||||
|
checked have different currencies? I am trying to figure out what
|
||||||
|
he intends here. - Brian
|
||||||
|
-->
|
||||||
|
<element name="currency" type="fee:currencyType" minOccurs="0"/>
|
||||||
|
<element name="cd" type="fee:objectCDType"
|
||||||
|
maxOccurs="unbounded" />
|
||||||
|
</sequence>
|
||||||
|
</complexType>
|
||||||
|
|
||||||
|
<complexType name="objectCDType">
|
||||||
|
<sequence>
|
||||||
|
<element name="object">
|
||||||
|
<complexType>
|
||||||
|
<sequence>
|
||||||
|
<any namespace="##other" processContents="lax"/>
|
||||||
|
</sequence>
|
||||||
|
</complexType>
|
||||||
|
</element>
|
||||||
|
<element name="command"
|
||||||
|
type="fee:commandCDType"
|
||||||
|
maxOccurs="unbounded" />
|
||||||
|
</sequence>
|
||||||
|
</complexType>
|
||||||
|
|
||||||
|
<complexType name="commandCDType">
|
||||||
|
<sequence>
|
||||||
|
<element name="period"
|
||||||
|
type="domain:periodType"
|
||||||
|
minOccurs="0" maxOccurs="1" />
|
||||||
|
<element name="fee"
|
||||||
|
type="fee:feeType"
|
||||||
|
minOccurs="0" maxOccurs="unbounded" />
|
||||||
|
<element name="credit"
|
||||||
|
type="fee:creditType"
|
||||||
|
minOccurs="0" maxOccurs="unbounded" />
|
||||||
|
<element name="class"
|
||||||
|
type="token"
|
||||||
|
minOccurs="0" />
|
||||||
|
<element name="reason"
|
||||||
|
type="token"
|
||||||
|
minOccurs="0" />
|
||||||
|
<element name="date"
|
||||||
|
type="dateTime"
|
||||||
|
minOccurs="0" />
|
||||||
|
<element name="notAfter"
|
||||||
|
type="dateTime"
|
||||||
|
minOccurs="0" />
|
||||||
|
</sequence>
|
||||||
|
<attribute name="avail" type="boolean" default="1" />
|
||||||
|
<attribute name="name" type="fee:commandTypeValue" />
|
||||||
|
<attribute name="phase" type="token" />
|
||||||
|
<attribute name="subphase" type="token" />
|
||||||
|
</complexType>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
general transform (create, renew, update, transfer) command
|
||||||
|
-->
|
||||||
|
<complexType name="transformCommandType">
|
||||||
|
<sequence>
|
||||||
|
<element name="currency" type="fee:currencyType"
|
||||||
|
minOccurs="0" />
|
||||||
|
<element name="fee" type="fee:feeType"
|
||||||
|
maxOccurs="unbounded" />
|
||||||
|
<element name="credit" type="fee:creditType"
|
||||||
|
minOccurs="0" maxOccurs="unbounded" />
|
||||||
|
</sequence>
|
||||||
|
</complexType>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
general transform (create, renew, update, delete) result
|
||||||
|
-->
|
||||||
|
<complexType name="transformResultType">
|
||||||
|
<sequence>
|
||||||
|
<element name="currency" type="fee:currencyType" />
|
||||||
|
<element name="fee" type="fee:feeType"
|
||||||
|
minOccurs="0" maxOccurs="unbounded" />
|
||||||
|
<element name="credit" type="fee:creditType"
|
||||||
|
minOccurs="0" maxOccurs="unbounded" />
|
||||||
|
<element name="balance" type="fee:balanceType"
|
||||||
|
minOccurs="0" />
|
||||||
|
<element name="creditLimit" type="fee:creditLimitType"
|
||||||
|
minOccurs="0" />
|
||||||
|
</sequence>
|
||||||
|
</complexType>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
transfer result
|
||||||
|
-->
|
||||||
|
<complexType name="transferResultType">
|
||||||
|
<sequence>
|
||||||
|
<element name="currency" type="fee:currencyType" />
|
||||||
|
|
||||||
|
<!-- only used op="query" responses -->
|
||||||
|
<element name="period" type="domain:periodType"
|
||||||
|
minOccurs="0" />
|
||||||
|
|
||||||
|
<element name="fee" type="fee:feeType"
|
||||||
|
maxOccurs="unbounded" />
|
||||||
|
<element name="credit" type="fee:creditType"
|
||||||
|
minOccurs="0" maxOccurs="unbounded" />
|
||||||
|
|
||||||
|
<element name="balance" type="fee:balanceType"
|
||||||
|
minOccurs="0" />
|
||||||
|
<element name="creditLimit" type="fee:creditLimitType"
|
||||||
|
minOccurs="0" />
|
||||||
|
</sequence>
|
||||||
|
</complexType>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
common types
|
||||||
|
-->
|
||||||
|
<simpleType name="currencyType">
|
||||||
|
<restriction base="string">
|
||||||
|
<pattern value="[A-Z]{3}" />
|
||||||
|
</restriction>
|
||||||
|
</simpleType>
|
||||||
|
|
||||||
|
<simpleType name="commandTypeValue">
|
||||||
|
<restriction base="token">
|
||||||
|
<minLength value="3"/>
|
||||||
|
<maxLength value="16"/>
|
||||||
|
</restriction>
|
||||||
|
</simpleType>
|
||||||
|
|
||||||
|
<simpleType name="nonNegativeDecimal">
|
||||||
|
<restriction base="decimal">
|
||||||
|
<minInclusive value="0" />
|
||||||
|
</restriction>
|
||||||
|
</simpleType>
|
||||||
|
|
||||||
|
<simpleType name="negativeDecimal">
|
||||||
|
<restriction base="decimal">
|
||||||
|
<maxInclusive value="0" />
|
||||||
|
</restriction>
|
||||||
|
</simpleType>
|
||||||
|
|
||||||
|
<complexType name="feeType">
|
||||||
|
<simpleContent>
|
||||||
|
<extension base="fee:nonNegativeDecimal">
|
||||||
|
<attribute name="description"/>
|
||||||
|
<attribute name="refundable" type="boolean" />
|
||||||
|
<attribute name="grace-period" type="duration" />
|
||||||
|
<attribute name="applied" default="immediate">
|
||||||
|
<simpleType>
|
||||||
|
<restriction base="token">
|
||||||
|
<enumeration value="immediate" />
|
||||||
|
<enumeration value="delayed" />
|
||||||
|
</restriction>
|
||||||
|
</simpleType>
|
||||||
|
</attribute>
|
||||||
|
</extension>
|
||||||
|
</simpleContent>
|
||||||
|
</complexType>
|
||||||
|
|
||||||
|
<complexType name="creditType">
|
||||||
|
<simpleContent>
|
||||||
|
<extension base="fee:negativeDecimal">
|
||||||
|
<attribute name="description"/>
|
||||||
|
</extension>
|
||||||
|
</simpleContent>
|
||||||
|
</complexType>
|
||||||
|
|
||||||
|
<simpleType name="balanceType">
|
||||||
|
<restriction base="decimal" />
|
||||||
|
</simpleType>
|
||||||
|
|
||||||
|
<simpleType name="creditLimitType">
|
||||||
|
<restriction base="decimal" />
|
||||||
|
</simpleType>
|
||||||
|
|
||||||
|
</schema>
|
||||||
@@ -112,6 +112,10 @@ public abstract class FlowTestCase<F extends Flow> {
|
|||||||
eppLoader = new EppLoader(this, inputFilename, substitutions);
|
eppLoader = new EppLoader(this, inputFilename, substitutions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void setEppInputXml(String eppXml) {
|
||||||
|
eppLoader = new EppLoader(eppXml);
|
||||||
|
}
|
||||||
|
|
||||||
/** Returns the EPP data loaded by a previous call to setEppInput. */
|
/** Returns the EPP data loaded by a previous call to setEppInput. */
|
||||||
protected EppInput getEppInput() throws EppException {
|
protected EppInput getEppInput() throws EppException {
|
||||||
return eppLoader.getEpp();
|
return eppLoader.getEpp();
|
||||||
@@ -130,6 +134,28 @@ public abstract class FlowTestCase<F extends Flow> {
|
|||||||
return TestDataHelper.loadFile(getClass(), filename, substitutions);
|
return TestDataHelper.loadFile(getClass(), filename, substitutions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts an input or response EPP message with draft fee extension v12 to std v1.
|
||||||
|
*
|
||||||
|
* <p>There is no practical changes between draft v12 and the v1 standard. This method allows us
|
||||||
|
* to reuse v12 test data.
|
||||||
|
*/
|
||||||
|
protected String loadFeeV12FileAsStdV1(String filename) {
|
||||||
|
String content = loadFile(filename);
|
||||||
|
return content.replace("urn:ietf:params:xml:ns:fee-0.12", "urn:ietf:params:xml:ns:epp:fee-1.0");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts an input or response EPP message with draft fee extension v12 to std v1.
|
||||||
|
*
|
||||||
|
* <p>There is no practical changes between draft v12 and the v1 standard. This method allows us
|
||||||
|
* to reuse v12 test data.
|
||||||
|
*/
|
||||||
|
protected String loadFeeV12FileAsStdV1(String filename, Map<String, String> substitutions) {
|
||||||
|
String content = loadFile(filename, substitutions);
|
||||||
|
return content.replace("urn:ietf:params:xml:ns:fee-0.12", "urn:ietf:params:xml:ns:epp:fee-1.0");
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
protected String getClientTrid() throws Exception {
|
protected String getClientTrid() throws Exception {
|
||||||
return eppLoader.getEpp().getCommandWrapper().getClTrid().orElse(null);
|
return eppLoader.getEpp().getCommandWrapper().getClTrid().orElse(null);
|
||||||
|
|||||||
@@ -87,11 +87,17 @@ import google.registry.model.tld.Tld.TldState;
|
|||||||
import google.registry.model.tld.label.ReservedList;
|
import google.registry.model.tld.label.ReservedList;
|
||||||
import google.registry.testing.DatabaseHelper;
|
import google.registry.testing.DatabaseHelper;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import java.util.stream.Stream;
|
||||||
import org.joda.money.Money;
|
import org.joda.money.Money;
|
||||||
import org.joda.time.DateTime;
|
import org.joda.time.DateTime;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Disabled;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.params.ParameterizedTest;
|
||||||
|
import org.junit.jupiter.params.provider.Arguments;
|
||||||
|
import org.junit.jupiter.params.provider.MethodSource;
|
||||||
|
|
||||||
/** Unit tests for {@link DomainCheckFlow}. */
|
/** Unit tests for {@link DomainCheckFlow}. */
|
||||||
class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFlow, Domain> {
|
class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFlow, Domain> {
|
||||||
@@ -945,19 +951,23 @@ class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFlow, Dom
|
|||||||
runFlowAssertResponse(loadFile("domain_check_fee_response_default_token_v11.xml"));
|
runFlowAssertResponse(loadFile("domain_check_fee_response_default_token_v11.xml"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@ParameterizedTest
|
||||||
void testFeeExtension_v12() throws Exception {
|
@MethodSource("provideFeeTestParams")
|
||||||
|
void testFeeExtension_latest(String name, FeeFileLoader fileLoader) throws Exception {
|
||||||
persistActiveDomain("example1.tld");
|
persistActiveDomain("example1.tld");
|
||||||
setEppInput("domain_check_fee_v12.xml");
|
setEppInputXml(fileLoader.load(this, "domain_check_fee_v12.xml"));
|
||||||
runFlowAssertResponse(loadFile("domain_check_fee_response_v12.xml"));
|
runFlowAssertResponse(fileLoader.load(this, "domain_check_fee_response_v12.xml"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@ParameterizedTest
|
||||||
void testFeeExtension_defaultToken_v12() throws Exception {
|
@MethodSource("provideFeeTestParams")
|
||||||
|
void testFeeExtension_defaultToken_latest(String name, FeeFileLoader fileLoader)
|
||||||
|
throws Exception {
|
||||||
setUpDefaultToken();
|
setUpDefaultToken();
|
||||||
persistActiveDomain("example1.tld");
|
persistActiveDomain("example1.tld");
|
||||||
setEppInput("domain_check_fee_v12.xml", ImmutableMap.of("CURRENCY", "USD"));
|
setEppInputXml(
|
||||||
runFlowAssertResponse(loadFile("domain_check_fee_response_default_token_v12.xml"));
|
fileLoader.load(this, "domain_check_fee_v12.xml", ImmutableMap.of("CURRENCY", "USD")));
|
||||||
|
runFlowAssertResponse(fileLoader.load(this, "domain_check_fee_response_default_token_v12.xml"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -1007,14 +1017,18 @@ class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFlow, Dom
|
|||||||
|
|
||||||
// Version 11 cannot have multiple commands.
|
// Version 11 cannot have multiple commands.
|
||||||
|
|
||||||
@Test
|
@ParameterizedTest
|
||||||
void testFeeExtension_multipleCommands_v12() throws Exception {
|
@MethodSource("provideFeeTestParams")
|
||||||
setEppInput("domain_check_fee_multiple_commands_v12.xml");
|
void testFeeExtension_multipleCommands_latest(String name, FeeFileLoader loader)
|
||||||
runFlowAssertResponse(loadFile("domain_check_fee_multiple_commands_response_v12.xml"));
|
throws Exception {
|
||||||
|
setEppInputXml(loader.load(this, "domain_check_fee_multiple_commands_v12.xml"));
|
||||||
|
runFlowAssertResponse(loader.load(this, "domain_check_fee_multiple_commands_response_v12.xml"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@ParameterizedTest
|
||||||
void testFeeExtension_multipleCommands_tokenNotValidForSome_v12() throws Exception {
|
@MethodSource("provideFeeTestParams")
|
||||||
|
void testFeeExtension_multipleCommands_tokenNotValidForSome_latest(
|
||||||
|
String name, FeeFileLoader loader) throws Exception {
|
||||||
persistResource(
|
persistResource(
|
||||||
new AllocationToken.Builder()
|
new AllocationToken.Builder()
|
||||||
.setToken("abc123")
|
.setToken("abc123")
|
||||||
@@ -1022,19 +1036,23 @@ class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFlow, Dom
|
|||||||
.setAllowedEppActions(ImmutableSet.of(CommandName.CREATE, CommandName.TRANSFER))
|
.setAllowedEppActions(ImmutableSet.of(CommandName.CREATE, CommandName.TRANSFER))
|
||||||
.setDiscountFraction(0.1)
|
.setDiscountFraction(0.1)
|
||||||
.build());
|
.build());
|
||||||
setEppInput("domain_check_fee_multiple_commands_allocationtoken_v12.xml");
|
setEppInputXml(loader.load(this, "domain_check_fee_multiple_commands_allocationtoken_v12.xml"));
|
||||||
runFlowAssertResponse(
|
runFlowAssertResponse(
|
||||||
loadFile("domain_check_fee_multiple_commands_allocationtoken_response_v12.xml"));
|
loader.load(this, "domain_check_fee_multiple_commands_allocationtoken_response_v12.xml"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@ParameterizedTest
|
||||||
void testFeeExtension_multipleCommands_defaultTokenOnlyOnCreate_v12() throws Exception {
|
@MethodSource("provideFeeTestParams")
|
||||||
|
void testFeeExtension_multipleCommands_defaultTokenOnlyOnCreate_latest(
|
||||||
|
String name, FeeFileLoader loader) throws Exception {
|
||||||
setUpDefaultToken();
|
setUpDefaultToken();
|
||||||
setEppInput("domain_check_fee_multiple_commands_v12.xml");
|
setEppInputXml(loader.load(this, "domain_check_fee_multiple_commands_v12.xml"));
|
||||||
runFlowAssertResponse(
|
runFlowAssertResponse(
|
||||||
loadFile("domain_check_fee_multiple_commands_default_token_response_v12.xml"));
|
loader.load(this, "domain_check_fee_multiple_commands_default_token_response_v12.xml"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Disabled("TODO(b/454680236): broken test")
|
||||||
|
@Test
|
||||||
void testFeeExtension_defaultToken_notValidForAllLabels_v06() throws Exception {
|
void testFeeExtension_defaultToken_notValidForAllLabels_v06() throws Exception {
|
||||||
createTld("example");
|
createTld("example");
|
||||||
AllocationToken defaultToken =
|
AllocationToken defaultToken =
|
||||||
@@ -1057,6 +1075,8 @@ class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFlow, Dom
|
|||||||
loadFile("domain_check_fee_default_token_multiple_names_response_v06.xml"));
|
loadFile("domain_check_fee_default_token_multiple_names_response_v06.xml"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Disabled("TODO(b/454680236): broken")
|
||||||
|
@Test
|
||||||
void testFeeExtension_defaultToken_notValidForAllLabels_v11() throws Exception {
|
void testFeeExtension_defaultToken_notValidForAllLabels_v11() throws Exception {
|
||||||
createTld("example");
|
createTld("example");
|
||||||
AllocationToken defaultToken =
|
AllocationToken defaultToken =
|
||||||
@@ -1079,7 +1099,10 @@ class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFlow, Dom
|
|||||||
loadFile("domain_check_fee_default_token_multiple_names_response_v11.xml"));
|
loadFile("domain_check_fee_default_token_multiple_names_response_v11.xml"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void testFeeExtension_defaultToken_notValidForAllLabels_v12() throws Exception {
|
@Disabled("TODO(b/454680236): broken test")
|
||||||
|
@Test
|
||||||
|
void testFeeExtension_defaultToken_notValidForAllLabels_v12(String name, FeeFileLoader loader)
|
||||||
|
throws Exception {
|
||||||
createTld("example");
|
createTld("example");
|
||||||
AllocationToken defaultToken =
|
AllocationToken defaultToken =
|
||||||
persistResource(
|
persistResource(
|
||||||
@@ -1096,9 +1119,9 @@ class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFlow, Dom
|
|||||||
.asBuilder()
|
.asBuilder()
|
||||||
.setDefaultPromoTokens(ImmutableList.of(defaultToken.createVKey()))
|
.setDefaultPromoTokens(ImmutableList.of(defaultToken.createVKey()))
|
||||||
.build());
|
.build());
|
||||||
setEppInput("domain_check_fee_default_token_multiple_names_v12.xml");
|
setEppInputXml(loader.load(this, "domain_check_fee_default_token_multiple_names_v12.xml"));
|
||||||
runFlowAssertResponse(
|
runFlowAssertResponse(
|
||||||
loadFile("domain_check_fee_default_token_multiple_names_response_v12.xml"));
|
loader.load(this, "domain_check_fee_default_token_multiple_names_response_v12.xml"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Test the same as {@link #testFeeExtension_multipleCommands_v06} with premium labels. */
|
/** Test the same as {@link #testFeeExtension_multipleCommands_v06} with premium labels. */
|
||||||
@@ -1293,27 +1316,33 @@ class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFlow, Dom
|
|||||||
runFlowAssertResponse(loadFile("domain_check_fee_premium_response_v11_update.xml"));
|
runFlowAssertResponse(loadFile("domain_check_fee_premium_response_v11_update.xml"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@ParameterizedTest
|
||||||
void testFeeExtension_premiumLabels_v12() throws Exception {
|
@MethodSource("provideFeeTestParams")
|
||||||
|
void testFeeExtension_premiumLabels_latest(String name, FeeFileLoader loader) throws Exception {
|
||||||
createTld("example");
|
createTld("example");
|
||||||
setEppInput("domain_check_fee_premium_v12.xml");
|
setEppInputXml(loader.load(this, "domain_check_fee_premium_v12.xml"));
|
||||||
runFlowAssertResponse(loadFile("domain_check_fee_premium_response_v12.xml"));
|
runFlowAssertResponse(loader.load(this, "domain_check_fee_premium_response_v12.xml"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@ParameterizedTest
|
||||||
void testFeeExtension_premiumLabels_v12_specifiedPriceRenewal_renewPriceOnly() throws Exception {
|
@MethodSource("provideFeeTestParams")
|
||||||
|
void testFeeExtension_premiumLabels_v12_specifiedPriceRenewal_renewPriceOnly(
|
||||||
|
String name, FeeFileLoader loader) throws Exception {
|
||||||
createTld("example");
|
createTld("example");
|
||||||
persistBillingRecurrenceForDomain(
|
persistBillingRecurrenceForDomain(
|
||||||
persistActiveDomain("rich.example"), SPECIFIED, Money.of(USD, new BigDecimal("27.74")));
|
persistActiveDomain("rich.example"), SPECIFIED, Money.of(USD, new BigDecimal("27.74")));
|
||||||
setEppInput("domain_check_fee_premium_v12_renew_only.xml");
|
setEppInputXml(loader.load(this, "domain_check_fee_premium_v12_renew_only.xml"));
|
||||||
runFlowAssertResponse(
|
runFlowAssertResponse(
|
||||||
loadFile(
|
loader.load(
|
||||||
|
this,
|
||||||
"domain_check_fee_premium_response_v12_renew_only.xml",
|
"domain_check_fee_premium_response_v12_renew_only.xml",
|
||||||
ImmutableMap.of("RENEWPRICE", "27.74")));
|
ImmutableMap.of("RENEWPRICE", "27.74")));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@ParameterizedTest
|
||||||
void testFeeExtension_premiumLabels_doesNotApplyDefaultToken_v12() throws Exception {
|
@MethodSource("provideFeeTestParams")
|
||||||
|
void testFeeExtension_premiumLabels_doesNotApplyDefaultToken_latest(
|
||||||
|
String name, FeeFileLoader loader) throws Exception {
|
||||||
createTld("example");
|
createTld("example");
|
||||||
AllocationToken defaultToken =
|
AllocationToken defaultToken =
|
||||||
persistResource(
|
persistResource(
|
||||||
@@ -1330,16 +1359,19 @@ class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFlow, Dom
|
|||||||
.asBuilder()
|
.asBuilder()
|
||||||
.setDefaultPromoTokens(ImmutableList.of(defaultToken.createVKey()))
|
.setDefaultPromoTokens(ImmutableList.of(defaultToken.createVKey()))
|
||||||
.build());
|
.build());
|
||||||
setEppInput("domain_check_fee_premium_v12.xml");
|
setEppInputXml(loader.load(this, "domain_check_fee_premium_v12.xml"));
|
||||||
runFlowAssertResponse(loadFile("domain_check_fee_premium_response_v12.xml"));
|
runFlowAssertResponse(loader.load(this, "domain_check_fee_premium_response_v12.xml"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@ParameterizedTest
|
||||||
void testFeeExtension_premiumLabels_v12_withRenewalOnRestore() throws Exception {
|
@MethodSource("provideFeeTestParams")
|
||||||
|
void testFeeExtension_premiumLabels_v12_withRenewalOnRestore(String name, FeeFileLoader loader)
|
||||||
|
throws Exception {
|
||||||
createTld("example");
|
createTld("example");
|
||||||
setEppInput("domain_check_fee_premium_v12.xml");
|
setEppInputXml(loader.load(this, "domain_check_fee_premium_v12.xml"));
|
||||||
persistPendingDeleteDomain("rich.example");
|
persistPendingDeleteDomain("rich.example");
|
||||||
runFlowAssertResponse(loadFile("domain_check_fee_premium_response_v12_with_renewal.xml"));
|
runFlowAssertResponse(
|
||||||
|
loader.load(this, "domain_check_fee_premium_response_v12_with_renewal.xml"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -1450,20 +1482,23 @@ class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFlow, Dom
|
|||||||
loadFile("domain_check_fee_reserved_response_v11_restore_with_renewals.xml"));
|
loadFile("domain_check_fee_reserved_response_v11_restore_with_renewals.xml"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@ParameterizedTest
|
||||||
void testFeeExtension_reservedName_v12() throws Exception {
|
@MethodSource("provideFeeTestParams")
|
||||||
|
void testFeeExtension_reservedName_latest(String name, FeeFileLoader loader) throws Exception {
|
||||||
persistResource(
|
persistResource(
|
||||||
Tld.get("tld")
|
Tld.get("tld")
|
||||||
.asBuilder()
|
.asBuilder()
|
||||||
.setReservedLists(createReservedList())
|
.setReservedLists(createReservedList())
|
||||||
.setPremiumList(persistPremiumList("tld", USD, "premiumcollision,USD 70"))
|
.setPremiumList(persistPremiumList("tld", USD, "premiumcollision,USD 70"))
|
||||||
.build());
|
.build());
|
||||||
setEppInput("domain_check_fee_reserved_v12.xml");
|
setEppInputXml(loader.load(this, "domain_check_fee_reserved_v12.xml"));
|
||||||
runFlowAssertResponse(loadFile("domain_check_fee_reserved_response_v12.xml"));
|
runFlowAssertResponse(loader.load(this, "domain_check_fee_reserved_response_v12.xml"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@ParameterizedTest
|
||||||
void testFeeExtension_reservedName_restoreFeeWithDupes_v12() throws Exception {
|
@MethodSource("provideFeeTestParams")
|
||||||
|
void testFeeExtension_reservedName_restoreFeeWithDupes_latest(String name, FeeFileLoader loader)
|
||||||
|
throws Exception {
|
||||||
persistResource(
|
persistResource(
|
||||||
Tld.get("tld")
|
Tld.get("tld")
|
||||||
.asBuilder()
|
.asBuilder()
|
||||||
@@ -1471,9 +1506,9 @@ class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFlow, Dom
|
|||||||
.setPremiumList(persistPremiumList("tld", USD, "premiumcollision,USD 70"))
|
.setPremiumList(persistPremiumList("tld", USD, "premiumcollision,USD 70"))
|
||||||
.build());
|
.build());
|
||||||
// The domain needs to exist in order for it to be loaded to check for restore fee.
|
// The domain needs to exist in order for it to be loaded to check for restore fee.
|
||||||
setEppInput("domain_check_fee_reserved_dupes_v12.xml");
|
setEppInputXml(loader.load(this, "domain_check_fee_reserved_dupes_v12.xml"));
|
||||||
persistBillingRecurrenceForDomain(persistActiveDomain("allowedinsunrise.tld"), DEFAULT, null);
|
persistBillingRecurrenceForDomain(persistActiveDomain("allowedinsunrise.tld"), DEFAULT, null);
|
||||||
runFlowAssertResponse(loadFile("domain_check_fee_reserved_dupes_response_v12.xml"));
|
runFlowAssertResponse(loader.load(this, "domain_check_fee_reserved_dupes_response_v12.xml"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -1560,8 +1595,10 @@ class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFlow, Dom
|
|||||||
runFlowAssertResponse(loadFile("domain_check_fee_reserved_sunrise_response_v11_restore.xml"));
|
runFlowAssertResponse(loadFile("domain_check_fee_reserved_sunrise_response_v11_restore.xml"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@ParameterizedTest
|
||||||
void testFeeExtension_feesNotOmittedOnReservedNamesInSunrise_v12() throws Exception {
|
@MethodSource("provideFeeTestParams")
|
||||||
|
void testFeeExtension_feesNotOmittedOnReservedNamesInSunrise_latest(
|
||||||
|
String name, FeeFileLoader loader) throws Exception {
|
||||||
createTld("tld", START_DATE_SUNRISE);
|
createTld("tld", START_DATE_SUNRISE);
|
||||||
persistResource(
|
persistResource(
|
||||||
Tld.get("tld")
|
Tld.get("tld")
|
||||||
@@ -1569,8 +1606,8 @@ class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFlow, Dom
|
|||||||
.setReservedLists(createReservedList())
|
.setReservedLists(createReservedList())
|
||||||
.setPremiumList(persistPremiumList("tld", USD, "premiumcollision,USD 70"))
|
.setPremiumList(persistPremiumList("tld", USD, "premiumcollision,USD 70"))
|
||||||
.build());
|
.build());
|
||||||
setEppInput("domain_check_fee_reserved_v12.xml");
|
setEppInputXml(loader.load(this, "domain_check_fee_reserved_v12.xml"));
|
||||||
runFlowAssertResponse(loadFile("domain_check_fee_reserved_sunrise_response_v12.xml"));
|
runFlowAssertResponse(loader.load(this, "domain_check_fee_reserved_sunrise_response_v12.xml"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -1587,9 +1624,10 @@ class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFlow, Dom
|
|||||||
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@ParameterizedTest
|
||||||
void testFeeExtension_wrongCurrency_v12() {
|
@MethodSource("provideFeeTestParams")
|
||||||
setEppInput("domain_check_fee_euro_v12.xml");
|
void testFeeExtension_wrongCurrency_latest(String name, FeeFileLoader loader) {
|
||||||
|
setEppInputXml(loader.load(this, "domain_check_fee_euro_v12.xml"));
|
||||||
EppException thrown = assertThrows(CurrencyUnitMismatchException.class, this::runFlow);
|
EppException thrown = assertThrows(CurrencyUnitMismatchException.class, this::runFlow);
|
||||||
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
||||||
}
|
}
|
||||||
@@ -1615,9 +1653,10 @@ class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFlow, Dom
|
|||||||
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@ParameterizedTest
|
||||||
void testFeeExtension_periodNotInYears_v12() {
|
@MethodSource("provideFeeTestParams")
|
||||||
setEppInput("domain_check_fee_bad_period_v12.xml");
|
void testFeeExtension_periodNotInYears_latest(String name, FeeFileLoader loader) {
|
||||||
|
setEppInputXml(loader.load(this, "domain_check_fee_bad_period_v12.xml"));
|
||||||
EppException thrown = assertThrows(BadPeriodUnitException.class, this::runFlow);
|
EppException thrown = assertThrows(BadPeriodUnitException.class, this::runFlow);
|
||||||
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
||||||
}
|
}
|
||||||
@@ -1636,9 +1675,10 @@ class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFlow, Dom
|
|||||||
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@ParameterizedTest
|
||||||
void testFeeExtension_commandWithPhase_v12() {
|
@MethodSource("provideFeeTestParams")
|
||||||
setEppInput("domain_check_fee_command_phase_v12.xml");
|
void testFeeExtension_commandWithPhase_latest(String name, FeeFileLoader loader) {
|
||||||
|
setEppInputXml(loader.load(this, "domain_check_fee_command_phase_v12.xml"));
|
||||||
EppException thrown = assertThrows(FeeChecksDontSupportPhasesException.class, this::runFlow);
|
EppException thrown = assertThrows(FeeChecksDontSupportPhasesException.class, this::runFlow);
|
||||||
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
||||||
}
|
}
|
||||||
@@ -1657,9 +1697,10 @@ class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFlow, Dom
|
|||||||
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@ParameterizedTest
|
||||||
void testFeeExtension_commandSubphase_v12() {
|
@MethodSource("provideFeeTestParams")
|
||||||
setEppInput("domain_check_fee_command_subphase_v12.xml");
|
void testFeeExtension_commandSubphase_latest(String name, FeeFileLoader loader) {
|
||||||
|
setEppInputXml(loader.load(this, "domain_check_fee_command_subphase_v12.xml"));
|
||||||
EppException thrown = assertThrows(FeeChecksDontSupportPhasesException.class, this::runFlow);
|
EppException thrown = assertThrows(FeeChecksDontSupportPhasesException.class, this::runFlow);
|
||||||
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
||||||
}
|
}
|
||||||
@@ -1687,9 +1728,10 @@ class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFlow, Dom
|
|||||||
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@ParameterizedTest
|
||||||
void testFeeExtension_multiyearRestore_v12() {
|
@MethodSource("provideFeeTestParams")
|
||||||
setEppInput("domain_check_fee_multiyear_restore_v12.xml");
|
void testFeeExtension_multiyearRestore_latest(String name, FeeFileLoader loader) {
|
||||||
|
setEppInputXml(loader.load(this, "domain_check_fee_multiyear_restore_v12.xml"));
|
||||||
EppException thrown = assertThrows(RestoresAreAlwaysForOneYearException.class, this::runFlow);
|
EppException thrown = assertThrows(RestoresAreAlwaysForOneYearException.class, this::runFlow);
|
||||||
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
||||||
}
|
}
|
||||||
@@ -1708,9 +1750,10 @@ class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFlow, Dom
|
|||||||
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@ParameterizedTest
|
||||||
void testFeeExtension_multiyearTransfer_v12() {
|
@MethodSource("provideFeeTestParams")
|
||||||
setEppInput("domain_check_fee_multiyear_transfer_v12.xml");
|
void testFeeExtension_multiyearTransfer_latest(String name, FeeFileLoader loader) {
|
||||||
|
setEppInputXml(loader.load(this, "domain_check_fee_multiyear_transfer_v12.xml"));
|
||||||
EppException thrown = assertThrows(TransfersAreAlwaysForOneYearException.class, this::runFlow);
|
EppException thrown = assertThrows(TransfersAreAlwaysForOneYearException.class, this::runFlow);
|
||||||
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
||||||
}
|
}
|
||||||
@@ -1729,9 +1772,10 @@ class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFlow, Dom
|
|||||||
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@ParameterizedTest
|
||||||
void testFeeExtension_unknownCommand_v12() {
|
@MethodSource("provideFeeTestParams")
|
||||||
setEppInput("domain_check_fee_unknown_command_v12.xml");
|
void testFeeExtension_unknownCommand_latest(String name, FeeFileLoader loader) {
|
||||||
|
setEppInputXml(loader.load(this, "domain_check_fee_unknown_command_v12.xml"));
|
||||||
EppException thrown = assertThrows(UnknownFeeCommandException.class, this::runFlow);
|
EppException thrown = assertThrows(UnknownFeeCommandException.class, this::runFlow);
|
||||||
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
||||||
}
|
}
|
||||||
@@ -1750,32 +1794,60 @@ class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFlow, Dom
|
|||||||
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@ParameterizedTest
|
||||||
void testFeeExtension_invalidCommand_v12() {
|
@MethodSource("provideFeeTestParams")
|
||||||
setEppInput("domain_check_fee_invalid_command_v12.xml");
|
void testFeeExtension_invalidCommand_latest(String name, FeeFileLoader loader) {
|
||||||
|
setEppInputXml(loader.load(this, "domain_check_fee_invalid_command_v12.xml"));
|
||||||
EppException thrown = assertThrows(UnknownFeeCommandException.class, this::runFlow);
|
EppException thrown = assertThrows(UnknownFeeCommandException.class, this::runFlow);
|
||||||
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
assertAboutEppExceptions().that(thrown).marshalsToXml();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testSuccess_eapFeeCheck_v06() throws Exception {
|
void testSuccess_eapFeeCheck_v06() throws Exception {
|
||||||
runEapFeeCheckTest("domain_check_fee_v06.xml", "domain_check_eap_fee_response_v06.xml");
|
runEapFeeCheckTest(
|
||||||
|
"domain_check_fee_v06.xml",
|
||||||
|
"domain_check_eap_fee_response_v06.xml",
|
||||||
|
new FeeFileLoader(/* isFeeStdV1= */ false));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testSuccess_eapFeeCheck_v11() throws Exception {
|
void testSuccess_eapFeeCheck_v11() throws Exception {
|
||||||
runEapFeeCheckTest("domain_check_fee_v11.xml", "domain_check_eap_fee_response_v11.xml");
|
runEapFeeCheckTest(
|
||||||
|
"domain_check_fee_v11.xml",
|
||||||
|
"domain_check_eap_fee_response_v11.xml",
|
||||||
|
new FeeFileLoader(/* isFeeStdV1= */ false));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testSuccess_eapFeeCheck_v12() throws Exception {
|
void testSuccess_eapFeeCheck_v12() throws Exception {
|
||||||
runEapFeeCheckTest("domain_check_fee_v12.xml", "domain_check_eap_fee_response_v12.xml");
|
runEapFeeCheckTest(
|
||||||
|
"domain_check_fee_v12.xml",
|
||||||
|
"domain_check_eap_fee_response_v12.xml",
|
||||||
|
new FeeFileLoader(/* isFeeStdV1= */ false));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testSuccess_eapFeeCheck_date_v12() throws Exception {
|
void testSuccess_eapFeeCheck_date_v12() throws Exception {
|
||||||
runEapFeeCheckTest(
|
runEapFeeCheckTest(
|
||||||
"domain_check_fee_date_v12.xml", "domain_check_eap_fee_response_date_v12.xml");
|
"domain_check_fee_date_v12.xml",
|
||||||
|
"domain_check_eap_fee_response_date_v12.xml",
|
||||||
|
new FeeFileLoader(/* isFeeStdV1= */ false));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testSuccess_eapFeeCheck_std_v1() throws Exception {
|
||||||
|
runEapFeeCheckTest(
|
||||||
|
"domain_check_fee_v12.xml",
|
||||||
|
"domain_check_eap_fee_response_v12.xml",
|
||||||
|
new FeeFileLoader(/* isFeeStdV1= */ true));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testSuccess_eapFeeCheck_date_std_v1() throws Exception {
|
||||||
|
runEapFeeCheckTest(
|
||||||
|
"domain_check_fee_date_v12.xml",
|
||||||
|
"domain_check_eap_fee_response_date_v12.xml",
|
||||||
|
new FeeFileLoader(/* isFeeStdV1= */ true));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -1862,7 +1934,15 @@ class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFlow, Dom
|
|||||||
existingDomain.asBuilder().setAutorenewBillingEvent(renewEvent.createVKey()).build());
|
existingDomain.asBuilder().setAutorenewBillingEvent(renewEvent.createVKey()).build());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void runEapFeeCheckTest(String inputFile, String outputFile) throws Exception {
|
private void runEapFeeCheckTest(String inputFile, String outputFile, FeeFileLoader loader)
|
||||||
|
throws Exception {
|
||||||
|
runEapFeeCheckTestWithXmlInputOutput(
|
||||||
|
loader.load(this, inputFile, ImmutableMap.of("CURRENCY", "USD")),
|
||||||
|
loader.load(this, outputFile));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void runEapFeeCheckTestWithXmlInputOutput(String inputXml, String outputXml)
|
||||||
|
throws Exception {
|
||||||
clock.setTo(DateTime.parse("2010-01-01T10:00:00Z"));
|
clock.setTo(DateTime.parse("2010-01-01T10:00:00Z"));
|
||||||
persistActiveDomain("example1.tld");
|
persistActiveDomain("example1.tld");
|
||||||
persistResource(
|
persistResource(
|
||||||
@@ -1876,8 +1956,8 @@ class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFlow, Dom
|
|||||||
.put(clock.nowUtc().plusDays(2), Money.of(USD, 0))
|
.put(clock.nowUtc().plusDays(2), Money.of(USD, 0))
|
||||||
.build())
|
.build())
|
||||||
.build());
|
.build());
|
||||||
setEppInput(inputFile, ImmutableMap.of("CURRENCY", "USD"));
|
setEppInputXml(inputXml);
|
||||||
runFlowAssertResponse(loadFile(outputFile));
|
runFlowAssertResponse(outputXml);
|
||||||
}
|
}
|
||||||
|
|
||||||
private AllocationToken setUpDefaultToken() {
|
private AllocationToken setUpDefaultToken() {
|
||||||
@@ -1902,4 +1982,29 @@ class DomainCheckFlowTest extends ResourceCheckFlowTestCase<DomainCheckFlow, Dom
|
|||||||
.build());
|
.build());
|
||||||
return defaultToken;
|
return defaultToken;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static class FeeFileLoader {
|
||||||
|
private final boolean isFeeStdV1;
|
||||||
|
|
||||||
|
FeeFileLoader(boolean isFeeStdV1) {
|
||||||
|
this.isFeeStdV1 = isFeeStdV1;
|
||||||
|
}
|
||||||
|
|
||||||
|
String load(DomainCheckFlowTest test, String filename) {
|
||||||
|
return isFeeStdV1 ? test.loadFeeV12FileAsStdV1(filename) : test.loadFile(filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
String load(DomainCheckFlowTest test, String filename, Map<String, String> substitutions) {
|
||||||
|
return isFeeStdV1
|
||||||
|
? test.loadFeeV12FileAsStdV1(filename, substitutions)
|
||||||
|
: test.loadFile(filename, substitutions);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
private static Stream<Arguments> provideFeeTestParams() {
|
||||||
|
return Stream.of(
|
||||||
|
Arguments.of("fee_12", new FeeFileLoader(false)),
|
||||||
|
Arguments.of("fee_std_v1", new FeeFileLoader(true)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -399,17 +399,20 @@ class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow, Domain
|
|||||||
void testSuccess_addGracePeriodCredit_v06() throws Exception {
|
void testSuccess_addGracePeriodCredit_v06() throws Exception {
|
||||||
removeServiceExtensionUri(ServiceExtension.FEE_0_11.getUri());
|
removeServiceExtensionUri(ServiceExtension.FEE_0_11.getUri());
|
||||||
removeServiceExtensionUri(ServiceExtension.FEE_0_12.getUri());
|
removeServiceExtensionUri(ServiceExtension.FEE_0_12.getUri());
|
||||||
|
removeServiceExtensionUri(ServiceExtension.FEE_1_00.getUri());
|
||||||
doAddGracePeriodDeleteTest(GracePeriodStatus.ADD, "domain_delete_response_fee.xml", FEE_06_MAP);
|
doAddGracePeriodDeleteTest(GracePeriodStatus.ADD, "domain_delete_response_fee.xml", FEE_06_MAP);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testSuccess_addGracePeriodCredit_v11() throws Exception {
|
void testSuccess_addGracePeriodCredit_v11() throws Exception {
|
||||||
removeServiceExtensionUri(ServiceExtension.FEE_0_12.getUri());
|
removeServiceExtensionUri(ServiceExtension.FEE_0_12.getUri());
|
||||||
|
removeServiceExtensionUri(ServiceExtension.FEE_1_00.getUri());
|
||||||
doAddGracePeriodDeleteTest(GracePeriodStatus.ADD, "domain_delete_response_fee.xml", FEE_11_MAP);
|
doAddGracePeriodDeleteTest(GracePeriodStatus.ADD, "domain_delete_response_fee.xml", FEE_11_MAP);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testSuccess_addGracePeriodCredit_v12() throws Exception {
|
void testSuccess_addGracePeriodCredit_v12() throws Exception {
|
||||||
|
removeServiceExtensionUri(ServiceExtension.FEE_1_00.getUri());
|
||||||
doAddGracePeriodDeleteTest(GracePeriodStatus.ADD, "domain_delete_response_fee.xml", FEE_12_MAP);
|
doAddGracePeriodDeleteTest(GracePeriodStatus.ADD, "domain_delete_response_fee.xml", FEE_12_MAP);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -497,17 +500,20 @@ class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow, Domain
|
|||||||
void testSuccess_renewGracePeriodCredit_v06() throws Exception {
|
void testSuccess_renewGracePeriodCredit_v06() throws Exception {
|
||||||
removeServiceExtensionUri(ServiceExtension.FEE_0_11.getUri());
|
removeServiceExtensionUri(ServiceExtension.FEE_0_11.getUri());
|
||||||
removeServiceExtensionUri(ServiceExtension.FEE_0_12.getUri());
|
removeServiceExtensionUri(ServiceExtension.FEE_0_12.getUri());
|
||||||
|
removeServiceExtensionUri(ServiceExtension.FEE_1_00.getUri());
|
||||||
doSuccessfulTest_noAddGracePeriod("domain_delete_response_pending_fee.xml", FEE_06_MAP);
|
doSuccessfulTest_noAddGracePeriod("domain_delete_response_pending_fee.xml", FEE_06_MAP);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testSuccess_renewGracePeriodCredit_v11() throws Exception {
|
void testSuccess_renewGracePeriodCredit_v11() throws Exception {
|
||||||
removeServiceExtensionUri(ServiceExtension.FEE_0_12.getUri());
|
removeServiceExtensionUri(ServiceExtension.FEE_0_12.getUri());
|
||||||
|
removeServiceExtensionUri(ServiceExtension.FEE_1_00.getUri());
|
||||||
doSuccessfulTest_noAddGracePeriod("domain_delete_response_pending_fee.xml", FEE_11_MAP);
|
doSuccessfulTest_noAddGracePeriod("domain_delete_response_pending_fee.xml", FEE_11_MAP);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testSuccess_renewGracePeriodCredit_v12() throws Exception {
|
void testSuccess_renewGracePeriodCredit_v12() throws Exception {
|
||||||
|
removeServiceExtensionUri(ServiceExtension.FEE_1_00.getUri());
|
||||||
doSuccessfulTest_noAddGracePeriod("domain_delete_response_pending_fee.xml", FEE_12_MAP);
|
doSuccessfulTest_noAddGracePeriod("domain_delete_response_pending_fee.xml", FEE_12_MAP);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -553,6 +559,7 @@ class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow, Domain
|
|||||||
void testSuccess_autoRenewGracePeriod_v06() throws Exception {
|
void testSuccess_autoRenewGracePeriod_v06() throws Exception {
|
||||||
removeServiceExtensionUri(ServiceExtension.FEE_0_11.getUri());
|
removeServiceExtensionUri(ServiceExtension.FEE_0_11.getUri());
|
||||||
removeServiceExtensionUri(ServiceExtension.FEE_0_12.getUri());
|
removeServiceExtensionUri(ServiceExtension.FEE_0_12.getUri());
|
||||||
|
removeServiceExtensionUri(ServiceExtension.FEE_1_00.getUri());
|
||||||
setUpAutorenewGracePeriod();
|
setUpAutorenewGracePeriod();
|
||||||
clock.advanceOneMilli();
|
clock.advanceOneMilli();
|
||||||
runFlowAssertResponse(loadFile("domain_delete_response_autorenew_fee.xml", FEE_06_MAP));
|
runFlowAssertResponse(loadFile("domain_delete_response_autorenew_fee.xml", FEE_06_MAP));
|
||||||
@@ -561,6 +568,7 @@ class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow, Domain
|
|||||||
@Test
|
@Test
|
||||||
void testSuccess_autoRenewGracePeriod_v11() throws Exception {
|
void testSuccess_autoRenewGracePeriod_v11() throws Exception {
|
||||||
removeServiceExtensionUri(ServiceExtension.FEE_0_12.getUri());
|
removeServiceExtensionUri(ServiceExtension.FEE_0_12.getUri());
|
||||||
|
removeServiceExtensionUri(ServiceExtension.FEE_1_00.getUri());
|
||||||
setUpAutorenewGracePeriod();
|
setUpAutorenewGracePeriod();
|
||||||
clock.advanceOneMilli();
|
clock.advanceOneMilli();
|
||||||
runFlowAssertResponse(loadFile("domain_delete_response_autorenew_fee.xml", FEE_11_MAP));
|
runFlowAssertResponse(loadFile("domain_delete_response_autorenew_fee.xml", FEE_11_MAP));
|
||||||
@@ -568,6 +576,7 @@ class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow, Domain
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testSuccess_autoRenewGracePeriod_v12() throws Exception {
|
void testSuccess_autoRenewGracePeriod_v12() throws Exception {
|
||||||
|
removeServiceExtensionUri(ServiceExtension.FEE_1_00.getUri());
|
||||||
setUpAutorenewGracePeriod();
|
setUpAutorenewGracePeriod();
|
||||||
clock.advanceOneMilli();
|
clock.advanceOneMilli();
|
||||||
runFlowAssertResponse(loadFile("domain_delete_response_autorenew_fee.xml", FEE_12_MAP));
|
runFlowAssertResponse(loadFile("domain_delete_response_autorenew_fee.xml", FEE_12_MAP));
|
||||||
@@ -577,6 +586,7 @@ class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow, Domain
|
|||||||
void testSuccess_autoRenewGracePeriod_priceChanges_v06() throws Exception {
|
void testSuccess_autoRenewGracePeriod_priceChanges_v06() throws Exception {
|
||||||
removeServiceExtensionUri(ServiceExtension.FEE_0_11.getUri());
|
removeServiceExtensionUri(ServiceExtension.FEE_0_11.getUri());
|
||||||
removeServiceExtensionUri(ServiceExtension.FEE_0_12.getUri());
|
removeServiceExtensionUri(ServiceExtension.FEE_0_12.getUri());
|
||||||
|
removeServiceExtensionUri(ServiceExtension.FEE_1_00.getUri());
|
||||||
persistResource(
|
persistResource(
|
||||||
Tld.get("tld")
|
Tld.get("tld")
|
||||||
.asBuilder()
|
.asBuilder()
|
||||||
@@ -595,6 +605,7 @@ class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow, Domain
|
|||||||
@Test
|
@Test
|
||||||
void testSuccess_autoRenewGracePeriod_priceChanges_v11() throws Exception {
|
void testSuccess_autoRenewGracePeriod_priceChanges_v11() throws Exception {
|
||||||
removeServiceExtensionUri(ServiceExtension.FEE_0_12.getUri());
|
removeServiceExtensionUri(ServiceExtension.FEE_0_12.getUri());
|
||||||
|
removeServiceExtensionUri(ServiceExtension.FEE_1_00.getUri());
|
||||||
persistResource(
|
persistResource(
|
||||||
Tld.get("tld")
|
Tld.get("tld")
|
||||||
.asBuilder()
|
.asBuilder()
|
||||||
@@ -612,6 +623,7 @@ class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow, Domain
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testSuccess_autoRenewGracePeriod_priceChanges_v12() throws Exception {
|
void testSuccess_autoRenewGracePeriod_priceChanges_v12() throws Exception {
|
||||||
|
removeServiceExtensionUri(ServiceExtension.FEE_1_00.getUri());
|
||||||
persistResource(
|
persistResource(
|
||||||
Tld.get("tld")
|
Tld.get("tld")
|
||||||
.asBuilder()
|
.asBuilder()
|
||||||
@@ -1288,6 +1300,7 @@ class DomainDeleteFlowTest extends ResourceFlowTestCase<DomainDeleteFlow, Domain
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testSuccess_freeCreation_deletionDuringGracePeriod() throws Exception {
|
void testSuccess_freeCreation_deletionDuringGracePeriod() throws Exception {
|
||||||
|
removeServiceExtensionUri(ServiceExtension.FEE_1_00.getUri());
|
||||||
// Deletion during the add grace period should still work even if the credit is 0
|
// Deletion during the add grace period should still work even if the credit is 0
|
||||||
setUpSuccessfulTest();
|
setUpSuccessfulTest();
|
||||||
BillingEvent graceBillingEvent =
|
BillingEvent graceBillingEvent =
|
||||||
|
|||||||
@@ -36,6 +36,10 @@ public class EppLoader {
|
|||||||
this.eppXml = loadFile(context.getClass(), eppXmlFilename, substitutions);
|
this.eppXml = loadFile(context.getClass(), eppXmlFilename, substitutions);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public EppLoader(String eppXml) {
|
||||||
|
this.eppXml = eppXml;
|
||||||
|
}
|
||||||
|
|
||||||
public EppInput getEpp() throws EppException {
|
public EppInput getEpp() throws EppException {
|
||||||
/*
|
/*
|
||||||
* TODO(b/120837374): we shouldn't use EppException in non-Flow tests. Find a way to use {@link
|
* TODO(b/120837374): we shouldn't use EppException in non-Flow tests. Find a way to use {@link
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
<rde:deposit xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" xmlns:rdeContact="urn:ietf:params:xml:ns:rdeContact-1.0" xmlns:launch="urn:ietf:params:xml:ns:launch-1.0" xmlns:rdeEppParams="urn:ietf:params:xml:ns:rdeEppParams-1.0" xmlns:rdeNotification="urn:ietf:params:xml:ns:rdeNotification-1.0" xmlns:host="urn:ietf:params:xml:ns:host-1.0" xmlns:rdeIDN="urn:ietf:params:xml:ns:rdeIDN-1.0" xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0" xmlns:smd="urn:ietf:params:xml:ns:signedMark-1.0" xmlns:rdeHost="urn:ietf:params:xml:ns:rdeHost-1.0" xmlns:rdeReport="urn:ietf:params:xml:ns:rdeReport-1.0" xmlns:fee11="urn:ietf:params:xml:ns:fee-0.11" xmlns:fee12="urn:ietf:params:xml:ns:fee-0.12" xmlns:iirdea="urn:ietf:params:xml:ns:iirdea-1.0" xmlns:rdeHeader="urn:ietf:params:xml:ns:rdeHeader-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:rdeDomain="urn:ietf:params:xml:ns:rdeDomain-1.0" xmlns:epp="urn:ietf:params:xml:ns:epp-1.0" xmlns:rdeNNDN="urn:ietf:params:xml:ns:rdeNNDN-1.0" xmlns:rdeRegistrar="urn:ietf:params:xml:ns:rdeRegistrar-1.0" xmlns:rgp="urn:ietf:params:xml:ns:rgp-1.0" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:rde="urn:ietf:params:xml:ns:rde-1.0" xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" xmlns:mark="urn:ietf:params:xml:ns:mark-1.0" xmlns:rdePolicy="urn:ietf:params:xml:ns:rdePolicy-1.0" xmlns:fee06="urn:ietf:params:xml:ns:fee-0.6" type="FULL" id="AAAABXDKZ6WAA"%RESEND%>
|
<rde:deposit xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" xmlns:rdeContact="urn:ietf:params:xml:ns:rdeContact-1.0" xmlns:launch="urn:ietf:params:xml:ns:launch-1.0" xmlns:rdeEppParams="urn:ietf:params:xml:ns:rdeEppParams-1.0" xmlns:rdeNotification="urn:ietf:params:xml:ns:rdeNotification-1.0" xmlns:host="urn:ietf:params:xml:ns:host-1.0" xmlns:rdeIDN="urn:ietf:params:xml:ns:rdeIDN-1.0" xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0" xmlns:smd="urn:ietf:params:xml:ns:signedMark-1.0" xmlns:rdeHost="urn:ietf:params:xml:ns:rdeHost-1.0" xmlns:rdeReport="urn:ietf:params:xml:ns:rdeReport-1.0" xmlns:fee11="urn:ietf:params:xml:ns:fee-0.11" xmlns:fee12="urn:ietf:params:xml:ns:fee-0.12" xmlns:iirdea="urn:ietf:params:xml:ns:iirdea-1.0" xmlns:rdeHeader="urn:ietf:params:xml:ns:rdeHeader-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:rdeDomain="urn:ietf:params:xml:ns:rdeDomain-1.0" xmlns:epp="urn:ietf:params:xml:ns:epp-1.0" xmlns:rdeNNDN="urn:ietf:params:xml:ns:rdeNNDN-1.0" xmlns:rdeRegistrar="urn:ietf:params:xml:ns:rdeRegistrar-1.0" xmlns:rgp="urn:ietf:params:xml:ns:rgp-1.0" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:rde="urn:ietf:params:xml:ns:rde-1.0" xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" xmlns:mark="urn:ietf:params:xml:ns:mark-1.0" xmlns:rdePolicy="urn:ietf:params:xml:ns:rdePolicy-1.0" xmlns:fee_1_00="urn:ietf:params:xml:ns:epp:fee-1.0" xmlns:fee06="urn:ietf:params:xml:ns:fee-0.6" type="FULL" id="AAAABXDKZ6WAA"%RESEND%>
|
||||||
<rde:watermark>2000-01-01T00:00:00Z</rde:watermark>
|
<rde:watermark>2000-01-01T00:00:00Z</rde:watermark>
|
||||||
<rde:rdeMenu>
|
<rde:rdeMenu>
|
||||||
<rde:version>1.0</rde:version>
|
<rde:version>1.0</rde:version>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
<rde:deposit xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" xmlns:rdeContact="urn:ietf:params:xml:ns:rdeContact-1.0" xmlns:launch="urn:ietf:params:xml:ns:launch-1.0" xmlns:rdeEppParams="urn:ietf:params:xml:ns:rdeEppParams-1.0" xmlns:rdeNotification="urn:ietf:params:xml:ns:rdeNotification-1.0" xmlns:host="urn:ietf:params:xml:ns:host-1.0" xmlns:rdeIDN="urn:ietf:params:xml:ns:rdeIDN-1.0" xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0" xmlns:smd="urn:ietf:params:xml:ns:signedMark-1.0" xmlns:rdeHost="urn:ietf:params:xml:ns:rdeHost-1.0" xmlns:rdeReport="urn:ietf:params:xml:ns:rdeReport-1.0" xmlns:fee11="urn:ietf:params:xml:ns:fee-0.11" xmlns:fee12="urn:ietf:params:xml:ns:fee-0.12" xmlns:iirdea="urn:ietf:params:xml:ns:iirdea-1.0" xmlns:rdeHeader="urn:ietf:params:xml:ns:rdeHeader-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:rdeDomain="urn:ietf:params:xml:ns:rdeDomain-1.0" xmlns:epp="urn:ietf:params:xml:ns:epp-1.0" xmlns:rdeNNDN="urn:ietf:params:xml:ns:rdeNNDN-1.0" xmlns:rdeRegistrar="urn:ietf:params:xml:ns:rdeRegistrar-1.0" xmlns:rgp="urn:ietf:params:xml:ns:rgp-1.0" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:rde="urn:ietf:params:xml:ns:rde-1.0" xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" xmlns:mark="urn:ietf:params:xml:ns:mark-1.0" xmlns:rdePolicy="urn:ietf:params:xml:ns:rdePolicy-1.0" xmlns:fee06="urn:ietf:params:xml:ns:fee-0.6" type="FULL" id="AAAABXDKZ6WAA"%RESEND%>
|
<rde:deposit xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" xmlns:rdeContact="urn:ietf:params:xml:ns:rdeContact-1.0" xmlns:launch="urn:ietf:params:xml:ns:launch-1.0" xmlns:rdeEppParams="urn:ietf:params:xml:ns:rdeEppParams-1.0" xmlns:rdeNotification="urn:ietf:params:xml:ns:rdeNotification-1.0" xmlns:host="urn:ietf:params:xml:ns:host-1.0" xmlns:rdeIDN="urn:ietf:params:xml:ns:rdeIDN-1.0" xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0" xmlns:smd="urn:ietf:params:xml:ns:signedMark-1.0" xmlns:rdeHost="urn:ietf:params:xml:ns:rdeHost-1.0" xmlns:rdeReport="urn:ietf:params:xml:ns:rdeReport-1.0" xmlns:fee11="urn:ietf:params:xml:ns:fee-0.11" xmlns:fee12="urn:ietf:params:xml:ns:fee-0.12" xmlns:iirdea="urn:ietf:params:xml:ns:iirdea-1.0" xmlns:rdeHeader="urn:ietf:params:xml:ns:rdeHeader-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:rdeDomain="urn:ietf:params:xml:ns:rdeDomain-1.0" xmlns:epp="urn:ietf:params:xml:ns:epp-1.0" xmlns:rdeNNDN="urn:ietf:params:xml:ns:rdeNNDN-1.0" xmlns:rdeRegistrar="urn:ietf:params:xml:ns:rdeRegistrar-1.0" xmlns:rgp="urn:ietf:params:xml:ns:rgp-1.0" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:rde="urn:ietf:params:xml:ns:rde-1.0" xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" xmlns:mark="urn:ietf:params:xml:ns:mark-1.0" xmlns:rdePolicy="urn:ietf:params:xml:ns:rdePolicy-1.0" xmlns:fee_1_00="urn:ietf:params:xml:ns:epp:fee-1.0" xmlns:fee06="urn:ietf:params:xml:ns:fee-0.6" type="FULL" id="AAAABXDKZ6WAA"%RESEND%>
|
||||||
<rde:watermark>2000-01-01T00:00:00Z</rde:watermark>
|
<rde:watermark>2000-01-01T00:00:00Z</rde:watermark>
|
||||||
<rde:rdeMenu>
|
<rde:rdeMenu>
|
||||||
<rde:version>1.0</rde:version>
|
<rde:version>1.0</rde:version>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
<rdeReport:report xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" xmlns:rdeContact="urn:ietf:params:xml:ns:rdeContact-1.0" xmlns:launch="urn:ietf:params:xml:ns:launch-1.0" xmlns:rdeEppParams="urn:ietf:params:xml:ns:rdeEppParams-1.0" xmlns:rdeNotification="urn:ietf:params:xml:ns:rdeNotification-1.0" xmlns:host="urn:ietf:params:xml:ns:host-1.0" xmlns:rdeIDN="urn:ietf:params:xml:ns:rdeIDN-1.0" xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0" xmlns:smd="urn:ietf:params:xml:ns:signedMark-1.0" xmlns:rdeHost="urn:ietf:params:xml:ns:rdeHost-1.0" xmlns:rdeReport="urn:ietf:params:xml:ns:rdeReport-1.0" xmlns:fee11="urn:ietf:params:xml:ns:fee-0.11" xmlns:fee12="urn:ietf:params:xml:ns:fee-0.12" xmlns:iirdea="urn:ietf:params:xml:ns:iirdea-1.0" xmlns:rdeHeader="urn:ietf:params:xml:ns:rdeHeader-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:rdeDomain="urn:ietf:params:xml:ns:rdeDomain-1.0" xmlns:epp="urn:ietf:params:xml:ns:epp-1.0" xmlns:rdeNNDN="urn:ietf:params:xml:ns:rdeNNDN-1.0" xmlns:rdeRegistrar="urn:ietf:params:xml:ns:rdeRegistrar-1.0" xmlns:rgp="urn:ietf:params:xml:ns:rgp-1.0" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:rde="urn:ietf:params:xml:ns:rde-1.0" xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" xmlns:mark="urn:ietf:params:xml:ns:mark-1.0" xmlns:rdePolicy="urn:ietf:params:xml:ns:rdePolicy-1.0" xmlns:fee06="urn:ietf:params:xml:ns:fee-0.6">
|
<rdeReport:report xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" xmlns:rdeContact="urn:ietf:params:xml:ns:rdeContact-1.0" xmlns:launch="urn:ietf:params:xml:ns:launch-1.0" xmlns:rdeEppParams="urn:ietf:params:xml:ns:rdeEppParams-1.0" xmlns:rdeNotification="urn:ietf:params:xml:ns:rdeNotification-1.0" xmlns:host="urn:ietf:params:xml:ns:host-1.0" xmlns:rdeIDN="urn:ietf:params:xml:ns:rdeIDN-1.0" xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0" xmlns:smd="urn:ietf:params:xml:ns:signedMark-1.0" xmlns:rdeHost="urn:ietf:params:xml:ns:rdeHost-1.0" xmlns:rdeReport="urn:ietf:params:xml:ns:rdeReport-1.0" xmlns:fee11="urn:ietf:params:xml:ns:fee-0.11" xmlns:fee12="urn:ietf:params:xml:ns:fee-0.12" xmlns:iirdea="urn:ietf:params:xml:ns:iirdea-1.0" xmlns:rdeHeader="urn:ietf:params:xml:ns:rdeHeader-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:rdeDomain="urn:ietf:params:xml:ns:rdeDomain-1.0" xmlns:epp="urn:ietf:params:xml:ns:epp-1.0" xmlns:rdeNNDN="urn:ietf:params:xml:ns:rdeNNDN-1.0" xmlns:rdeRegistrar="urn:ietf:params:xml:ns:rdeRegistrar-1.0" xmlns:rgp="urn:ietf:params:xml:ns:rgp-1.0" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:rde="urn:ietf:params:xml:ns:rde-1.0" xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" xmlns:mark="urn:ietf:params:xml:ns:mark-1.0" xmlns:rdePolicy="urn:ietf:params:xml:ns:rdePolicy-1.0" xmlns:fee_1_00="urn:ietf:params:xml:ns:epp:fee-1.0" xmlns:fee06="urn:ietf:params:xml:ns:fee-0.6">
|
||||||
<rdeReport:id>AAAABXDKZ6WAA</rdeReport:id>
|
<rdeReport:id>AAAABXDKZ6WAA</rdeReport:id>
|
||||||
<rdeReport:version>1</rdeReport:version>
|
<rdeReport:version>1</rdeReport:version>
|
||||||
<rdeReport:rydeSpecEscrow>draft-arias-noguchi-registry-data-escrow-06</rdeReport:rydeSpecEscrow>
|
<rdeReport:rydeSpecEscrow>draft-arias-noguchi-registry-data-escrow-06</rdeReport:rydeSpecEscrow>
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
<epp xmlns:launch="urn:ietf:params:xml:ns:launch-1.0" xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" xmlns:host="urn:ietf:params:xml:ns:host-1.0" xmlns:fee11="urn:ietf:params:xml:ns:fee-0.11" xmlns:fee12="urn:ietf:params:xml:ns:fee-0.12" xmlns:fee="urn:ietf:params:xml:ns:fee-0.6" xmlns:rgp="urn:ietf:params:xml:ns:rgp-1.0" xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
|
<epp xmlns:launch="urn:ietf:params:xml:ns:launch-1.0" xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" xmlns:host="urn:ietf:params:xml:ns:host-1.0" xmlns:fee11="urn:ietf:params:xml:ns:fee-0.11" xmlns:fee12="urn:ietf:params:xml:ns:fee-0.12" xmlns:fee_1_00="urn:ietf:params:xml:ns:epp:fee-1.0" xmlns:fee="urn:ietf:params:xml:ns:fee-0.6" xmlns:rgp="urn:ietf:params:xml:ns:rgp-1.0" xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
|
||||||
<response>
|
<response>
|
||||||
<result code="1000">
|
<result code="1000">
|
||||||
<msg>Command completed successfully</msg>
|
<msg>Command completed successfully</msg>
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
<epp xmlns:launch="urn:ietf:params:xml:ns:launch-1.0" xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" xmlns:host="urn:ietf:params:xml:ns:host-1.0" xmlns:fee11="urn:ietf:params:xml:ns:fee-0.11" xmlns:fee12="urn:ietf:params:xml:ns:fee-0.12" xmlns:fee="urn:ietf:params:xml:ns:fee-0.6" xmlns:rgp="urn:ietf:params:xml:ns:rgp-1.0" xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
|
<epp xmlns:launch="urn:ietf:params:xml:ns:launch-1.0" xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" xmlns:host="urn:ietf:params:xml:ns:host-1.0" xmlns:fee11="urn:ietf:params:xml:ns:fee-0.11" xmlns:fee12="urn:ietf:params:xml:ns:fee-0.12" xmlns:fee_1_00="urn:ietf:params:xml:ns:epp:fee-1.0" xmlns:fee="urn:ietf:params:xml:ns:fee-0.6" xmlns:rgp="urn:ietf:params:xml:ns:rgp-1.0" xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
|
||||||
<response>
|
<response>
|
||||||
<result code="1000">
|
<result code="1000">
|
||||||
<msg>Command completed successfully</msg>
|
<msg>Command completed successfully</msg>
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
<epp xmlns:launch="urn:ietf:params:xml:ns:launch-1.0" xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" xmlns:host="urn:ietf:params:xml:ns:host-1.0" xmlns:fee11="urn:ietf:params:xml:ns:fee-0.11" xmlns:fee12="urn:ietf:params:xml:ns:fee-0.12" xmlns:fee="urn:ietf:params:xml:ns:fee-0.6" xmlns:rgp="urn:ietf:params:xml:ns:rgp-1.0" xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
|
<epp xmlns:launch="urn:ietf:params:xml:ns:launch-1.0" xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" xmlns:host="urn:ietf:params:xml:ns:host-1.0" xmlns:fee11="urn:ietf:params:xml:ns:fee-0.11" xmlns:fee12="urn:ietf:params:xml:ns:fee-0.12" xmlns:fee_1_00="urn:ietf:params:xml:ns:epp:fee-1.0" xmlns:fee="urn:ietf:params:xml:ns:fee-0.6" xmlns:rgp="urn:ietf:params:xml:ns:rgp-1.0" xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
|
||||||
<response>
|
<response>
|
||||||
<result code="1000">
|
<result code="1000">
|
||||||
<msg>Command completed successfully</msg>
|
<msg>Command completed successfully</msg>
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
<epp xmlns:launch="urn:ietf:params:xml:ns:launch-1.0" xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" xmlns:host="urn:ietf:params:xml:ns:host-1.0" xmlns:fee11="urn:ietf:params:xml:ns:fee-0.11" xmlns:fee12="urn:ietf:params:xml:ns:fee-0.12" xmlns:fee="urn:ietf:params:xml:ns:fee-0.6" xmlns:rgp="urn:ietf:params:xml:ns:rgp-1.0" xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
|
<epp xmlns:launch="urn:ietf:params:xml:ns:launch-1.0" xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" xmlns:host="urn:ietf:params:xml:ns:host-1.0" xmlns:fee11="urn:ietf:params:xml:ns:fee-0.11" xmlns:fee12="urn:ietf:params:xml:ns:fee-0.12" xmlns:fee_1_00="urn:ietf:params:xml:ns:epp:fee-1.0" xmlns:fee="urn:ietf:params:xml:ns:fee-0.6" xmlns:rgp="urn:ietf:params:xml:ns:rgp-1.0" xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:contact="urn:ietf:params:xml:ns:contact-1.0">
|
||||||
<response>
|
<response>
|
||||||
<result code="1000">
|
<result code="1000">
|
||||||
<msg>Command completed successfully</msg>
|
<msg>Command completed successfully</msg>
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
<epp xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" xmlns:fee="urn:ietf:params:xml:ns:fee-0.6" xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:rgp="urn:ietf:params:xml:ns:rgp-1.0" xmlns:fee11="urn:ietf:params:xml:ns:fee-0.11" xmlns:fee12="urn:ietf:params:xml:ns:fee-0.12" xmlns:launch="urn:ietf:params:xml:ns:launch-1.0" xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" xmlns:host="urn:ietf:params:xml:ns:host-1.0">
|
<epp xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" xmlns:fee="urn:ietf:params:xml:ns:fee-0.6" xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:rgp="urn:ietf:params:xml:ns:rgp-1.0" xmlns:fee11="urn:ietf:params:xml:ns:fee-0.11" xmlns:fee12="urn:ietf:params:xml:ns:fee-0.12" xmlns:fee_1_00="urn:ietf:params:xml:ns:epp:fee-1.0" xmlns:launch="urn:ietf:params:xml:ns:launch-1.0" xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" xmlns:host="urn:ietf:params:xml:ns:host-1.0">
|
||||||
<response>
|
<response>
|
||||||
<result code="1000">
|
<result code="1000">
|
||||||
<msg>Command completed successfully</msg>
|
<msg>Command completed successfully</msg>
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
<epp xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" xmlns:fee="urn:ietf:params:xml:ns:fee-0.6" xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:rgp="urn:ietf:params:xml:ns:rgp-1.0" xmlns:bulkToken="urn:google:params:xml:ns:bulkToken-1.0" xmlns:fee11="urn:ietf:params:xml:ns:fee-0.11" xmlns:fee12="urn:ietf:params:xml:ns:fee-0.12" xmlns:launch="urn:ietf:params:xml:ns:launch-1.0" xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" xmlns:host="urn:ietf:params:xml:ns:host-1.0">
|
<epp xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" xmlns:fee="urn:ietf:params:xml:ns:fee-0.6" xmlns:fee_1_00="urn:ietf:params:xml:ns:epp:fee-1.0" xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:rgp="urn:ietf:params:xml:ns:rgp-1.0" xmlns:bulkToken="urn:google:params:xml:ns:bulkToken-1.0" xmlns:fee11="urn:ietf:params:xml:ns:fee-0.11" xmlns:fee12="urn:ietf:params:xml:ns:fee-0.12" xmlns:launch="urn:ietf:params:xml:ns:launch-1.0" xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" xmlns:host="urn:ietf:params:xml:ns:host-1.0">
|
||||||
<response>
|
<response>
|
||||||
<result code="2306">
|
<result code="2306">
|
||||||
<msg>Domain label is blocked by the Brand Safety Alliance</msg>
|
<msg>Domain label is blocked by the Brand Safety Alliance</msg>
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
<extURI>urn:ietf:params:xml:ns:fee-0.6</extURI>
|
<extURI>urn:ietf:params:xml:ns:fee-0.6</extURI>
|
||||||
<extURI>urn:ietf:params:xml:ns:fee-0.11</extURI>
|
<extURI>urn:ietf:params:xml:ns:fee-0.11</extURI>
|
||||||
<extURI>urn:ietf:params:xml:ns:fee-0.12</extURI>
|
<extURI>urn:ietf:params:xml:ns:fee-0.12</extURI>
|
||||||
|
<extURI>urn:ietf:params:xml:ns:epp:fee-1.0</extURI>
|
||||||
</svcExtension>
|
</svcExtension>
|
||||||
</svcMenu>
|
</svcMenu>
|
||||||
<dcp>
|
<dcp>
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
<epp xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" xmlns:fee="urn:ietf:params:xml:ns:fee-0.6" xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:rgp="urn:ietf:params:xml:ns:rgp-1.0" xmlns:fee11="urn:ietf:params:xml:ns:fee-0.11" xmlns:fee12="urn:ietf:params:xml:ns:fee-0.12" xmlns:launch="urn:ietf:params:xml:ns:launch-1.0" xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" xmlns:host="urn:ietf:params:xml:ns:host-1.0">
|
<epp xmlns:domain="urn:ietf:params:xml:ns:domain-1.0" xmlns:contact="urn:ietf:params:xml:ns:contact-1.0" xmlns:fee="urn:ietf:params:xml:ns:fee-0.6" xmlns="urn:ietf:params:xml:ns:epp-1.0" xmlns:rgp="urn:ietf:params:xml:ns:rgp-1.0" xmlns:fee11="urn:ietf:params:xml:ns:fee-0.11" xmlns:fee12="urn:ietf:params:xml:ns:fee-0.12" xmlns:fee_1_00="urn:ietf:params:xml:ns:epp:fee-1.0" xmlns:launch="urn:ietf:params:xml:ns:launch-1.0" xmlns:secDNS="urn:ietf:params:xml:ns:secDNS-1.1" xmlns:host="urn:ietf:params:xml:ns:host-1.0">
|
||||||
<response>
|
<response>
|
||||||
<result code="1301">
|
<result code="1301">
|
||||||
<msg>Command completed successfully; ack to dequeue</msg>
|
<msg>Command completed successfully; ack to dequeue</msg>
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
<extURI>urn:ietf:params:xml:ns:fee-0.6</extURI>
|
<extURI>urn:ietf:params:xml:ns:fee-0.6</extURI>
|
||||||
<extURI>urn:ietf:params:xml:ns:fee-0.11</extURI>
|
<extURI>urn:ietf:params:xml:ns:fee-0.11</extURI>
|
||||||
<extURI>urn:ietf:params:xml:ns:fee-0.12</extURI>
|
<extURI>urn:ietf:params:xml:ns:fee-0.12</extURI>
|
||||||
|
<extURI>urn:ietf:params:xml:ns:epp:fee-1.0</extURI>
|
||||||
</svcExtension>
|
</svcExtension>
|
||||||
</svcMenu>
|
</svcMenu>
|
||||||
<dcp>
|
<dcp>
|
||||||
|
|||||||
Reference in New Issue
Block a user