Skip to content

Commit 61a44c9

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 61a44c9

File tree

1 file changed

+84
-15
lines changed

1 file changed

+84
-15
lines changed

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

Lines changed: 84 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package com.google.gcloud.dns.it;
1818

19+
import static com.google.gcloud.dns.Dns.DnsRecordListOption.type;
1920
import static org.junit.Assert.assertEquals;
2021
import static org.junit.Assert.assertFalse;
2122
import static org.junit.Assert.assertNotNull;
@@ -48,8 +49,6 @@
4849

4950
public class ITDnsTest {
5051

51-
// todo(mderka) Implement test for creating invalid change when DnsException is finished. #673
52-
5352
private static final String PREFIX = "gcldjvit-";
5453
private static final Dns DNS = DnsOptions.builder().build().service();
5554
private static final String ZONE_NAME1 = (PREFIX + UUID.randomUUID()).substring(0, 32);
@@ -201,14 +200,14 @@ public void testCreateZoneWithErrors() {
201200
fail("Zone name is missing a period. The service returns an error.");
202201
} catch (DnsException ex) {
203202
// expected
204-
// todo(mderka) test non-retryable when implemented within #593
203+
assertFalse(ex.retryable());
205204
}
206205
try {
207206
DNS.create(ZONE_DNS_NO_PERIOD);
208207
fail("Zone name is missing a period. The service returns an error.");
209208
} catch (DnsException ex) {
210209
// expected
211-
// todo(mderka) test non-retryable when implemented within #593
210+
assertFalse(ex.retryable());
212211
}
213212
} finally {
214213
DNS.delete(ZONE_NAME_ERROR.name());
@@ -393,15 +392,15 @@ public void testListZones() {
393392
} catch (DnsException ex) {
394393
// expected
395394
assertEquals(400, ex.code());
396-
// todo(mderka) test not-retryable
395+
assertFalse(ex.retryable());
397396
}
398397
try {
399398
DNS.listZones(Dns.ZoneListOption.pageSize(-1));
400399
fail();
401400
} catch (DnsException ex) {
402401
// expected
403402
assertEquals(400, ex.code());
404-
// todo(mderka) test not-retryable
403+
assertFalse(ex.retryable());
405404
}
406405
// ok size
407406
zones = filter(DNS.listZones(Dns.ZoneListOption.pageSize(1000)).iterateAll());
@@ -413,7 +412,7 @@ public void testListZones() {
413412
} catch (DnsException ex) {
414413
// expected
415414
assertEquals(400, ex.code());
416-
// todo(mderka) test not-retryable
415+
assertFalse(ex.retryable());
417416
}
418417
// ok name
419418
zones = filter(DNS.listZones(Dns.ZoneListOption.dnsName(ZONE1.dnsName())).iterateAll());
@@ -586,6 +585,76 @@ public void testCreateChange() {
586585
}
587586
}
588587

