Skip to content

Commit b33c2f4

Browse files
authored
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).
1 parent b8f14fe commit b33c2f4

8 files changed

Lines changed: 148 additions & 21 deletions

File tree

GEMINI.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ This document outlines foundational mandates, architectural patterns, and projec
5757
- **FakeClock and Sleeper:** Use `FakeClock` and `Sleeper` for any logic involving timeouts, delays, or expiration.
5858
- **Empirical Reproduction:** Before fixing a bug, always create a test case that reproduces the failure.
5959
- **Base Classes:** Leverage `CommandTestCase`, `EppToolCommandTestCase`, etc., to reduce boilerplate and ensure consistent setup (e.g., clock initialization).
60+
- **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.
6061

6162
### 6. Project Dependencies
6263
- **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`.

core/src/main/java/google/registry/beam/rde/RdeIO.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,9 @@ public void processElement(
220220
}
221221
}
222222

223+
output.write(marshaller.marshalRdeEppParams());
224+
counter.increment(RdeResourceType.EPP_PARAMS);
225+
223226
// Output XML that says how many resources were emitted.
224227
header = counter.makeHeader(tld, mode);
225228
output.write(marshaller.marshalOrDie(new XjcRdeHeaderElement(header)));

core/src/main/java/google/registry/rde/RdeMarshaller.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,26 @@
2020
import com.google.common.flogger.FluentLogger;
2121
import google.registry.model.ImmutableObject;
2222
import google.registry.model.domain.Domain;
23+
import google.registry.model.eppcommon.ProtocolDefinition;
2324
import google.registry.model.host.Host;
2425
import google.registry.model.rde.RdeMode;
2526
import google.registry.model.registrar.Registrar;
2627
import google.registry.tldconfig.idn.IdnTable;
2728
import google.registry.xjc.XjcXmlTransformer;
29+
import google.registry.xjc.epp.XjcEppDcpAccessType;
30+
import google.registry.xjc.epp.XjcEppDcpOursType;
31+
import google.registry.xjc.epp.XjcEppDcpPurposeType;
32+
import google.registry.xjc.epp.XjcEppDcpRecipientType;
33+
import google.registry.xjc.epp.XjcEppDcpRetentionType;
34+
import google.registry.xjc.epp.XjcEppDcpStatementType;
35+
import google.registry.xjc.epp.XjcEppDcpType;
36+
import google.registry.xjc.epp.XjcEppExtURIType;
2837
import google.registry.xjc.rde.XjcRdeContentsType;
2938
import google.registry.xjc.rde.XjcRdeDeposit;
3039
import google.registry.xjc.rde.XjcRdeDepositTypeType;
3140
import google.registry.xjc.rde.XjcRdeMenuType;
41+
import google.registry.xjc.rdeeppparams.XjcRdeEppParams;
42+
import google.registry.xjc.rdeeppparams.XjcRdeEppParamsElement;
3243
import google.registry.xjc.rdeidn.XjcRdeIdn;
3344
import google.registry.xjc.rdeidn.XjcRdeIdnElement;
3445
import google.registry.xjc.rdepolicy.XjcRdePolicy;
@@ -151,6 +162,43 @@ public String marshalIdn(IdnTable idn) {
151162
return marshalOrDie(new XjcRdeIdnElement(bean));
152163
}
153164

165+
public String marshalRdeEppParams() {
166+
XjcRdeEppParams bean = new XjcRdeEppParams();
167+
bean.getVersions().add("1.0");
168+
bean.getLangs().add("en");
169+
bean.getObjURIs().add(RdeResourceType.DOMAIN.getUri());
170+
bean.getObjURIs().add(RdeResourceType.HOST.getUri());
171+
172+
XjcEppExtURIType serviceExtensions = new XjcEppExtURIType();
173+
serviceExtensions.getExtURIs().addAll(ProtocolDefinition.getVisibleServiceExtensionUris());
174+
bean.setSvcExtension(serviceExtensions);
175+
176+
XjcEppDcpType dcpType = new XjcEppDcpType();
177+
XjcEppDcpAccessType accessType = new XjcEppDcpAccessType();
178+
accessType.setAll(new XjcEppDcpAccessType.All());
179+
dcpType.setAccess(accessType);
180+
181+
XjcEppDcpStatementType statementType = new XjcEppDcpStatementType();
182+
183+
XjcEppDcpPurposeType purposeType = new XjcEppDcpPurposeType();
184+
purposeType.setAdmin(new XjcEppDcpPurposeType.Admin());
185+
purposeType.setProv(new XjcEppDcpPurposeType.Prov());
186+
statementType.setPurpose(purposeType);
187+
188+
XjcEppDcpRecipientType recipientType = new XjcEppDcpRecipientType();
189+
recipientType.getOurs().add(new XjcEppDcpOursType());
190+
recipientType.setPublic(new XjcEppDcpRecipientType.Public());
191+
statementType.setRecipient(recipientType);
192+
193+
XjcEppDcpRetentionType retentionType = new XjcEppDcpRetentionType();
194+
retentionType.setStated(new XjcEppDcpRetentionType.Stated());
195+
statementType.setRetention(retentionType);
196+
197+
dcpType.getStatements().add(statementType);
198+
bean.setDcp(dcpType);
199+
return marshalOrDie(new XjcRdeEppParamsElement(bean));
200+
}
201+
154202
private DepositFragment marshalResource(
155203
RdeResourceType type, ImmutableObject resource, JAXBElement<?> element) {
156204
String xml = "";

core/src/main/java/google/registry/rde/RdeResourceType.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ public enum RdeResourceType {
2929
HOST("urn:ietf:params:xml:ns:rdeHost-1.0", EnumSet.of(FULL)),
3030
REGISTRAR("urn:ietf:params:xml:ns:rdeRegistrar-1.0", EnumSet.of(FULL, THIN)),
3131
IDN("urn:ietf:params:xml:ns:rdeIDN-1.0", EnumSet.of(FULL)),
32-
HEADER("urn:ietf:params:xml:ns:rdeHeader-1.0", EnumSet.of(FULL, THIN));
32+
HEADER("urn:ietf:params:xml:ns:rdeHeader-1.0", EnumSet.of(FULL, THIN)),
33+
EPP_PARAMS("urn:ietf:params:xml:ns:rdeEppParams-1.0", EnumSet.of(FULL, THIN));
3334

3435
private final String uri;
3536
private final ImmutableSet<RdeMode> modes;

core/src/main/java/google/registry/xml/xsd/epp.xsd

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,12 @@ Data Collection Policy types.
9191

9292
<complexType name="dcpAccessType">
9393
<choice>
94-
<element name="all"/>
95-
<element name="none"/>
96-
<element name="null"/>
97-
<element name="other"/>
98-
<element name="personal"/>
99-
<element name="personalAndOther"/>
94+
<element name="all"><complexType/></element>
95+
<element name="none"><complexType/></element>
96+
<element name="null"><complexType/></element>
97+
<element name="other"><complexType/></element>
98+
<element name="personal"><complexType/></element>
99+
<element name="personalAndOther"><complexType/></element>
100100
</choice>
101101
</complexType>
102102

@@ -111,28 +111,29 @@ Data Collection Policy types.
111111
<complexType name="dcpPurposeType">
112112
<sequence>
113113
<element name="admin"
114-
minOccurs="0"/>
114+
minOccurs="0"><complexType/></element>
115115
<element name="contact"
116-
minOccurs="0"/>
116+
minOccurs="0"><complexType/></element>
117117
<element name="other"
118-
minOccurs="0"/>
118+
minOccurs="0"><complexType/></element>
119119
<element name="prov"
120-
minOccurs="0"/>
120+
minOccurs="0"><complexType/></element>
121121
</sequence>
122122
</complexType>
123123

124124
<complexType name="dcpRecipientType">
125125
<sequence>
126126
<element name="other"
127-
minOccurs="0"/>
127+
minOccurs="0"><complexType/></element>
128128
<element name="ours" type="epp:dcpOursType"
129-
minOccurs="0" maxOccurs="unbounded"/>
129+
minOccurs="0" maxOccurs="unbounded"/>
130130
<element name="public"
131-
minOccurs="0"/>
131+
minOccurs="0"><complexType/></element>
132132
<element name="same"
133-
minOccurs="0"/>
133+
minOccurs="0"><complexType/></element>
134134
<element name="unrelated"
135-
minOccurs="0"/>
135+
minOccurs="0"><complexType/></element>
136+
136137
</sequence>
137138
</complexType>
138139

@@ -152,11 +153,11 @@ Data Collection Policy types.
152153

153154
<complexType name="dcpRetentionType">
154155
<choice>
155-
<element name="business"/>
156-
<element name="indefinite"/>
157-
<element name="legal"/>
158-
<element name="none"/>
159-
<element name="stated"/>
156+
<element name="business"><complexType/></element>
157+
<element name="indefinite"><complexType/></element>
158+
<element name="legal"><complexType/></element>
159+
<element name="none"><complexType/></element>
160+
<element name="stated"><complexType/></element>
160161
</choice>
161162
</complexType>
162163

core/src/test/resources/google/registry/beam/rde/reducer_brda.xml

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,53 @@
44
<rde:rdeMenu>
55
<rde:version>1.0</rde:version>
66
<rde:objURI>urn:ietf:params:xml:ns:rdeDomain-1.0</rde:objURI>
7+
<rde:objURI>urn:ietf:params:xml:ns:rdeEppParams-1.0</rde:objURI>
78
<rde:objURI>urn:ietf:params:xml:ns:rdeHeader-1.0</rde:objURI>
89
<rde:objURI>urn:ietf:params:xml:ns:rdeRegistrar-1.0</rde:objURI>
910
</rde:rdeMenu>
1011
<rde:contents>
1112
<rdeDomain:domain/>
1213
<rdeRegistrar:registrar/>
1314

15+
<rdeEppParams:eppParams>
16+
<rdeEppParams:version>1.0</rdeEppParams:version>
17+
<rdeEppParams:lang>en</rdeEppParams:lang>
18+
<rdeEppParams:objURI>urn:ietf:params:xml:ns:rdeDomain-1.0</rdeEppParams:objURI>
19+
<rdeEppParams:objURI>urn:ietf:params:xml:ns:rdeHost-1.0</rdeEppParams:objURI>
20+
<rdeEppParams:svcExtension>
21+
<epp:extURI>urn:ietf:params:xml:ns:launch-1.0</epp:extURI>
22+
<epp:extURI>urn:ietf:params:xml:ns:rgp-1.0</epp:extURI>
23+
<epp:extURI>urn:ietf:params:xml:ns:secDNS-1.1</epp:extURI>
24+
<epp:extURI>urn:ietf:params:xml:ns:fee-0.6</epp:extURI>
25+
<epp:extURI>urn:ietf:params:xml:ns:fee-0.11</epp:extURI>
26+
<epp:extURI>urn:ietf:params:xml:ns:fee-0.12</epp:extURI>
27+
<epp:extURI>urn:ietf:params:xml:ns:epp:fee-1.0</epp:extURI>
28+
</rdeEppParams:svcExtension>
29+
<rdeEppParams:dcp>
30+
<epp:access>
31+
<epp:all/>
32+
</epp:access>
33+
<epp:statement>
34+
<epp:purpose>
35+
<epp:admin/>
36+
<epp:prov/>
37+
</epp:purpose>
38+
<epp:recipient>
39+
<epp:ours/>
40+
<epp:public/>
41+
</epp:recipient>
42+
<epp:retention>
43+
<epp:stated/>
44+
</epp:retention>
45+
</epp:statement>
46+
</rdeEppParams:dcp>
47+
</rdeEppParams:eppParams>
48+
1449
<rdeHeader:header>
1550
<rdeHeader:tld>soy</rdeHeader:tld>
1651
<rdeHeader:count uri="urn:ietf:params:xml:ns:rdeDomain-1.0">1</rdeHeader:count>
1752
<rdeHeader:count uri="urn:ietf:params:xml:ns:rdeRegistrar-1.0">1</rdeHeader:count>
53+
<rdeHeader:count uri="urn:ietf:params:xml:ns:rdeEppParams-1.0">1</rdeHeader:count>
1854
</rdeHeader:header>
1955

2056
</rde:contents>

core/src/test/resources/google/registry/beam/rde/reducer_rde.xml

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
<rde:rdeMenu>
55
<rde:version>1.0</rde:version>
66
<rde:objURI>urn:ietf:params:xml:ns:rdeDomain-1.0</rde:objURI>
7+
<rde:objURI>urn:ietf:params:xml:ns:rdeEppParams-1.0</rde:objURI>
78
<rde:objURI>urn:ietf:params:xml:ns:rdeHeader-1.0</rde:objURI>
89
<rde:objURI>urn:ietf:params:xml:ns:rdeHost-1.0</rde:objURI>
910
<rde:objURI>urn:ietf:params:xml:ns:rdeIDN-1.0</rde:objURI>
@@ -34,12 +35,47 @@
3435
<rdeIDN:urlPolicy>https://www.registry.google/about/policies/domainabuse/</rdeIDN:urlPolicy>
3536
</rdeIDN:idnTableRef>
3637

38+
<rdeEppParams:eppParams>
39+
<rdeEppParams:version>1.0</rdeEppParams:version>
40+
<rdeEppParams:lang>en</rdeEppParams:lang>
41+
<rdeEppParams:objURI>urn:ietf:params:xml:ns:rdeDomain-1.0</rdeEppParams:objURI>
42+
<rdeEppParams:objURI>urn:ietf:params:xml:ns:rdeHost-1.0</rdeEppParams:objURI>
43+
<rdeEppParams:svcExtension>
44+
<epp:extURI>urn:ietf:params:xml:ns:launch-1.0</epp:extURI>
45+
<epp:extURI>urn:ietf:params:xml:ns:rgp-1.0</epp:extURI>
46+
<epp:extURI>urn:ietf:params:xml:ns:secDNS-1.1</epp:extURI>
47+
<epp:extURI>urn:ietf:params:xml:ns:fee-0.6</epp:extURI>
48+
<epp:extURI>urn:ietf:params:xml:ns:fee-0.11</epp:extURI>
49+
<epp:extURI>urn:ietf:params:xml:ns:fee-0.12</epp:extURI>
50+
<epp:extURI>urn:ietf:params:xml:ns:epp:fee-1.0</epp:extURI>
51+
</rdeEppParams:svcExtension>
52+
<rdeEppParams:dcp>
53+
<epp:access>
54+
<epp:all/>
55+
</epp:access>
56+
<epp:statement>
57+
<epp:purpose>
58+
<epp:admin/>
59+
<epp:prov/>
60+
</epp:purpose>
61+
<epp:recipient>
62+
<epp:ours/>
63+
<epp:public/>
64+
</epp:recipient>
65+
<epp:retention>
66+
<epp:stated/>
67+
</epp:retention>
68+
</epp:statement>
69+
</rdeEppParams:dcp>
70+
</rdeEppParams:eppParams>
71+
3772
<rdeHeader:header>
3873
<rdeHeader:tld>soy</rdeHeader:tld>
3974
<rdeHeader:count uri="urn:ietf:params:xml:ns:rdeDomain-1.0">1</rdeHeader:count>
4075
<rdeHeader:count uri="urn:ietf:params:xml:ns:rdeHost-1.0">1</rdeHeader:count>
4176
<rdeHeader:count uri="urn:ietf:params:xml:ns:rdeRegistrar-1.0">1</rdeHeader:count>
4277
<rdeHeader:count uri="urn:ietf:params:xml:ns:rdeIDN-1.0">4</rdeHeader:count>
78+
<rdeHeader:count uri="urn:ietf:params:xml:ns:rdeEppParams-1.0">1</rdeHeader:count>
4379
</rdeHeader:header>
4480

4581
</rde:contents>

core/src/test/resources/google/registry/beam/rde/reducer_rde_report.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,6 @@
1414
<rdeHeader:count uri="urn:ietf:params:xml:ns:rdeHost-1.0">1</rdeHeader:count>
1515
<rdeHeader:count uri="urn:ietf:params:xml:ns:rdeRegistrar-1.0">1</rdeHeader:count>
1616
<rdeHeader:count uri="urn:ietf:params:xml:ns:rdeIDN-1.0">4</rdeHeader:count>
17+
<rdeHeader:count uri="urn:ietf:params:xml:ns:rdeEppParams-1.0">1</rdeHeader:count>
1718
</rdeHeader:header>
1819
</rdeReport:report>

0 commit comments

Comments
 (0)