4848
4949public 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