588+
@Test
589+
public void testInvalidChangeRequest() {
590+
try {
591+
Zone zone = DNS.create(ZONE1);
592+
DnsRecord validA = DnsRecord.builder("subdomain." + zone.dnsName(), DnsRecord.Type.A)
593+
.records(ImmutableList.of("0.255.1.5"))
594+
.build();
595+
ChangeRequest validChange = ChangeRequest.builder()
596+
.add(validA)
597+
.build();
598+
zone.applyChangeRequest(validChange);
599+
try {
600+
zone.applyChangeRequest(validChange);
601+
fail();
602+
} catch (DnsException ex) {
603+
// expected
604+
assertFalse(ex.retryable());
605+
assertEquals(409, ex.code());
606+
}
607+
// delete with field mismatch
608+
DnsRecord mismatch = validA.toBuilder().ttl(20, TimeUnit.SECONDS).build();
609+
ChangeRequest delete = ChangeRequest.builder().delete(mismatch).build();
610+
try {
611+
zone.applyChangeRequest(delete);
612+
fail();
613+
} catch (DnsException ex) {
614+
// expected
615+
assertEquals(412, ex.code());
616+
assertFalse(ex.retryable());
617+
}
618+
// delete and add SOA
619+
Iterator<DnsRecord> recordIterator = zone.listDnsRecords().iterateAll();
620+
LinkedList<DnsRecord> deletions = new LinkedList<>();
621+
LinkedList<DnsRecord> additions = new LinkedList<>();
622+
while (recordIterator.hasNext()) {
623+
DnsRecord record = recordIterator.next();
624+
if (record.type() == DnsRecord.Type.SOA) {
625+
deletions.add(record);
626+
DnsRecord copy = record.toBuilder().name("x." + record.name()).build();
627+
additions.add(copy);
628+
break;
629+
}
630+
}
631+
delete = delete.toBuilder().deletions(deletions).build();
632+
ChangeRequest addition = ChangeRequest.builder().additions(additions).build();
633+
try {
634+
zone.applyChangeRequest(delete);
635+
fail();
636+
} catch (DnsException ex) {
637+
// expected
638+
assertFalse(ex.retryable());
639+
assertEquals(400, ex.code());
640+
}
641+
try {
642+
zone.applyChangeRequest(addition);
643+
fail();
644+
} catch (DnsException ex) {
645+
// expected
646+
assertFalse(ex.retryable());
647+
assertEquals(400, ex.code());
648+
}
649+
delete = delete.toBuilder().deletions(ImmutableList.of(validA)).build();
650+
ChangeRequest request = zone.applyChangeRequest(delete);
651+
waitForChangeToComplete(zone.name(), request.id());
652+
zone.delete();
653+
} finally {
654+
clear();
655+
}
656+
}
657+
589658
@Test
590659
public void testListChanges() {
591660
try {
@@ -596,7 +665,7 @@ public void testListChanges() {
596665
} catch (DnsException ex) {
597666
// expected
598667
assertEquals(404, ex.code());
599-
// todo(mderka) test retry functionality
668+
assertFalse(ex.retryable());
600669
}
601670
// zone exists but has no changes
602671
DNS.create(ZONE1);
@@ -621,15 +690,15 @@ public void testListChanges() {
621690
} catch (DnsException ex) {
622691
// expected
623692
assertEquals(400, ex.code());
624-
// todo(mderka) test retry functionality
693+
assertFalse(ex.retryable());
625694
}
626695
try {
627696
DNS.listChangeRequests(ZONE1.name(), Dns.ChangeRequestListOption.pageSize(-1));
628697
fail();
629698
} catch (DnsException ex) {
630699
// expected
631700
assertEquals(400, ex.code());
632-
// todo(mderka) test retry functionality
701+
assertFalse(ex.retryable());
633702
}
634703
// sorting order
635704
ImmutableList<ChangeRequest> ascending = ImmutableList.copyOf(DNS.listChangeRequests(
@@ -845,7 +914,7 @@ public void testListDnsRecords() {
845914
waitForChangeToComplete(ZONE1.name(), change.id());
846915
dnsRecordIterator = DNS.listDnsRecords(ZONE1.name(),
847916
Dns.DnsRecordListOption.dnsName(A_RECORD_ZONE1.name()),
848-
Dns.DnsRecordListOption.type(A_RECORD_ZONE1.type()))
917+
type(A_RECORD_ZONE1.type()))
849918
.iterateAll();
850919
counter = 0;
851920
while (dnsRecordIterator.hasNext()) {
@@ -858,28 +927,28 @@ public void testListDnsRecords() {
858927
// check wrong arguments
859928
try {
860929
// name is not set
861-
DNS.listDnsRecords(ZONE1.name(), Dns.DnsRecordListOption.type(A_RECORD_ZONE1.type()));
930+
DNS.listDnsRecords(ZONE1.name(), type(A_RECORD_ZONE1.type()));
862931
fail();
863932
} catch (DnsException ex) {
864933
// expected
865934
assertEquals(400, ex.code());
866-
// todo(mderka) test retry functionality when available
935+
assertFalse(ex.retryable());
867936
}
868937
try {
869938
DNS.listDnsRecords(ZONE1.name(), Dns.DnsRecordListOption.pageSize(0));
870939
fail();
871940
} catch (DnsException ex) {
872941
// expected
873942
assertEquals(400, ex.code());
874-
// todo(mderka) test retry functionality when available
943+
assertFalse(ex.retryable());
875944
}
876945
try {
877946
DNS.listDnsRecords(ZONE1.name(), Dns.DnsRecordListOption.pageSize(-1));
878947
fail();
879948
} catch (DnsException ex) {
880949
// expected
881950
assertEquals(400, ex.code());
882-
// todo(mderka) test retry functionality when available
951+
assertFalse(ex.retryable());
883952
}
884953
waitForChangeToComplete(ZONE1.name(), change.id());
885954
} finally {

0 commit comments

Comments
 (0)