1
0
mirror of https://github.com/google/nomulus synced 2026-05-16 21:01:44 +00:00

Add rdeEppParams to RDE output (#3041)

We mostly had the xsd code for this already, we just never actually used
it and added it to the output. Note that I had to make some changes to
allow the expected format (where some of the elements are empty).
This commit is contained in:
gbrodman
2026-05-13 10:38:07 -04:00
committed by GitHub
parent b8f14fef8d
commit b33c2f4874
8 changed files with 148 additions and 21 deletions

View File

@@ -57,6 +57,7 @@ This document outlines foundational mandates, architectural patterns, and projec
- **FakeClock and Sleeper:** Use `FakeClock` and `Sleeper` for any logic involving timeouts, delays, or expiration.
- **Empirical Reproduction:** Before fixing a bug, always create a test case that reproduces the failure.
- **Base Classes:** Leverage `CommandTestCase`, `EppToolCommandTestCase`, etc., to reduce boilerplate and ensure consistent setup (e.g., clock initialization).
- **Gradle Test Patterns:** When running tests to investigate fixes in the "core" directory, try to first use the "standardTest" Gradle task. It is faster than the "test" task, which includes the "fragileTest" task. Only run the full "test" task after "standardTest" succeeds.
### 6. Project Dependencies
- **Common Module:** When using `Clock` or other core utilities in a new or separate module (like `load-testing`), ensure `implementation project(':common')` is added to the module's `build.gradle`.

View File

@@ -220,6 +220,9 @@ public class RdeIO {
}
}
output.write(marshaller.marshalRdeEppParams());
counter.increment(RdeResourceType.EPP_PARAMS);
// Output XML that says how many resources were emitted.
header = counter.makeHeader(tld, mode);
output.write(marshaller.marshalOrDie(new XjcRdeHeaderElement(header)));

View File

