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