• 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.easymock.EasyMock.createStrictMock;
20 import static org.easymock.EasyMock.expect;
21 import static org.easymock.EasyMock.replay;
22 import static org.easymock.EasyMock.reset;
23 import static org.easymock.EasyMock.verify;
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertNotNull;
26 import static org.junit.Assert.assertSame;
27 import static org.junit.Assert.assertTrue;
28 
29 import com.google.common.collect.ImmutableList;
30 import org.junit.After;
31 import org.junit.Before;
32 import org.junit.Test;
33 
34 public class ChangeRequestTest {
35 
36   private static final String ZONE_NAME = "dns-zone-name";
37   private static final ChangeRequestInfo CHANGE_REQUEST_INFO =
38       ChangeRequest.newBuilder()
39           .add(RecordSet.newBuilder("name", RecordSet.Type.A).build())
40           .delete(RecordSet.newBuilder("othername", RecordSet.Type.AAAA).build())
41           .build();
42   private static final DnsOptions OPTIONS = createStrictMock(DnsOptions.class);
43 
44   private Dns dns;
45   private ChangeRequest changeRequest;
46   private ChangeRequest changeRequestPending;
47   private ChangeRequest changeRequestPartial;
48 
49   @Before
setUp()50   public void setUp() throws Exception {
51     dns = createStrictMock(Dns.class);
52     expect(dns.getOptions()).andReturn(OPTIONS).times(3);
53     replay(dns);
54     changeRequest =
55         new ChangeRequest(
56             dns,
57             ZONE_NAME,
58             new ChangeRequestInfo.BuilderImpl(
59                 CHANGE_REQUEST_INFO
60                     .toBuilder()
61                     .setStartTime(132L)
62                     .setGeneratedId("12")
63                     .setStatus(ChangeRequest.Status.DONE)
64                     .build()));
65     changeRequestPending =
66         new ChangeRequest(
67             dns,
68             ZONE_NAME,
69             new ChangeRequestInfo.BuilderImpl(
70                 CHANGE_REQUEST_INFO
71                     .toBuilder()
72                     .setStartTime(132L)
73                     .setGeneratedId("12")
74                     .setStatus(ChangeRequest.Status.PENDING)
75                     .build()));
76     changeRequestPartial =
77         new ChangeRequest(dns, ZONE_NAME, new ChangeRequest.BuilderImpl(CHANGE_REQUEST_INFO));
78     reset(dns);
79   }
80 
81   @After
tearDown()82   public void tearDown() throws Exception {
83     verify(dns);
84   }
85 
86   @Test
testConstructor()87   public void testConstructor() {
88     expect(dns.getOptions()).andReturn(OPTIONS);
89     replay(dns);
90     assertEquals(
91         new ChangeRequest(dns, ZONE_NAME, new ChangeRequestInfo.BuilderImpl(CHANGE_REQUEST_INFO)),
92         changeRequestPartial);
93     assertNotNull(changeRequest.getDns());
94     assertEquals(ZONE_NAME, changeRequest.getZone());
95     assertSame(dns, changeRequestPartial.getDns());
96     assertEquals(ZONE_NAME, changeRequestPartial.getZone());
97   }
98 
99   @Test
testFromPb()100   public void testFromPb() {
101     expect(dns.getOptions()).andReturn(OPTIONS).times(2);
102     replay(dns);
103     assertEquals(changeRequest, ChangeRequest.fromPb(dns, ZONE_NAME, changeRequest.toPb()));
104     assertEquals(
105         changeRequestPartial, ChangeRequest.fromPb(dns, ZONE_NAME, changeRequestPartial.toPb()));
106   }
107 
108   @Test
testEqualsAndToBuilder()109   public void testEqualsAndToBuilder() {
110     expect(dns.getOptions()).andReturn(OPTIONS).times(2);
111     replay(dns);
112     ChangeRequest compare = changeRequest.toBuilder().build();
113     assertEquals(changeRequest, compare);
114     assertEquals(changeRequest.hashCode(), compare.hashCode());
115     compare = changeRequestPartial.toBuilder().build();
116     assertEquals(changeRequestPartial, compare);
117     assertEquals(changeRequestPartial.hashCode(), compare.hashCode());
118   }
119 
120   @Test
testBuilder()121   public void testBuilder() {
122     // one for each build() call because it invokes a constructor
123     expect(dns.getOptions()).andReturn(OPTIONS).times(9);
124     replay(dns);
125     String id = changeRequest.getGeneratedId() + "aaa";
126     assertEquals(id, changeRequest.toBuilder().setGeneratedId(id).build().getGeneratedId());
127     ChangeRequest modified =
128         changeRequest.toBuilder().setStatus(ChangeRequest.Status.PENDING).build();
129     assertEquals(ChangeRequest.Status.PENDING, modified.status());
130     modified = changeRequest.toBuilder().clearDeletions().build();
131     assertTrue(modified.getDeletions().isEmpty());
132     modified = changeRequest.toBuilder().clearAdditions().build();
133     assertTrue(modified.getAdditions().isEmpty());
134     modified = changeRequest.toBuilder().setAdditions(ImmutableList.<RecordSet>of()).build();
135     assertTrue(modified.getAdditions().isEmpty());
136     modified = changeRequest.toBuilder().setDeletions(ImmutableList.<RecordSet>of()).build();
137     assertTrue(modified.getDeletions().isEmpty());
138     RecordSet cname = RecordSet.newBuilder("last", RecordSet.Type.CNAME).build();
139     modified = changeRequest.toBuilder().add(cname).build();
140     assertTrue(modified.getAdditions().contains(cname));
141     modified = changeRequest.toBuilder().delete(cname).build();
142     assertTrue(modified.getDeletions().contains(cname));
143     modified = changeRequest.toBuilder().setStartTime(0L).build();
144     assertEquals(Long.valueOf(0), modified.getStartTimeMillis());
145   }
146 
147   @Test
testApplyTo()148   public void testApplyTo() {
149     expect(dns.applyChangeRequest(ZONE_NAME, changeRequest)).andReturn(changeRequest);
150     expect(
151             dns.applyChangeRequest(
152                 ZONE_NAME,
153                 changeRequest,
154                 Dns.ChangeRequestOption.fields(Dns.ChangeRequestField.START_TIME)))
155         .andReturn(changeRequest);
156     replay(dns);
157     assertSame(changeRequest, changeRequest.applyTo(ZONE_NAME));
158     assertSame(
159         changeRequest,
160         changeRequest.applyTo(
161             ZONE_NAME, Dns.ChangeRequestOption.fields(Dns.ChangeRequestField.START_TIME)));
162   }
163 
164   @Test
testReload()165   public void testReload() {
166     expect(dns.getChangeRequest(ZONE_NAME, changeRequest.getGeneratedId()))
167         .andReturn(changeRequest);
168     expect(
169             dns.getChangeRequest(
170                 ZONE_NAME,
171                 changeRequest.getGeneratedId(),
172                 Dns.ChangeRequestOption.fields(Dns.ChangeRequestField.START_TIME)))
173         .andReturn(changeRequest);
174     replay(dns);
175     assertSame(changeRequest, changeRequest.reload());
176     assertSame(
177         changeRequest,
178         changeRequest.reload(Dns.ChangeRequestOption.fields(Dns.ChangeRequestField.START_TIME)));
179   }
180 
181   @Test
testIsDone()182   public void testIsDone() {
183     replay(dns);
184     assertTrue(changeRequest.isDone());
185     verify(dns);
186     reset(dns);
187     expect(
188             dns.getChangeRequest(
189                 ZONE_NAME,
190                 changeRequest.getGeneratedId(),
191                 Dns.ChangeRequestOption.fields(Dns.ChangeRequestField.STATUS)))
192         .andReturn(changeRequest);
193     replay(dns);
194     assertTrue(changeRequestPending.isDone());
195     verify(dns);
196   }
197 }
198