@@ -20,15 +20,26 @@ import static java.nio.charset.StandardCharsets.UTF_8;
import com.google.common.flogger.FluentLogger;
import google.registry.model.ImmutableObject;
import google.registry.model.domain.Domain;
import google.registry.model.eppcommon.ProtocolDefinition;
import google.registry.model.host.Host;
import google.registry.model.rde.RdeMode;
import google.registry.model.registrar.Registrar;
import google.registry.tldconfig.idn.IdnTable;
import google.registry.xjc.XjcXmlTransformer;
import google.registry.xjc.epp.XjcEppDcpAccessType;
import google.registry.xjc.epp.XjcEppDcpOursType;
import google.registry.xjc.epp.XjcEppDcpPurposeType;
import google.registry.xjc.epp.XjcEppDcpRecipientType;
import google.registry.xjc.epp.XjcEppDcpRetentionType;
import google.registry.xjc.epp.XjcEppDcpStatementType;
import google.registry.xjc.epp.XjcEppDcpType;
import google.registry.xjc.epp.XjcEppExtURIType;
import google.registry.xjc.rde.XjcRdeContentsType;
import google.registry.xjc.rde.XjcRdeDeposit;
import google.registry.xjc.rde.XjcRdeDepositTypeType;
import google.registry.xjc.rde.XjcRdeMenuType;
import google.registry.xjc.rdeeppparams.XjcRdeEppParams;
import google.registry.xjc.rdeeppparams.XjcRdeEppParamsElement;
import google.registry.xjc.rdeidn.XjcRdeIdn;
import google.registry.xjc.rdeidn.XjcRdeIdnElement;
import google.registry.xjc.rdepolicy.XjcRdePolicy;
@@ -151,6 +162,43 @@ public final class RdeMarshaller implements Serializable {
return marshalOrDie(new XjcRdeIdnElement(bean));
}
public String marshalRdeEppParams() {
XjcRdeEppParams bean = new XjcRdeEppParams();
bean.getVersions().add("1.0");
bean.getLangs().add("en");
bean.getObjURIs().add(RdeResourceType.DOMAIN.getUri());
bean.getObjURIs().add(RdeResourceType.HOST.getUri());
XjcEppExtURIType serviceExtensions = new XjcEppExtURIType();
serviceExtensions.getExtURIs().addAll(ProtocolDefinition.getVisibleServiceExtensionUris());
bean.setSvcExtension(serviceExtensions);
XjcEppDcpType dcpType = new XjcEppDcpType();
XjcEppDcpAccessType accessType = new XjcEppDcpAccessType();
accessType.setAll(new XjcEppDcpAccessType.All());
dcpType.setAccess(accessType);
XjcEppDcpStatementType statementType = new XjcEppDcpStatementType();
XjcEppDcpPurposeType purposeType = new XjcEppDcpPurposeType();
purposeType.setAdmin(new XjcEppDcpPurposeType.Admin());
purposeType.setProv(new XjcEppDcpPurposeType.Prov());
statementType.setPurpose(purposeType);
XjcEppDcpRecipientType recipientType = new XjcEppDcpRecipientType();
recipientType.getOurs().add(new XjcEppDcpOursType());
recipientType.setPublic(new XjcEppDcpRecipientType.Public());
statementType.setRecipient(recipientType);
XjcEppDcpRetentionType retentionType = new XjcEppDcpRetentionType();
retentionType.setStated(new XjcEppDcpRetentionType.Stated());
statementType.setRetention(retentionType);
dcpType.getStatements().add(statementType);
bean.setDcp(dcpType);
return marshalOrDie(new XjcRdeEppParamsElement(bean));
}
private DepositFragment marshalResource(
RdeResourceType type, ImmutableObject resource, JAXBElement<?> element) {
String xml = "";

View File

@@ -29,7 +29,8 @@ public enum RdeResourceType {
HOST("urn:ietf:params:xml:ns:rdeHost-1.0", EnumSet.of(FULL)),
REGISTRAR("urn:ietf:params:xml:ns:rdeRegistrar-1.0", EnumSet.of(FULL, THIN)),
IDN("urn:ietf:params:xml:ns:rdeIDN-1.0", EnumSet.of(FULL)),
HEADER("urn:ietf:params:xml:ns:rdeHeader-1.0", EnumSet.of(FULL, THIN));
HEADER("urn:ietf:params:xml:ns:rdeHeader-1.0", EnumSet.of(FULL, THIN)),
EPP_PARAMS("urn:ietf:params:xml:ns:rdeEppParams-1.0", EnumSet.of(FULL, THIN));
private final String uri;
private final ImmutableSet<RdeMode> modes;

View File

@@ -91,12 +91,12 @@ Data Collection Policy types.
<complexType name="dcpAccessType">
<choice>
<element name="all"/>
<element name="none"/>
<element name="null"/>
<element name="other"/>
<element name="personal"/>
<element name="personalAndOther"/>
<element name="all"><complexType/></element>
<element name="none"><complexType/></element>
<element name="null"><complexType/></element>
<element name="other"><complexType/></element>
<element name="personal"><complexType/></element>
<element name="personalAndOther"><complexType/></element>
</choice>
</complexType>
@@ -111,28 +111,29 @@ Data Collection Policy types.
<complexType name="dcpPurposeType">
<sequence>
<element name="admin"
minOccurs="0"/>
minOccurs="0"><complexType/></element>
<element name="contact"
minOccurs="0"/>
minOccurs="0"><complexType/></element>
<element name="other"
minOccurs="0"/>
minOccurs="0"><complexType/></element>
<element name="prov"
minOccurs="0"/>
minOccurs="0"><complexType/></element>
</sequence>
</complexType>
<complexType name="dcpRecipientType">
<sequence>
<element name="other"
minOccurs="0"/>
minOccurs="0"><complexType/></element>
<element name="ours" type="epp:dcpOursType"
minOccurs="0" maxOccurs="unbounded"/>
minOccurs="0" maxOccurs="unbounded"/>
<element name="public"
minOccurs="0"/>
minOccurs="0"><complexType/></element>
<element name="same"
minOccurs="0"/>
minOccurs="0"><complexType/></element>
<element name="unrelated"
minOccurs="0"/>
minOccurs="0"><complexType/></element>
</sequence>
</complexType>
@@ -152,11 +153,11 @@ Data Collection Policy types.
<complexType name="dcpRetentionType">
<choice>
<element name="business"/>
<element name="indefinite"/>
<element name="legal"/>
<element name="none"/>
<element name="stated"/>
<element name="business"><complexType/></element>
<element name="indefinite"><complexType/></element>
<element name="legal"><complexType/></element>
<element name="none"><complexType/></element>
<element name="stated"><complexType/></element>
</choice>
</complexType>

View File

@@ -4,6 +4,7 @@
<rde:rdeMenu>
<rde:version>1.0</rde:version>
<rde:objURI>urn:ietf:params:xml:ns:rdeDomain-1.0</rde:objURI>
<rde:objURI>urn:ietf:params:xml:ns:rdeEppParams-1.0</rde:objURI>
<rde:objURI>urn:ietf:params:xml:ns:rdeHeader-1.0</rde:objURI>
<rde:objURI>urn:ietf:params:xml:ns:rdeRegistrar-1.0</rde:objURI>
</rde:rdeMenu>
@@ -11,10 +12,45 @@
<rdeDomain:domain/>
<rdeRegistrar:registrar/>
<rdeEppParams:eppParams>
<rdeEppParams:version>1.0</rdeEppParams:version>
<rdeEppParams:lang>en</rdeEppParams:lang>
<rdeEppParams:objURI>urn:ietf:params:xml:ns:rdeDomain-1.0</rdeEppParams:objURI>
<rdeEppParams:objURI>urn:ietf:params:xml:ns:rdeHost-1.0</rdeEppParams:objURI>
<rdeEppParams:svcExtension>
<epp:extURI>urn:ietf:params:xml:ns:launch-1.0</epp:extURI>
<epp:extURI>urn:ietf:params:xml:ns:rgp-1.0</epp:extURI>
<epp:extURI>urn:ietf:params:xml:ns:secDNS-1.1</epp:extURI>
<epp:extURI>urn:ietf:params:xml:ns:fee-0.6</epp:extURI>
<epp:extURI>urn:ietf:params:xml:ns:fee-0.11</epp:extURI>
<epp:extURI>urn:ietf:params:xml:ns:fee-0.12</epp:extURI>
<epp:extURI>urn:ietf:params:xml:ns:epp:fee-1.0</epp:extURI>
</rdeEppParams:svcExtension>
<rdeEppParams:dcp>
<epp:access>
<epp:all/>
</epp:access>
<epp:statement>
<epp:purpose>
<epp:admin/>
<epp:prov/>
</epp:purpose>
<epp:recipient>
<epp:ours/>
<epp:public/>
</epp:recipient>
<epp:retention>
<epp:stated/>
</epp:retention>
</epp:statement>
</rdeEppParams:dcp>
</rdeEppParams:eppParams>
<rdeHeader:header>
<rdeHeader:tld>soy</rdeHeader:tld>
<rdeHeader:count uri="urn:ietf:params:xml:ns:rdeDomain-1.0">1</rdeHeader:count>
<rdeHeader:count uri="urn:ietf:params:xml:ns:rdeRegistrar-1.0">1</rdeHeader:count>
<rdeHeader:count uri="urn:ietf:params:xml:ns:rdeEppParams-1.0">1</rdeHeader:count>
</rdeHeader:header>
</rde:contents>

View File

@@ -4,6 +4,7 @@
<rde:rdeMenu>
<rde:version>1.0</rde:version>
<rde:objURI>urn:ietf:params:xml:ns:rdeDomain-1.0</rde:objURI>
<rde:objURI>urn:ietf:params:xml:ns:rdeEppParams-1.0</rde:objURI>
<rde:objURI>urn:ietf:params:xml:ns:rdeHeader-1.0</rde:objURI>
<rde:objURI>urn:ietf:params:xml:ns:rdeHost-1.0</rde:objURI>
<rde:objURI>urn:ietf:params:xml:ns:rdeIDN-1.0</rde:objURI>
@@ -34,12 +35,47 @@
<rdeIDN:urlPolicy>https://www.registry.google/about/policies/domainabuse/</rdeIDN:urlPolicy>
</rdeIDN:idnTableRef>
<rdeEppParams:eppParams>
<rdeEppParams:version>1.0</rdeEppParams:version>
<rdeEppParams:lang>en</rdeEppParams:lang>
<rdeEppParams:objURI>urn:ietf:params:xml:ns:rdeDomain-1.0</rdeEppParams:objURI>
<rdeEppParams:objURI>urn:ietf:params:xml:ns:rdeHost-1.0</rdeEppParams:objURI>
<rdeEppParams:svcExtension>
<epp:extURI>urn:ietf:params:xml:ns:launch-1.0</epp:extURI>
<epp:extURI>urn:ietf:params:xml:ns:rgp-1.0</epp:extURI>
<epp:extURI>urn:ietf:params:xml:ns:secDNS-1.1</epp:extURI>
<epp:extURI>urn:ietf:params:xml:ns:fee-0.6</epp:extURI>
<epp:extURI>urn:ietf:params:xml:ns:fee-0.11</epp:extURI>
<epp:extURI>urn:ietf:params:xml:ns:fee-0.12</epp:extURI>
<epp:extURI>urn:ietf:params:xml:ns:epp:fee-1.0</epp:extURI>
</rdeEppParams:svcExtension>
<rdeEppParams:dcp>
<epp:access>
<epp:all/>
</epp:access>
<epp:statement>
<epp:purpose>
<epp:admin/>
<epp:prov/>
</epp:purpose>
<epp:recipient>
<epp:ours/>
<epp:public/>
</epp:recipient>
<epp:retention>
<epp:stated/>
</epp:retention>
</epp:statement>
</rdeEppParams:dcp>
</rdeEppParams:eppParams>
<rdeHeader:header>
<rdeHeader:tld>soy</rdeHeader:tld>
<rdeHeader:count uri="urn:ietf:params:xml:ns:rdeDomain-1.0">1</rdeHeader:count>
<rdeHeader:count uri="urn:ietf:params:xml:ns:rdeHost-1.0">1</rdeHeader:count>
<rdeHeader:count uri="urn:ietf:params:xml:ns:rdeRegistrar-1.0">1</rdeHeader:count>
<rdeHeader:count uri="urn:ietf:params:xml:ns:rdeIDN-1.0">4</rdeHeader:count>
<rdeHeader:count uri="urn:ietf:params:xml:ns:rdeEppParams-1.0">1</rdeHeader:count>
</rdeHeader:header>
</rde:contents>

View File

@@ -14,5 +14,6 @@
<rdeHeader:count uri="urn:ietf:params:xml:ns:rdeHost-1.0">1</rdeHeader:count>
<rdeHeader:count uri="urn:ietf:params:xml:ns:rdeRegistrar-1.0">1</rdeHeader:count>
<rdeHeader:count uri="urn:ietf:params:xml:ns:rdeIDN-1.0">4</rdeHeader:count>
<rdeHeader:count uri="urn:ietf:params:xml:ns:rdeEppParams-1.0">1</rdeHeader:count>
</rdeHeader:header>
</rdeReport:report>