Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions GEMINI.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`.
Expand Down
3 changes: 3 additions & 0 deletions core/src/main/java/google/registry/beam/rde/RdeIO.java
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,9 @@ public void processElement(
}
}

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)));
Expand Down
48 changes: 48 additions & 0 deletions core/src/main/java/google/registry/rde/RdeMarshaller.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,26 @@
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;
Expand Down Expand Up @@ -151,6 +162,43 @@ public String marshalIdn(IdnTable idn) {
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 = "";
Expand Down
3 changes: 2 additions & 1 deletion core/src/main/java/google/registry/rde/RdeResourceType.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
41 changes: 21 additions & 20 deletions core/src/main/java/google/registry/xml/xsd/epp.xsd
Original file line number Diff line number Diff line change
Expand Up @@ -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>

Expand All @@ -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>

Expand All @@ -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>

Expand Down
36 changes: 36 additions & 0 deletions core/src/test/resources/google/registry/beam/rde/reducer_brda.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,53 @@
<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>
<rde:contents>
<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>
Expand Down
36 changes: 36 additions & 0 deletions core/src/test/resources/google/registry/beam/rde/reducer_rde.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down Expand Up @@ -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>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Loading