1616
1717package com .google .gcloud .dns .it ;
1818
19+ import static com .google .gcloud .dns .Dns .DnsRecordListOption .type ;
1920import static org .junit .Assert .assertEquals ;
2021import static org .junit .Assert .assertFalse ;
2122import static org .junit .Assert .assertNotNull ;
4849
4950public 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