Skip to content

Commit baee7d7

Browse files
committed
Added integration test for invalid change request.
Also added checks for the exceptions being non-retryable. Closes #673.
1 parent 96e380c commit baee7d7

File tree

1 file changed

+79
-13
lines changed

1 file changed

+79
-13
lines changed

gcloud-java-dns/src/test/java/com/google/gcloud/dns/it/ITDnsTest.java

Lines changed: 79 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,6 @@
4848

4949
public class ITDnsTest {
5050

51-
// todo(mderka) Implement test for creating invalid change when DnsException is finished. #673
52-
5351
private static final String PREFIX = "gcldjvit-";
5452
private static final Dns DNS = DnsOptions.builder().build().service();
5553
private static final String ZONE_NAME1 = (PREFIX + UUID.randomUUID()).substring(0, 32);
@@ -201,14 +199,14 @@ public void testCreateZoneWithErrors() {
201199
fail("Zone name is missing a period. The service returns an error.");
202200
} catch (DnsException ex) {
203201
// expected
204-
// todo(mderka) test non-retryable when implemented within #593
202+
assertFalse(ex.retryable());
205203
}
206204
try {
207205
DNS.create(ZONE_DNS_NO_PERIOD);
208206
fail("Zone name is missing a period. The service returns an error.");
209207
} catch (DnsException ex) {
210208
// expected
211-
// todo(mderka) test non-retryable when implemented within #593
209+
assertFalse(ex.retryable());
212210
}
213211
} finally {
214212
DNS.delete(ZONE_NAME_ERROR.name());
@@ -393,15 +391,15 @@ public void testListZones() {
393391
} catch (DnsException ex) {
394392
// expected
395393
assertEquals(400, ex.code());
396-
// todo(mderka) test not-retryable
394+
assertFalse(ex.retryable());
397395
}
398396
try {
399397
DNS.listZones(Dns.ZoneListOption.pageSize(-1));
400398
fail();
401399
} catch (DnsException ex) {
402400
// expected
403401
assertEquals(400, ex.code());
404-
// todo(mderka) test not-retryable
402+
assertFalse(ex.retryable());
405403
}
406404
// ok size
407405
zones = filter(DNS.listZones(Dns.ZoneListOption.pageSize(1000)).iterateAll());
@@ -413,7 +411,7 @@ public void testListZones() {
413411
} catch (DnsException ex) {
414412
// expected
415413
assertEquals(400, ex.code());
416-
// todo(mderka) test not-retryable
414+
assertFalse(ex.retryable());
417415
}
418416
// ok name
419417
zones = filter(DNS.listZones(Dns.ZoneListOption.dnsName(ZONE1.dnsName())).iterateAll());
@@ -586,6 +584,74 @@ public void testCreateChange() {
586584
}
587585
}
588586

