• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2016 Google LLC
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *       http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.google.cloud.dns;
18 
19 import static org.junit.Assert.assertEquals;
20 import static org.junit.Assert.assertFalse;
21 import static org.junit.Assert.assertNotEquals;
22 import static org.junit.Assert.assertNotNull;
23 import static org.junit.Assert.assertTrue;
24 import static org.junit.Assert.fail;
25 
26 import com.google.api.services.dns.model.Change;
27 import com.google.common.collect.ImmutableList;
28 import java.util.List;
29 import org.junit.Test;
30 
31 public class ChangeRequestInfoTest {
32 
33   private static final String GENERATED_ID = "cr-id-1";
34   private static final Long START_TIME_MILLIS = 12334567890L;
35   private static final ChangeRequest.Status STATUS = ChangeRequest.Status.PENDING;
36   private static final String NAME1 = "dns1";
37   private static final RecordSet.Type TYPE1 = RecordSet.Type.A;
38   private static final String NAME2 = "dns2";
39   private static final RecordSet.Type TYPE2 = RecordSet.Type.AAAA;
40   private static final String NAME3 = "dns3";
41   private static final RecordSet.Type TYPE3 = RecordSet.Type.MX;
42   private static final RecordSet RECORD1 = RecordSet.newBuilder(NAME1, TYPE1).build();
43   private static final RecordSet RECORD2 = RecordSet.newBuilder(NAME2, TYPE2).build();
44   private static final RecordSet RECORD3 = RecordSet.newBuilder(NAME3, TYPE3).build();
45   private static final List<RecordSet> ADDITIONS = ImmutableList.of(RECORD1, RECORD2);
46   private static final List<RecordSet> DELETIONS = ImmutableList.of(RECORD3);
47   private static final ChangeRequestInfo CHANGE =
48       ChangeRequest.newBuilder()
49           .add(RECORD1)
50           .add(RECORD2)
51           .delete(RECORD3)
52           .setStartTime(START_TIME_MILLIS)
53           .setStatus(STATUS)
54           .setGeneratedId(GENERATED_ID)
55           .build();
56 
57   @Test
testEmptyBuilder()58   public void testEmptyBuilder() {
59     ChangeRequestInfo cr = ChangeRequest.newBuilder().build();
60     assertNotNull(cr.getDeletions());
61     assertTrue(cr.getDeletions().isEmpty());
62     assertNotNull(cr.getAdditions());
63     assertTrue(cr.getAdditions().isEmpty());
64   }
65 
66   @Test
testBuilder()67   public void testBuilder() {
68     assertEquals(GENERATED_ID, CHANGE.getGeneratedId());
69     assertEquals(STATUS, CHANGE.status());
70     assertEquals(START_TIME_MILLIS, CHANGE.getStartTimeMillis());
71     assertEquals(ADDITIONS, CHANGE.getAdditions());
72     assertEquals(DELETIONS, CHANGE.getDeletions());
73     List<RecordSet> recordList = ImmutableList.of(RECORD1);
74     ChangeRequestInfo another = CHANGE.toBuilder().setAdditions(recordList).build();
75     assertEquals(recordList, another.getAdditions());
76     assertEquals(CHANGE.getDeletions(), another.getDeletions());
77     another = CHANGE.toBuilder().setDeletions(recordList).build();
78     assertEquals(recordList, another.getDeletions());
79     assertEquals(CHANGE.getAdditions(), another.getAdditions());
80   }
81 
82   @Test
testEqualsAndNotEquals()83   public void testEqualsAndNotEquals() {
84     ChangeRequestInfo clone = CHANGE.toBuilder().build();
85     assertEquals(CHANGE, clone);
86     clone = ChangeRequest.fromPb(CHANGE.toPb());
87     assertEquals(CHANGE, clone);
88     clone = CHANGE.toBuilder().setGeneratedId("some-other-id").build();
89     assertNotEquals(CHANGE, clone);
90     clone = CHANGE.toBuilder().setStartTime(CHANGE.getStartTimeMillis() + 1).build();
91     assertNotEquals(CHANGE, clone);
92     clone = CHANGE.toBuilder().add(RECORD3).build();
93     assertNotEquals(CHANGE, clone);
94     clone = CHANGE.toBuilder().delete(RECORD1).build();
95     assertNotEquals(CHANGE, clone);
96     ChangeRequestInfo empty = ChangeRequest.newBuilder().build();
97     assertNotEquals(CHANGE, empty);
98     assertEquals(empty, ChangeRequest.newBuilder().build());
99   }
100 
101   @Test
testSameHashCodeOnEquals()102   public void testSameHashCodeOnEquals() {
103     ChangeRequestInfo clone = CHANGE.toBuilder().build();
104     assertEquals(CHANGE, clone);
105     assertEquals(CHANGE.hashCode(), clone.hashCode());
106     ChangeRequestInfo empty = ChangeRequest.newBuilder().build();
107     assertEquals(empty.hashCode(), ChangeRequest.newBuilder().build().hashCode());
108   }
109 
110   @Test
testToAndFromPb()111   public void testToAndFromPb() {
112     assertEquals(CHANGE, ChangeRequest.fromPb(CHANGE.toPb()));
113     ChangeRequestInfo partial = ChangeRequest.newBuilder().build();
114     assertEquals(partial, ChangeRequest.fromPb(partial.toPb()));
115     partial = ChangeRequest.newBuilder().setGeneratedId(GENERATED_ID).build();
116     assertEquals(partial, ChangeRequest.fromPb(partial.toPb()));
117     partial = ChangeRequest.newBuilder().add(RECORD1).build();
118     assertEquals(partial, ChangeRequest.fromPb(partial.toPb()));
119     partial = ChangeRequest.newBuilder().delete(RECORD1).build();
120     assertEquals(partial, ChangeRequest.fromPb(partial.toPb()));
121     partial = ChangeRequest.newBuilder().setAdditions(ADDITIONS).build();
122     assertEquals(partial, ChangeRequest.fromPb(partial.toPb()));
123     partial = ChangeRequest.newBuilder().setDeletions(DELETIONS).build();
124     assertEquals(partial, ChangeRequest.fromPb(partial.toPb()));
125     partial = ChangeRequest.newBuilder().setStartTime(START_TIME_MILLIS).build();
126     assertEquals(partial, ChangeRequest.fromPb(partial.toPb()));
127     partial = ChangeRequest.newBuilder().setStatus(STATUS).build();
128     assertEquals(partial, ChangeRequest.fromPb(partial.toPb()));
129   }
130 
131   @Test
testToBuilder()132   public void testToBuilder() {
133     assertEquals(CHANGE, CHANGE.toBuilder().build());
134     ChangeRequestInfo partial = ChangeRequest.newBuilder().build();
135     assertEquals(partial, partial.toBuilder().build());
136     partial = ChangeRequest.newBuilder().setGeneratedId(GENERATED_ID).build();
137     assertEquals(partial, partial.toBuilder().build());
138     partial = ChangeRequest.newBuilder().add(RECORD1).build();
139     assertEquals(partial, partial.toBuilder().build());
140     partial = ChangeRequest.newBuilder().delete(RECORD1).build();
141     assertEquals(partial, partial.toBuilder().build());
142     partial = ChangeRequest.newBuilder().setAdditions(ADDITIONS).build();
143     assertEquals(partial, partial.toBuilder().build());
144     partial = ChangeRequest.newBuilder().setDeletions(DELETIONS).build();
145     assertEquals(partial, partial.toBuilder().build());
146     partial = ChangeRequest.newBuilder().setStartTime(START_TIME_MILLIS).build();
147     assertEquals(partial, partial.toBuilder().build());
148     partial = ChangeRequest.newBuilder().setStatus(STATUS).build();
149     assertEquals(partial, partial.toBuilder().build());
150   }
151 
152   @Test
testClearAdditions()153   public void testClearAdditions() {
154     ChangeRequestInfo clone = CHANGE.toBuilder().clearAdditions().build();
155     assertTrue(clone.getAdditions().isEmpty());
156     assertFalse(clone.getDeletions().isEmpty());
157   }
158 
159   @Test
testAddAddition()160   public void testAddAddition() {
161     try {
162       CHANGE.toBuilder().add(null);
163       fail("Should not be able to add null RecordSet.");
164     } catch (NullPointerException e) {
165       // expected
166     }
167     ChangeRequestInfo clone = CHANGE.toBuilder().add(RECORD1).build();
168     assertEquals(CHANGE.getAdditions().size() + 1, clone.getAdditions().size());
169   }
170 
171   @Test
testAddDeletion()172   public void testAddDeletion() {
173     try {
174       CHANGE.toBuilder().delete(null);
175       fail("Should not be able to delete null RecordSet.");
176     } catch (NullPointerException e) {
177       // expected
178     }
179     ChangeRequestInfo clone = CHANGE.toBuilder().delete(RECORD1).build();
180     assertEquals(CHANGE.getDeletions().size() + 1, clone.getDeletions().size());
181   }
182 
183   @Test
testClearDeletions()184   public void testClearDeletions() {
185     ChangeRequestInfo clone = CHANGE.toBuilder().clearDeletions().build();
186     assertTrue(clone.getDeletions().isEmpty());
187     assertFalse(clone.getAdditions().isEmpty());
188   }
189 
190   @Test
testRemoveAddition()191   public void testRemoveAddition() {
192     ChangeRequestInfo clone = CHANGE.toBuilder().removeAddition(RECORD1).build();
193     assertTrue(clone.getAdditions().contains(RECORD2));
194     assertFalse(clone.getAdditions().contains(RECORD1));
195     assertTrue(clone.getDeletions().contains(RECORD3));
196     clone = CHANGE.toBuilder().removeAddition(RECORD2).removeAddition(RECORD1).build();
197     assertFalse(clone.getAdditions().contains(RECORD2));
198     assertFalse(clone.getAdditions().contains(RECORD1));
199     assertTrue(clone.getAdditions().isEmpty());
200     assertTrue(clone.getDeletions().contains(RECORD3));
201   }
202 
203   @Test
testRemoveDeletion()204   public void testRemoveDeletion() {
205     ChangeRequestInfo clone = CHANGE.toBuilder().removeDeletion(RECORD3).build();
206     assertTrue(clone.getDeletions().isEmpty());
207   }
208 
209   @Test
testDateParsing()210   public void testDateParsing() {
211     String startTime = "2016-01-26T18:33:43.512Z"; // obtained from service
212     Change change = CHANGE.toPb().setStartTime(startTime);
213     ChangeRequestInfo converted = ChangeRequest.fromPb(change);
214     assertNotNull(converted.getStartTimeMillis());
215     assertEquals(change, converted.toPb());
216     assertEquals(change.getStartTime(), converted.toPb().getStartTime());
217   }
218 }
219