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,73 @@ 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 ();
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 ();
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+ DnsRecord copy = record .toBuilder ().name ("x." + record .name ()).build ();
624+ additions .add (copy );
625+ break ;
626+ }
627+ }
628+ deletion = deletion .toBuilder ().deletions (deletions ).build ();
629+ ChangeRequest addition = ChangeRequest .builder ().additions (additions ).build ();
630+ try {
631+ zone .applyChangeRequest (deletion );
632+ fail ();
633+ } catch (DnsException ex ) {
634+ // expected
635+ assertFalse (ex .retryable ());
636+ assertEquals (400 , ex .code ());
637+ }
638+ try {
639+ zone .applyChangeRequest (addition );
640+ fail ();
641+ } catch (DnsException ex ) {
642+ // expected
643+ assertFalse (ex .retryable ());
644+ assertEquals (400 , ex .code ());
645+ }
646+ } finally {
647+ ChangeRequest deletion = ChangeRequest .builder ().delete (validA ).build ();
648+ ChangeRequest request = zone .applyChangeRequest (deletion );
649+ waitForChangeToComplete (zone .name (), request .id ());
650+ zone .delete ();
651+ }
652+ }
653+
589654 @ Test
590655 public void testListChanges () {
591656 try {
@@ -596,7 +661,7 @@ public void testListChanges() {
596661 } catch (DnsException ex ) {
597662 // expected
598663 assertEquals (404 , ex .code ());
599- // todo(mderka) test retry functionality
664+ assertFalse ( ex . retryable ());
600665 }
601666 // zone exists but has no changes
602667 DNS .create (ZONE1 );
@@ -621,15 +686,15 @@ public void testListChanges() {
621686 } catch (DnsException ex ) {
622687 // expected
623688 assertEquals (400 , ex .code ());
624- // todo(mderka) test retry functionality
689+ assertFalse ( ex . retryable ());
625690 }
626691 try {
627692 DNS .listChangeRequests (ZONE1 .name (), Dns .ChangeRequestListOption .pageSize (-1 ));
628693 fail ();
629694 } catch (DnsException ex ) {
630695 // expected
631696 assertEquals (400 , ex .code ());
632- // todo(mderka) test retry functionality
697+ assertFalse ( ex . retryable ());
633698 }
634699 // sorting order
635700 ImmutableList <ChangeRequest > ascending = ImmutableList .copyOf (DNS .listChangeRequests (
@@ -863,23 +928,23 @@ public void testListDnsRecords() {
863928 } catch (DnsException ex ) {
864929 // expected
865930 assertEquals (400 , ex .code ());
866- // todo(mderka) test retry functionality when available
931+ assertFalse ( ex . retryable ());
867932 }
868933 try {
869934 DNS .listDnsRecords (ZONE1 .name (), Dns .DnsRecordListOption .pageSize (0 ));
870935 fail ();
871936 } catch (DnsException ex ) {
872937 // expected
873938 assertEquals (400 , ex .code ());
874- // todo(mderka) test retry functionality when available
939+ assertFalse ( ex . retryable ());
875940 }
876941 try {
877942 DNS .listDnsRecords (ZONE1 .name (), Dns .DnsRecordListOption .pageSize (-1 ));
878943 fail ();
879944 } catch (DnsException ex ) {
880945 // expected
881946 assertEquals (400 , ex .code ());
882- // todo(mderka) test retry functionality when available
947+ assertFalse ( ex . retryable ());
883948 }
884949 waitForChangeToComplete (ZONE1 .name (), change .id ());
885950 } finally {
0 commit comments