587+
@Test
588+
public void testInvalidChangeRequest() {
589+
Zone zone = DNS.create(ZONE1);
590+
DnsRecord validA = DnsRecord.builder("subdomain." + zone.dnsName(), DnsRecord.Type.A)
591+
.records(ImmutableList.of("0.255.1.5"))
592+
.build();
593+
try {
594+
ChangeRequest validChange = ChangeRequest.builder().add(validA).build();
595+
zone.applyChangeRequest(validChange);
596+
try {
597+
zone.applyChangeRequest(validChange);
598+
fail("Created a record which already exists.");
599+
} catch (DnsException ex) {
600+
// expected
601+
assertFalse(ex.retryable());
602+
assertEquals(409, ex.code());
603+
}
604+
// delete with field mismatch
605+
DnsRecord mismatch = validA.toBuilder().ttl(20, TimeUnit.SECONDS).build();
606+
ChangeRequest deletion = ChangeRequest.builder().delete(mismatch).build();
607+
try {
608+
zone.applyChangeRequest(deletion);
609+
fail("Deleted a record without a complete match.");
610+
} catch (DnsException ex) {
611+
// expected
612+
assertEquals(412, ex.code());
613+
assertFalse(ex.retryable());
614+
}
615+
// delete and add SOA
616+
Iterator<DnsRecord> recordIterator = zone.listDnsRecords().iterateAll();
617+
LinkedList<DnsRecord> deletions = new LinkedList<>();
618+
LinkedList<DnsRecord> additions = new LinkedList<>();
619+
while (recordIterator.hasNext()) {
620+
DnsRecord record = recordIterator.next();
621+
if (record.type() == DnsRecord.Type.SOA) {
622+
deletions.add(record);
623+
// the subdomain is necessary to get 400 instead of 412
624+
DnsRecord copy = record.toBuilder().name("x." + record.name()).build();
625+
additions.add(copy);
626+
break;
627+
}
628+
}
629+
deletion = deletion.toBuilder().deletions(deletions).build();
630+
ChangeRequest addition = ChangeRequest.builder().additions(additions).build();
631+
try {
632+
zone.applyChangeRequest(deletion);
633+
fail("Deleted SOA.");
634+
} catch (DnsException ex) {
635+
// expected
636+
assertFalse(ex.retryable());
637+
assertEquals(400, ex.code());
638+
}
639+
try {
640+
zone.applyChangeRequest(addition);
641+
fail("Added second SOA.");
642+
} catch (DnsException ex) {
643+
// expected
644+
assertFalse(ex.retryable());
645+
assertEquals(400, ex.code());
646+
}
647+
} finally {
648+
ChangeRequest deletion = ChangeRequest.builder().delete(validA).build();
649+
ChangeRequest request = zone.applyChangeRequest(deletion);
650+
waitForChangeToComplete(zone.name(), request.id());
651+
zone.delete();
652+
}
653+
}
654+
589655
@Test
590656
public void testListChanges() {
591657
try {
@@ -596,7 +662,7 @@ public void testListChanges() {
596662
} catch (DnsException ex) {
597663
// expected
598664
assertEquals(404, ex.code());
599-
// todo(mderka) test retry functionality
665+
assertFalse(ex.retryable());
600666
}
601667
// zone exists but has no changes
602668
DNS.create(ZONE1);
@@ -621,15 +687,15 @@ public void testListChanges() {
621687
} catch (DnsException ex) {
622688
// expected
623689
assertEquals(400, ex.code());
624-
// todo(mderka) test retry functionality
690+
assertFalse(ex.retryable());
625691
}
626692
try {
627693
DNS.listChangeRequests(ZONE1.name(), Dns.ChangeRequestListOption.pageSize(-1));
628694
fail();
629695
} catch (DnsException ex) {
630696
// expected
631697
assertEquals(400, ex.code());
632-
// todo(mderka) test retry functionality
698+
assertFalse(ex.retryable());
633699
}
634700
// sorting order
635701
ImmutableList<ChangeRequest> ascending = ImmutableList.copyOf(DNS.listChangeRequests(
@@ -863,23 +929,23 @@ public void testListDnsRecords() {
863929
} catch (DnsException ex) {
864930
// expected
865931
assertEquals(400, ex.code());
866-
// todo(mderka) test retry functionality when available
932+
assertFalse(ex.retryable());
867933
}
868934
try {
869935
DNS.listDnsRecords(ZONE1.name(), Dns.DnsRecordListOption.pageSize(0));
870936
fail();
871937
} catch (DnsException ex) {
872938
// expected
873939
assertEquals(400, ex.code());
874-
// todo(mderka) test retry functionality when available
940+
assertFalse(ex.retryable());
875941
}
876942
try {
877943
DNS.listDnsRecords(ZONE1.name(), Dns.DnsRecordListOption.pageSize(-1));
878944
fail();
879945
} catch (DnsException ex) {
880946
// expected
881947
assertEquals(400, ex.code());
882-
// todo(mderka) test retry functionality when available
948+
assertFalse(ex.retryable());
883949
}
884950
waitForChangeToComplete(ZONE1.name(), change.id());
885951
} finally {

0 commit comments

Comments
 (0)