Skip to content

Commit a7387e9

Browse files
authored
Add RDAP nameserver tests for .zz-- TLD hostnames (#2936)
The actual error is fixed as a side effect of PR #2935, but this adds tests verifying the intended behavior. BUG= http://b/476144993
1 parent 5c66675 commit a7387e9

File tree

3 files changed

+42
-13
lines changed

3 files changed

+42
-13
lines changed

core/src/test/java/google/registry/rdap/RdapActionBaseTestCase.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -298,9 +298,13 @@ JsonFileBuilder addDomain(String name, String handle) {
298298
}
299299

300300
JsonFileBuilder addNameserver(String name, String handle) {
301+
return addNameserver(Idn.toASCII(name), name, handle);
302+
}
303+
304+
JsonFileBuilder addNameserver(String punycodeName, String unicodeName, String handle) {
301305
return putNext(
302-
"NAMESERVER_NAME_", Idn.toASCII(name),
303-
"NAMESERVER_UNICODE_NAME_", name,
306+
"NAMESERVER_NAME_", punycodeName,
307+
"NAMESERVER_UNICODE_NAME_", unicodeName,
304308
"NAMESERVER_HANDLE_", handle);
305309
}
306310

core/src/test/java/google/registry/rdap/RdapNameserverActionTest.java

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
import static com.google.common.truth.Truth.assertThat;
1818
import static google.registry.testing.DatabaseHelper.createTld;
1919
import static google.registry.testing.DatabaseHelper.persistResource;
20+
import static google.registry.testing.FullFieldsTestEntityHelper.makeAndPersistHost;
21+
import static google.registry.testing.FullFieldsTestEntityHelper.makePunycodedHost;
2022
import static google.registry.testing.FullFieldsTestEntityHelper.makeRegistrar;
2123
import static google.registry.testing.GsonSubject.assertAboutJson;
2224
import static org.mockito.Mockito.verify;
@@ -27,7 +29,6 @@
2729
import google.registry.rdap.RdapMetrics.WildcardType;
2830
import google.registry.rdap.RdapSearchResults.IncompletenessWarningType;
2931
import google.registry.request.Action;
30-
import google.registry.testing.FullFieldsTestEntityHelper;
3132
import java.util.Optional;
3233
import org.junit.jupiter.api.BeforeEach;
3334
import org.junit.jupiter.api.Test;
@@ -43,29 +44,25 @@ class RdapNameserverActionTest extends RdapActionBaseTestCase<RdapNameserverActi
4344
void beforeEach() {
4445
// normal
4546
createTld("lol");
46-
FullFieldsTestEntityHelper.makeAndPersistHost(
47-
"ns1.cat.lol", "1.2.3.4", clock.nowUtc().minusYears(1));
47+
makeAndPersistHost("ns1.cat.lol", "1.2.3.4", clock.nowUtc().minusYears(1));
4848
// idn
4949
createTld("xn--q9jyb4c");
50-
FullFieldsTestEntityHelper.makeAndPersistHost(
50+
makeAndPersistHost(
5151
"ns1.cat.xn--q9jyb4c", "bad:f00d:cafe:0:0:0:15:beef", clock.nowUtc().minusYears(1));
5252
// multilevel
5353
createTld("1.tld");
54-
FullFieldsTestEntityHelper.makeAndPersistHost(
55-
"ns1.domain.1.tld", "5.6.7.8", clock.nowUtc().minusYears(1));
54+
makeAndPersistHost("ns1.domain.1.tld", "5.6.7.8", clock.nowUtc().minusYears(1));
5655
// deleted
5756
persistResource(
58-
FullFieldsTestEntityHelper.makeAndPersistHost(
59-
"nsdeleted.cat.lol", "1.2.3.4", clock.nowUtc().minusYears(1))
57+
makeAndPersistHost("nsdeleted.cat.lol", "1.2.3.4", clock.nowUtc().minusYears(1))
6058
.asBuilder()
6159
.setDeletionTime(clock.nowUtc().minusMonths(1))
6260
.build());
6361
// other registrar
6462
persistResource(
6563
makeRegistrar("otherregistrar", "Yes Virginia <script>", Registrar.State.ACTIVE, 102L));
6664
// external
67-
FullFieldsTestEntityHelper.makeAndPersistHost(
68-
"ns1.domain.external", "9.10.11.12", clock.nowUtc().minusYears(1));
65+
makeAndPersistHost("ns1.domain.external", "9.10.11.12", clock.nowUtc().minusYears(1));
6966
}
7067

7168
@Test
@@ -80,6 +77,14 @@ void testInvalidNameserver_returns400() {
8077
assertThat(response.getStatus()).isEqualTo(400);
8178
}
8279

80+
@Test
81+
void testInvalidNameserver_domainWithHyphenOn3And4_returns400() {
82+
assertAboutJson()
83+
.that(generateActualJson("ns1.zz--main-2166.lol"))
84+
.isEqualTo(generateExpectedJsonError("Not a valid nameserver", 400));
85+
assertThat(response.getStatus()).isEqualTo(400);
86+
}
87+
8388
@Test
8489
void testUnknownNameserver_returns404() {
8590
assertAboutJson()
@@ -101,6 +106,21 @@ void testValidNameserver_works() {
101106
assertThat(response.getStatus()).isEqualTo(200);
102107
}
103108

109+
@Test
110+
void testNameserver_tldTithHyphenOn3And4_works() {
111+
createTld("zz--main-2166");
112+
persistResource(makePunycodedHost("ns1.cat.zz--main-2166", "1.2.3.4", null, "TheRegistrar"));
113+
assertAboutJson()
114+
.that(generateActualJson("ns1.cat.zz--main-2166"))
115+
.isEqualTo(
116+
addPermanentBoilerplateNotices(
117+
jsonFileBuilder()
118+
.addNameserver("ns1.cat.zz--main-2166", "ns1.cat.zz--main-2166", "F-ROID")
119+
.putAll("ADDRESSTYPE", "v4", "ADDRESS", "1.2.3.4", "STATUS", "active")
120+
.load("rdap_host.json")));
121+
assertThat(response.getStatus()).isEqualTo(200);
122+
}
123+
104124
@Test
105125
void testTrailingDot_getsIgnored() {
106126
assertAboutJson()

core/src/test/java/google/registry/testing/FullFieldsTestEntityHelper.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,10 +135,15 @@ public static Host makeHost(String fqhn, @Nullable String ip1, @Nullable String
135135

136136
public static Host makeHost(
137137
String fqhn, @Nullable String ip1, @Nullable String ip2, String registrarClientId) {
138+
return makePunycodedHost(Idn.toASCII(fqhn), ip1, ip2, registrarClientId);
139+
}
140+
141+
public static Host makePunycodedHost(
142+
String fqhn, @Nullable String ip1, @Nullable String ip2, String registrarClientId) {
138143
Host.Builder builder =
139144
new Host.Builder()
140145
.setRepoId(generateNewContactHostRoid())
141-
.setHostName(Idn.toASCII(fqhn))
146+
.setHostName(fqhn)
142147
.setCreationTimeForTest(DateTime.parse("2000-10-08T00:45:00Z"))
143148
.setPersistedCurrentSponsorRegistrarId(registrarClientId);
144149
if ((ip1 != null) || (ip2 != null)) {

0 commit comments

Comments
 (0)