diff --git a/CHANGELOG.md b/CHANGELOG.md index 056b78d6..a4b2528c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,5 @@ ### Version 4.5 -* Adds `Zone.email()`, `Zone.ttl()` and `Zone.builder()` -* Adds email and ttl to CLI zone list output +* Adds `Zone.email()` and displays it in CLI zone list output * Adds `ZoneApi.iterateByName()` to support lookups * Adds `-n` parameter to CLI zone list * Deprecates `Zone.idOrName()` as `Zone.id()` cannot be null diff --git a/cli/README.md b/cli/README.md index 155815c9..c0f992b3 100644 --- a/cli/README.md +++ b/cli/README.md @@ -74,7 +74,7 @@ If you just want to fool around, you can use the `mock` provider. ```bash # first column is the zone id, which isn't always its name! $ denominator -p mock zone list -denominator.io. denominator.io. admin.denominator.io. 86400 +denominator.io. denominator.io. admin.denominator.io. $ denominator -p mock -z denominator.io. record list denominator.io. SOA 3600 ns1.denominator.io. admin.denominator.io. 1 3600 600 604800 60 denominator.io. NS 86400 ns1.denominator.io. diff --git a/cli/src/main/java/denominator/cli/Denominator.java b/cli/src/main/java/denominator/cli/Denominator.java index 8f8c2837..facc5298 100644 --- a/cli/src/main/java/denominator/cli/Denominator.java +++ b/cli/src/main/java/denominator/cli/Denominator.java @@ -385,8 +385,7 @@ public Iterator doRun(final DNSApiManager mgr) { return Iterators.transform(zones, new Function() { @Override public String apply(Zone input) { - return format("%-24s %-36s %-36s %d", input.id(), input.name(), input.email(), - input.ttl()); + return format("%-24s %-36s %s", input.id(), input.name(), input.email()); } }); } diff --git a/cli/src/test/java/denominator/cli/DenominatorTest.java b/cli/src/test/java/denominator/cli/DenominatorTest.java index bc8b807d..d1b2cb8b 100644 --- a/cli/src/test/java/denominator/cli/DenominatorTest.java +++ b/cli/src/test/java/denominator/cli/DenominatorTest.java @@ -75,7 +75,7 @@ public void listsAllProvidersWithCredentials() { @Test // denominator -p mock zone list public void testZoneList() { assertThat(new ZoneList().doRun(mgr)).containsExactly( - "denominator.io. denominator.io. admin.denominator.io. 86400" + "denominator.io. denominator.io. admin.denominator.io." ); } diff --git a/clouddns/src/main/java/denominator/clouddns/CloudDNSZoneApi.java b/clouddns/src/main/java/denominator/clouddns/CloudDNSZoneApi.java index 0ced9450..8e20dd53 100644 --- a/clouddns/src/main/java/denominator/clouddns/CloudDNSZoneApi.java +++ b/clouddns/src/main/java/denominator/clouddns/CloudDNSZoneApi.java @@ -5,11 +5,8 @@ import javax.inject.Inject; import denominator.clouddns.RackspaceApis.CloudDNS; -import denominator.clouddns.RackspaceApis.ListWithNext; import denominator.model.Zone; -import static denominator.common.Util.singletonIterator; - class CloudDNSZoneApi implements denominator.ZoneApi { private final CloudDNS api; @@ -21,59 +18,11 @@ class CloudDNSZoneApi implements denominator.ZoneApi { @Override public Iterator iterator() { - return new ZipWithDomain(api.domains()); + return api.domains().iterator(); } @Override public Iterator iterateByName(String name) { - ListWithNext zones = api.domainsByName(name); - if (zones.isEmpty()) { - return singletonIterator(null); - } - return singletonIterator(zipWithDomain(zones.get(0))); - } - - /** - * CloudDNS only exposes a domain's ttl in the show api. - */ - private Zone zipWithDomain(Zone next) { - int ttl = api.domain(next.id()).ttl(); - return Zone.builder() - .name(next.name()) - .id(next.id()) - .email(next.email()) - .ttl(ttl).build(); - } - - class ZipWithDomain implements Iterator { - - ListWithNext list; - int i = 0; - int length; - - ZipWithDomain(ListWithNext list) { - this.list = list; - this.length = list.size(); - } - - @Override - public boolean hasNext() { - while (i == length && list.next != null) { - list = api.domains(list.next); - length = list.size(); - i = 0; - } - return i < length; - } - - @Override - public Zone next() { - return zipWithDomain(list.get(i++)); - } - - @Override - public void remove() { - throw new UnsupportedOperationException(); - } + return api.domainsByName(name).iterator(); } } diff --git a/clouddns/src/main/java/denominator/clouddns/RackspaceAdapters.java b/clouddns/src/main/java/denominator/clouddns/RackspaceAdapters.java index ee0fb92e..bc190f39 100644 --- a/clouddns/src/main/java/denominator/clouddns/RackspaceAdapters.java +++ b/clouddns/src/main/java/denominator/clouddns/RackspaceAdapters.java @@ -66,22 +66,20 @@ protected String jsonKey() { } protected Zone build(JsonReader reader) throws IOException { - Zone.Builder result = new Zone.Builder(); + String name = null, id = null, email = null; while (reader.hasNext()) { String nextName = reader.nextName(); if (nextName.equals("name")) { - result.name(reader.nextString()); + name = reader.nextString(); } else if (nextName.equals("id")) { - result.id(reader.nextString()); + id = reader.nextString(); } else if (nextName.equals("emailAddress")) { - result.email(reader.nextString()); - } else if (nextName.equals("ttl")) { - result.ttl(reader.nextInt()); + email = reader.nextString(); } else { reader.skipValue(); } } - return result.build(); + return Zone.create(name, id, email); } } diff --git a/clouddns/src/main/java/denominator/clouddns/RackspaceApis.java b/clouddns/src/main/java/denominator/clouddns/RackspaceApis.java index 4e9fd1f9..478858db 100644 --- a/clouddns/src/main/java/denominator/clouddns/RackspaceApis.java +++ b/clouddns/src/main/java/denominator/clouddns/RackspaceApis.java @@ -53,9 +53,6 @@ interface CloudDNS { @RequestLine("GET /domains?name={name}") ListWithNext domainsByName(@Param("name") String name); - @RequestLine("GET") - ListWithNext domains(URI href); - @RequestLine("GET /domains") ListWithNext domains(); diff --git a/clouddns/src/test/java/denominator/clouddns/CloudDNSResourceRecordSetApiMockTest.java b/clouddns/src/test/java/denominator/clouddns/CloudDNSResourceRecordSetApiMockTest.java index 0dd85acf..f98804c2 100644 --- a/clouddns/src/test/java/denominator/clouddns/CloudDNSResourceRecordSetApiMockTest.java +++ b/clouddns/src/test/java/denominator/clouddns/CloudDNSResourceRecordSetApiMockTest.java @@ -13,7 +13,7 @@ import static denominator.assertj.ModelAssertions.assertThat; import static denominator.clouddns.RackspaceApisTest.domainId; -import static junit.framework.Assert.assertFalse; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; public class CloudDNSResourceRecordSetApiMockTest { diff --git a/clouddns/src/test/java/denominator/clouddns/CloudDNSZoneApiMockTest.java b/clouddns/src/test/java/denominator/clouddns/CloudDNSZoneApiMockTest.java index f5183191..b3d04324 100644 --- a/clouddns/src/test/java/denominator/clouddns/CloudDNSZoneApiMockTest.java +++ b/clouddns/src/test/java/denominator/clouddns/CloudDNSZoneApiMockTest.java @@ -9,7 +9,6 @@ import denominator.model.Zone; import static denominator.assertj.ModelAssertions.assertThat; -import static denominator.clouddns.RackspaceApisTest.domainResponse; import static denominator.clouddns.RackspaceApisTest.domainsResponse; public class CloudDNSZoneApiMockTest { @@ -21,19 +20,15 @@ public class CloudDNSZoneApiMockTest { public void iteratorWhenPresent() throws Exception { server.enqueueAuthResponse(); server.enqueue(new MockResponse().setBody(domainsResponse)); - server.enqueue(new MockResponse().setBody(domainResponse)); ZoneApi api = server.connect().api().zones(); assertThat(api.iterator()).containsExactly( - Zone.builder().name("denominator.io").id("1234").email("admin@denominator.io").ttl(3600) - .build() + Zone.create("denominator.io", "1234", "admin@denominator.io") ); server.assertAuthRequest(); server.assertRequest().hasPath("/v1.0/123123/domains"); - server.assertRequest() - .hasPath("/v1.0/123123/domains/1234?showRecords=false&showSubdomains=false"); } @Test @@ -52,19 +47,15 @@ public void iteratorWhenAbsent() throws Exception { public void iteratorByNameWhenPresent() throws Exception { server.enqueueAuthResponse(); server.enqueue(new MockResponse().setBody(domainsResponse)); - server.enqueue(new MockResponse().setBody(domainResponse)); ZoneApi api = server.connect().api().zones(); assertThat(api.iterateByName("denominator.io")).containsExactly( - Zone.builder().name("denominator.io").id("1234").email("admin@denominator.io").ttl(3600) - .build() + Zone.create("denominator.io", "1234", "admin@denominator.io") ); server.assertAuthRequest(); server.assertRequest().hasPath("/v1.0/123123/domains?name=denominator.io"); - server.assertRequest() - .hasPath("/v1.0/123123/domains/1234?showRecords=false&showSubdomains=false"); } @Test diff --git a/clouddns/src/test/java/denominator/clouddns/RackspaceApisTest.java b/clouddns/src/test/java/denominator/clouddns/RackspaceApisTest.java index 937439a8..d3968fc4 100644 --- a/clouddns/src/test/java/denominator/clouddns/RackspaceApisTest.java +++ b/clouddns/src/test/java/denominator/clouddns/RackspaceApisTest.java @@ -80,8 +80,7 @@ public void domainsByNamePresent() throws Exception { server.enqueue(new MockResponse().setBody(domainsResponse)); assertThat(mockApi().domainsByName("denominator.io")).containsExactly( - Zone.builder().name("denominator.io").id("1234").email("admin@denominator.io").ttl(86400) - .build() + Zone.create("denominator.io", "1234", "admin@denominator.io") ); server.assertAuthRequest(); @@ -280,9 +279,6 @@ public Credentials get() { static String domainsResponse = "{\"domains\":[{\"name\":\"denominator.io\",\"id\":1234,\"accountId\":123123,\"emailAddress\":\"admin@denominator.io\",\"updated\":\"2013-09-02T19:46:56.000+0000\",\"created\":\"2013-09-02T19:45:51.000+0000\"}],\"totalEntries\":1}"; - static String - domainResponse = - "{\"name\":\"denominator.io\",\"id\":1234,\"accountId\":123123,\"ttl\": 3600,\"emailAddress\":\"admin@denominator.io\"}"; // NOTE records are allowed to be out of order by type static String recordsResponse = diff --git a/core/src/main/java/denominator/mock/MockZoneApi.java b/core/src/main/java/denominator/mock/MockZoneApi.java index f27a4bea..22abd288 100644 --- a/core/src/main/java/denominator/mock/MockZoneApi.java +++ b/core/src/main/java/denominator/mock/MockZoneApi.java @@ -70,11 +70,7 @@ public Zone next() { checkState(soa.hasNext(), "SOA record for zone %s was not present", name); SOAData soaData = (SOAData) soa.next().records().get(0); - return Zone.builder() - .name(name) - .id(name) - .ttl(soaData.minimum()) - .email(soaData.rname()).build(); + return Zone.create(name, name, soaData.rname()); } @Override diff --git a/core/src/test/java/denominator/DynamicCredentialsProviderExampleTest.java b/core/src/test/java/denominator/DynamicCredentialsProviderExampleTest.java index be566ab0..3b999ee1 100644 --- a/core/src/test/java/denominator/DynamicCredentialsProviderExampleTest.java +++ b/core/src/test/java/denominator/DynamicCredentialsProviderExampleTest.java @@ -68,9 +68,9 @@ public void testImplicitDynamicCredentialsUpdate() { DNSApiManager mgr = create(new DynamicCredentialsProvider()); ZoneApi zones = mgr.api().zones(); assertThat(zones.iterator()) - .containsExactly(Zone.builder().name("acme").email("coyote").build()); + .containsExactly(Zone.create("acme", "wily", "coyote")); assertThat(zones.iterator()) - .containsExactly(Zone.builder().name("acme").email("runner").build()); + .containsExactly(Zone.create("acme", "road", "runner")); // now, if the supplier doesn't supply a set of credentials, we should // get a correct message @@ -118,7 +118,7 @@ public Iterator iterator() { CustomerUsernamePassword cup = creds.get(); // normally, the credentials object would be used to invoke a remote // command. in this case, we don't and say we did :) - return asList(Zone.builder().name(cup.customer).email(cup.password).build()).iterator(); + return asList(Zone.create(cup.customer, cup.username, cup.password)).iterator(); } @Override diff --git a/designate/src/main/java/denominator/designate/DesignateAdapters.java b/designate/src/main/java/denominator/designate/DesignateAdapters.java index 3a5083e2..02a61ed1 100644 --- a/designate/src/main/java/denominator/designate/DesignateAdapters.java +++ b/designate/src/main/java/denominator/designate/DesignateAdapters.java @@ -86,22 +86,20 @@ protected String jsonKey() { } protected Zone build(JsonReader reader) throws IOException { - Zone.Builder result = new Zone.Builder(); + String name = null, id = null, email = null; while (reader.hasNext()) { String nextName = reader.nextName(); if (nextName.equals("name")) { - result.name(reader.nextString()); + name = reader.nextString(); } else if (nextName.equals("id")) { - result.id(reader.nextString()); + id = reader.nextString(); } else if (nextName.equals("email")) { - result.email(reader.nextString()); - } else if (nextName.equals("ttl")) { - result.ttl(reader.nextInt()); + email = reader.nextString(); } else { reader.skipValue(); } } - return result.build(); + return Zone.create(name, id, email); } } diff --git a/designate/src/test/java/denominator/designate/DesignateTest.java b/designate/src/test/java/denominator/designate/DesignateTest.java index dfcb49aa..b9ec3a29 100644 --- a/designate/src/test/java/denominator/designate/DesignateTest.java +++ b/designate/src/test/java/denominator/designate/DesignateTest.java @@ -67,8 +67,7 @@ public void domainsPresent() throws Exception { server.enqueue(new MockResponse().setBody(domainsResponse)); assertThat(mockApi().domains()).containsExactly( - Zone.builder().name("denominator.io.").id(domainId).email("admin@denominator.io").ttl(3600) - .build() + Zone.create("denominator.io.", domainId, "admin@denominator.io") ); server.assertAuthRequest(); diff --git a/designate/src/test/java/denominator/designate/DesignateZoneApiMockTest.java b/designate/src/test/java/denominator/designate/DesignateZoneApiMockTest.java index 31fcf98f..c79b02ef 100644 --- a/designate/src/test/java/denominator/designate/DesignateZoneApiMockTest.java +++ b/designate/src/test/java/denominator/designate/DesignateZoneApiMockTest.java @@ -25,8 +25,7 @@ public void iteratorWhenPresent() throws Exception { ZoneApi api = server.connect().api().zones(); assertThat(api.iterator()).containsExactly( - Zone.builder().name("denominator.io.").id(domainId).email("admin@denominator.io").ttl(3600) - .build() + Zone.create("denominator.io.", domainId, "admin@denominator.io") ); server.assertAuthRequest(); @@ -53,8 +52,7 @@ public void iteratorByNameWhenPresent() throws Exception { ZoneApi api = server.connect().api().zones(); assertThat(api.iterateByName("denominator.io.")).containsExactly( - Zone.builder().name("denominator.io.").id(domainId).email("admin@denominator.io").ttl(3600) - .build() + Zone.create("denominator.io.", domainId, "admin@denominator.io") ); server.assertAuthRequest(); diff --git a/dynect/src/main/java/denominator/dynect/DynECTZoneApi.java b/dynect/src/main/java/denominator/dynect/DynECTZoneApi.java index eed74887..34c1c526 100644 --- a/dynect/src/main/java/denominator/dynect/DynECTZoneApi.java +++ b/dynect/src/main/java/denominator/dynect/DynECTZoneApi.java @@ -59,10 +59,6 @@ private Zone fromSOA(String name) { checkState(soa.hasNext(), "SOA record for zone %s was not present", name); SOAData soaData = (SOAData) soa.next().records().get(0); - return Zone.builder() - .name(name) - .id(name) - .ttl(soaData.minimum()) - .email(soaData.rname()).build(); + return Zone.create(name, name, soaData.rname()); } } diff --git a/dynect/src/test/java/denominator/dynect/DynECTZoneApiMockTest.java b/dynect/src/test/java/denominator/dynect/DynECTZoneApiMockTest.java index 9b0e2fc2..7a38f6c5 100644 --- a/dynect/src/test/java/denominator/dynect/DynECTZoneApiMockTest.java +++ b/dynect/src/test/java/denominator/dynect/DynECTZoneApiMockTest.java @@ -28,8 +28,7 @@ public void iteratorWhenPresent() throws Exception { ZoneApi api = server.connect().api().zones(); assertThat(api.iterator()).containsExactly( - Zone.builder().name("denominator.io").id("denominator.io").email("fake@denominator.io.") - .ttl(1800).build() + Zone.create("denominator.io", "denominator.io","fake@denominator.io.") ); server.assertSessionRequest(); @@ -59,8 +58,7 @@ public void iteratorByNameWhenPresent() throws Exception { ZoneApi api = server.connect().api().zones(); assertThat(api.iterateByName("denominator.io.")).containsExactly( - Zone.builder().name("denominator.io.").id("denominator.io.").email("fake@denominator.io.") - .ttl(1800).build() + Zone.create("denominator.io.", "denominator.io.", "fake@denominator.io.") ); server.assertSessionRequest(); diff --git a/model/src/main/java/denominator/model/Zone.java b/model/src/main/java/denominator/model/Zone.java index 1848624d..620b2319 100644 --- a/model/src/main/java/denominator/model/Zone.java +++ b/model/src/main/java/denominator/model/Zone.java @@ -1,6 +1,5 @@ package denominator.model; -import static denominator.common.Preconditions.checkArgument; import static denominator.common.Preconditions.checkNotNull; import static denominator.common.Util.equal; @@ -15,14 +14,11 @@ public class Zone { private final String name; private final String id; private final String email; - private final int ttl; - Zone(String name, String id, String email, int ttl) { + Zone(String name, String id, String email) { this.name = checkNotNull(name, "name"); this.id = id; this.email = checkNotNull(email, "email of %s", name); - checkArgument(ttl >= 0, "Invalid ttl value: %s, must be 0-%s", ttl, Integer.MAX_VALUE); - this.ttl = ttl; } /** @@ -55,17 +51,6 @@ public String email() { return email; } - /** - * Default cache expiration of all resource records that don't declare an {@link - * denominator.model.Zone#ttl() override}. - * - * @see denominator.model.rdata.SOAData#minimum() - * @since 4.5 - */ - public int ttl() { - return ttl; - } - /** * @deprecated only use {@link #id()} when performing operations against a zone. This will be * removed in version 5. @@ -81,8 +66,7 @@ public boolean equals(Object obj) { Zone other = (Zone) obj; return name().equals(other.name()) && equal(id(), other.id()) - && email().equals(other.email()) - && ttl() == other.ttl(); + && email().equals(other.email()); } return false; } @@ -93,7 +77,6 @@ public int hashCode() { result = 31 * result + name().hashCode(); result = 31 * result + (id() != null ? id().hashCode() : 0); result = 31 * result + email().hashCode(); - result = 31 * result + ttl(); return result; } @@ -106,7 +89,6 @@ public String toString() { builder.append(", ").append("id=").append(id()); } builder.append(", ").append("email=").append(email()); - builder.append(", ").append("ttl=").append(ttl()); builder.append("]"); return builder.toString(); } @@ -115,7 +97,7 @@ public String toString() { * Represent a zone when its {@link #id() id} is its name. * * @param name corresponds to {@link #name()} and {@link #id()} - * @deprecated Use {@link #builder()}. This will be removed in version 5. + * @deprecated Use {@link #create(String, String, String)}. This will be removed in version 5. */ @Deprecated public static Zone create(String name) { @@ -123,69 +105,25 @@ public static Zone create(String name) { } /** - * Represent a zone with a fake email and defaul ttl of 86400. + * Represent a zone with a fake email. * * @param name corresponds to {@link #name()} - * @param id corresponds to {@link #id()} - * @deprecated Use {@link #builder()}. This will be removed in version 5. + * @param id nullable, corresponds to {@link #id()} + * @deprecated Use {@link #create(String, String, String)}. This will be removed in version 5. */ @Deprecated public static Zone create(String name, String id) { - return new Zone(name, id, "fake@" + name, 86400); - } - - public static Builder builder() { - return new Builder(); + return new Zone(name, id, "fake@" + name); } /** - * @since 4.5 + * Represent a zone with a fake email. + * + * @param name corresponds to {@link #name()} + * @param id nullable, corresponds to {@link #id()} + * @param email corresponds to {@link #email()} */ - public static final class Builder { - - private String name; - private String id; - private int ttl = 86400; - private String email; - - /** - * @see Zone#name() - */ - public Builder name(String name) { - this.name = name; - return this; - } - - /** - * Can be null for input objects. - * - * @see Zone#id() - */ - public Builder id(String id) { - this.id = id; - return this; - } - - /** - * @see Zone#email() - */ - public Builder email(String email) { - this.email = email; - return this; - } - - /** - * Overrides default of {@code 86400}. - * - * @see Zone#ttl() - */ - public Builder ttl(Integer ttl) { - this.ttl = ttl; - return this; - } - - public Zone build() { - return new Zone(name, id, email, ttl); - } + public static Zone create(String name, String id, String email) { + return new Zone(name, id, email); } } diff --git a/model/src/test/java/denominator/assertj/ZoneAssert.java b/model/src/test/java/denominator/assertj/ZoneAssert.java index 0e65f355..2f703685 100644 --- a/model/src/test/java/denominator/assertj/ZoneAssert.java +++ b/model/src/test/java/denominator/assertj/ZoneAssert.java @@ -30,10 +30,4 @@ public ZoneAssert hasEmail(String expected) { objects.assertEqual(info, actual.email(), expected); return this; } - - public ZoneAssert hasTtl(Integer expected) { - isNotNull(); - objects.assertEqual(info, actual.ttl(), expected); - return this; - } } diff --git a/model/src/test/java/denominator/model/ZoneTest.java b/model/src/test/java/denominator/model/ZoneTest.java index 8185bdc9..2d2e8d1e 100644 --- a/model/src/test/java/denominator/model/ZoneTest.java +++ b/model/src/test/java/denominator/model/ZoneTest.java @@ -15,29 +15,49 @@ public class ZoneTest { public void factoryMethodsWork() { Zone name = Zone.create("denominator.io."); Zone id = Zone.create("denominator.io.", "ABCD"); + Zone email = Zone.create("denominator.io.", "ABCD", "admin@foo.com"); assertThat(name) .hasName("denominator.io.") .hasId("denominator.io.") .isEqualTo(name) - .isNotEqualTo(id); + .isNotEqualTo(id) + .isNotEqualTo(email); assertThat(name.hashCode()) - .isNotEqualTo(id.hashCode()); + .isNotEqualTo(id.hashCode()) + .isNotEqualTo(email.hashCode()); assertThat(name.toString()) - .isEqualTo("Zone [name=denominator.io., email=fake@denominator.io., ttl=86400]"); + .isEqualTo("Zone [name=denominator.io., email=fake@denominator.io.]"); assertThat(id) .hasName("denominator.io.") .hasId("ABCD") .isEqualTo(id) - .isNotEqualTo(name); + .isNotEqualTo(name) + .isNotEqualTo(email); assertThat(id.hashCode()) - .isNotEqualTo(name.hashCode()); + .isNotEqualTo(name.hashCode()) + .isNotEqualTo(email.hashCode()); assertThat(id.toString()).isEqualTo( - "Zone [name=denominator.io., id=ABCD, email=fake@denominator.io., ttl=86400]"); + "Zone [name=denominator.io., id=ABCD, email=fake@denominator.io.]"); + + assertThat(email) + .hasName("denominator.io.") + .hasId("ABCD") + .hasEmail("admin@foo.com") + .isEqualTo(email) + .isNotEqualTo(name) + .isNotEqualTo(id); + + assertThat(email.hashCode()) + .isNotEqualTo(name.hashCode()) + .isNotEqualTo(id.hashCode()); + + assertThat(email.toString()).isEqualTo( + "Zone [name=denominator.io., id=ABCD, email=admin@foo.com]"); } @Test @@ -45,6 +65,14 @@ public void nullNameNPEMessage() { thrown.expect(NullPointerException.class); thrown.expectMessage("name"); - Zone.builder().build(); + Zone.create(null); + } + + @Test + public void nullEmailNameNPEMessage() { + thrown.expect(NullPointerException.class); + thrown.expectMessage("email"); + + Zone.create("name", null, null); } } diff --git a/route53/src/main/java/denominator/route53/Route53ZoneApi.java b/route53/src/main/java/denominator/route53/Route53ZoneApi.java index ae56a2fa..147112cd 100644 --- a/route53/src/main/java/denominator/route53/Route53ZoneApi.java +++ b/route53/src/main/java/denominator/route53/Route53ZoneApi.java @@ -49,11 +49,7 @@ private Zone zipWithSOA(HostedZone next) { checkState(!soa.isEmpty(), "SOA record for zone %s %s was not present", next.id, next.name); SOAData soaData = (SOAData) soa.get(0).records().get(0); - return Zone.builder() - .name(next.name) - .id(next.id) - .ttl(soaData.minimum()) - .email(soaData.rname()).build(); + return Zone.create(next.name, next.id, soaData.rname()); } /** diff --git a/route53/src/test/java/denominator/route53/Route53ZoneApiMockTest.java b/route53/src/test/java/denominator/route53/Route53ZoneApiMockTest.java index c8fbcc79..72ceff99 100644 --- a/route53/src/test/java/denominator/route53/Route53ZoneApiMockTest.java +++ b/route53/src/test/java/denominator/route53/Route53ZoneApiMockTest.java @@ -59,8 +59,7 @@ public void iteratorWhenPresent() throws Exception { assertThat(domains.next()) .hasName("denominator.io.") .hasId("Z1PA6795UKMFR9") - .hasEmail("awsdns-hostmaster.amazon.com.") - .hasTtl(86400); + .hasEmail("awsdns-hostmaster.amazon.com."); server.assertRequest() .hasMethod("GET") @@ -152,10 +151,8 @@ public void iterateByNameWhenPresent() throws Exception { ZoneApi api = server.connect().api().zones(); assertThat(api.iterateByName("denominator.io.")).containsExactly( - Zone.builder().name("denominator.io.").id("Z2ZEEJCUZCVG56") - .email("awsdns-hostmaster.amazon.com.").ttl(86400).build(), - Zone.builder().name("denominator.io.").id("Z3OQLQGABCU3T") - .email("awsdns-hostmaster.amazon.com.").ttl(86400).build() + Zone.create("denominator.io.", "Z2ZEEJCUZCVG56", "awsdns-hostmaster.amazon.com."), + Zone.create("denominator.io.", "Z3OQLQGABCU3T", "awsdns-hostmaster.amazon.com.") ); server.assertRequest() diff --git a/ultradns/src/main/java/denominator/ultradns/UltraDNSZoneApi.java b/ultradns/src/main/java/denominator/ultradns/UltraDNSZoneApi.java index c9c3ed59..3613c404 100644 --- a/ultradns/src/main/java/denominator/ultradns/UltraDNSZoneApi.java +++ b/ultradns/src/main/java/denominator/ultradns/UltraDNSZoneApi.java @@ -64,12 +64,6 @@ public Iterator iterateByName(String name) { private Zone fromSOA(String name) { List soa = api.getResourceRecordsOfDNameByType(name, name, 6); checkState(!soa.isEmpty(), "SOA record for zone %s was not present", name); - List rdata = soa.get(0).rdata; - return Zone.builder() - .name(name) - .id(name) - .email(rdata.get(1)) - .ttl(Integer.valueOf(rdata.get(6))) - .build(); + return Zone.create(name, name, soa.get(0).rdata.get(1)); } } diff --git a/ultradns/src/test/java/denominator/ultradns/UltraDNSZoneApiMockTest.java b/ultradns/src/test/java/denominator/ultradns/UltraDNSZoneApiMockTest.java index 9175cd1b..6bd2a785 100644 --- a/ultradns/src/test/java/denominator/ultradns/UltraDNSZoneApiMockTest.java +++ b/ultradns/src/test/java/denominator/ultradns/UltraDNSZoneApiMockTest.java @@ -32,8 +32,7 @@ public void iteratorWhenPresent() throws Exception { ZoneApi api = server.connect().api().zones(); assertThat(api.iterator()).containsExactly( - Zone.builder().name("denominator.io.").id("denominator.io.").email("adrianc.netflix.com.") - .ttl(86400).build() + Zone.create("denominator.io.", "denominator.io.", "adrianc.netflix.com.") ); server.assertSoapBody(getAccountsListOfUser); @@ -62,8 +61,7 @@ public void iteratorByName() throws Exception { ZoneApi api = server.connect().api().zones(); assertThat(api.iterateByName("denominator.io.")).containsExactly( - Zone.builder().name("denominator.io.").id("denominator.io.").email("adrianc.netflix.com.") - .ttl(86400).build() + Zone.create("denominator.io.", "denominator.io.", "adrianc.netflix.com.") ); server.assertSoapBody(getResourceRecordsOfDNameByType);