Fix CloudDnsWriter glue record A/AAAA arguments

Previously, CloudDnsWriter used InetAddress.toString() to produce the ipv4/6
address string (i.e. 127.0.0.1 or 0:0:0:0:0:0:0:1) used as an argument to the
Cloud DNS API. However, this fails because InetAddress uses the format
"HostName/IpAddress" for toString(), which uses the empty string as a HostName
if unspecified. This resulted in the erroneous use of a prefix slash (i.e.
"/127.0.01") as an InetAddress argument, causing all glue record updates to
fail.

This change replaces InetAddress.toString() with InetAddress.getHostAddress(),
which properly generates the IP address for the InetAddress. This also replaces
a lot of logic in the corresponding test with concrete equivalents, preventing
obvious errors like this from creeping up on us in the future.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=184708896
This commit is contained in:
larryruili 2018-02-06 11:10:51 -08:00 committed by jianglai
parent 5f218b4a8b
commit 6280d74f1c
2 changed files with 12 additions and 19 deletions

View file

@ -207,10 +207,10 @@ public class CloudDnsWriter extends BaseDnsWriter {
HashSet<String> aaaaRrData = new HashSet<>(); HashSet<String> aaaaRrData = new HashSet<>();
for (InetAddress ip : host.get().getInetAddresses()) { for (InetAddress ip : host.get().getInetAddresses()) {
if (ip instanceof Inet4Address) { if (ip instanceof Inet4Address) {
aRrData.add(ip.toString()); aRrData.add(ip.getHostAddress());
} else { } else {
checkArgument(ip instanceof Inet6Address); checkArgument(ip instanceof Inet6Address);
aaaaRrData.add(ip.toString()); aaaaRrData.add(ip.getHostAddress());
} }
} }

View file

@ -69,8 +69,6 @@ public class CloudDnsWriterTest {
private static final Inet4Address IPv4 = (Inet4Address) InetAddresses.forString("127.0.0.1"); private static final Inet4Address IPv4 = (Inet4Address) InetAddresses.forString("127.0.0.1");
private static final Inet6Address IPv6 = (Inet6Address) InetAddresses.forString("::1"); private static final Inet6Address IPv6 = (Inet6Address) InetAddresses.forString("::1");
private static final DelegationSignerData DS_DATA =
DelegationSignerData.create(12345, 3, 1, base16().decode("1234567890ABCDEF"));
private static final Duration DEFAULT_A_TTL = Duration.standardSeconds(11); private static final Duration DEFAULT_A_TTL = Duration.standardSeconds(11);
private static final Duration DEFAULT_NS_TTL = Duration.standardSeconds(222); private static final Duration DEFAULT_NS_TTL = Duration.standardSeconds(222);
private static final Duration DEFAULT_DS_TTL = Duration.standardSeconds(3333); private static final Duration DEFAULT_DS_TTL = Duration.standardSeconds(3333);
@ -188,7 +186,7 @@ public class CloudDnsWriterTest {
.setKind("dns#resourceRecordSet") .setKind("dns#resourceRecordSet")
.setType("NS") .setType("NS")
.setName(domainName + ".") .setName(domainName + ".")
.setTtl((int) DEFAULT_NS_TTL.getStandardSeconds()) .setTtl(222)
.setRrdatas(nameserverHostnames.build())); .setRrdatas(nameserverHostnames.build()));
// Add glue for IPv4 in-bailiwick nameservers // Add glue for IPv4 in-bailiwick nameservers
@ -198,8 +196,8 @@ public class CloudDnsWriterTest {
.setKind("dns#resourceRecordSet") .setKind("dns#resourceRecordSet")
.setType("A") .setType("A")
.setName(i + ".ip4." + domainName + ".") .setName(i + ".ip4." + domainName + ".")
.setTtl((int) DEFAULT_A_TTL.getStandardSeconds()) .setTtl(11)
.setRrdatas(ImmutableList.of(IPv4.toString()))); .setRrdatas(ImmutableList.of("127.0.0.1")));
} }
} }
@ -215,9 +213,8 @@ public class CloudDnsWriterTest {
.setKind("dns#resourceRecordSet") .setKind("dns#resourceRecordSet")
.setType("NS") .setType("NS")
.setName(domainName + ".") .setName(domainName + ".")
.setTtl((int) DEFAULT_NS_TTL.getStandardSeconds()) .setTtl(222)
.setRrdatas(nameserverHostnames.build())); .setRrdatas(nameserverHostnames.build()));
// Add glue for IPv6 in-bailiwick nameservers // Add glue for IPv6 in-bailiwick nameservers
for (int i = 0; i < v6InBailiwickNameservers; i++) { for (int i = 0; i < v6InBailiwickNameservers; i++) {
recordSetBuilder.add( recordSetBuilder.add(
@ -225,8 +222,8 @@ public class CloudDnsWriterTest {
.setKind("dns#resourceRecordSet") .setKind("dns#resourceRecordSet")
.setType("AAAA") .setType("AAAA")
.setName(i + ".ip6." + domainName + ".") .setName(i + ".ip6." + domainName + ".")
.setTtl((int) DEFAULT_A_TTL.getStandardSeconds()) .setTtl(11)
.setRrdatas(ImmutableList.of(IPv6.toString()))); .setRrdatas(ImmutableList.of("0:0:0:0:0:0:0:1")));
} }
} }
@ -242,7 +239,7 @@ public class CloudDnsWriterTest {
.setKind("dns#resourceRecordSet") .setKind("dns#resourceRecordSet")
.setType("NS") .setType("NS")
.setName(domainName + ".") .setName(domainName + ".")
.setTtl((int) DEFAULT_NS_TTL.getStandardSeconds()) .setTtl(222)
.setRrdatas(nameserverHostnames.build())); .setRrdatas(nameserverHostnames.build()));
} }
@ -252,16 +249,14 @@ public class CloudDnsWriterTest {
for (int i = 0; i < dsRecords; i++) { for (int i = 0; i < dsRecords; i++) {
dsRecordData.add( dsRecordData.add(
DelegationSignerData.create( DelegationSignerData.create(i, 3, 1, base16().decode("1234567890ABCDEF")).toRrData());
i, DS_DATA.getAlgorithm(), DS_DATA.getDigestType(), DS_DATA.getDigest())
.toRrData());
} }
recordSetBuilder.add( recordSetBuilder.add(
new ResourceRecordSet() new ResourceRecordSet()
.setKind("dns#resourceRecordSet") .setKind("dns#resourceRecordSet")
.setType("DS") .setType("DS")
.setName(domainName + ".") .setName(domainName + ".")
.setTtl((int) DEFAULT_DS_TTL.getStandardSeconds()) .setTtl(3333)
.setRrdatas(dsRecordData.build())); .setRrdatas(dsRecordData.build()));
} }
@ -274,9 +269,7 @@ public class CloudDnsWriterTest {
ImmutableSet.Builder<DelegationSignerData> dsDataBuilder = new ImmutableSet.Builder<>(); ImmutableSet.Builder<DelegationSignerData> dsDataBuilder = new ImmutableSet.Builder<>();
for (int i = 0; i < numDsRecords; i++) { for (int i = 0; i < numDsRecords; i++) {
dsDataBuilder.add( dsDataBuilder.add(DelegationSignerData.create(i, 3, 1, base16().decode("1234567890ABCDEF")));
DelegationSignerData.create(
i, DS_DATA.getAlgorithm(), DS_DATA.getDigestType(), DS_DATA.getDigest()));
} }
ImmutableSet.Builder<Key<HostResource>> hostResourceRefBuilder = new ImmutableSet.Builder<>(); ImmutableSet.Builder<Key<HostResource>> hostResourceRefBuilder = new ImmutableSet.Builder<>();