• 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.assertNotEquals;
21 import static org.junit.Assert.assertNull;
22 import static org.junit.Assert.assertTrue;
23 
24 import com.google.api.services.dns.model.ManagedZone;
25 import com.google.common.collect.ImmutableList;
26 import com.google.common.collect.ImmutableMap;
27 import com.google.common.collect.Lists;
28 import java.util.LinkedList;
29 import java.util.List;
30 import java.util.Map;
31 import org.junit.Test;
32 
33 public class ZoneInfoTest {
34 
35   private static final String NAME = "mz-example.com";
36   private static final String GENERATED_ID = "123456";
37   private static final Long CREATION_TIME_MILLIS = 1123468321321L;
38   private static final String DNS_NAME = "example.com.";
39   private static final String DESCRIPTION = "description for the zone";
40   private static final String NAME_SERVER_SET = "some set";
41   private static final String NS1 = "name server 1";
42   private static final String NS2 = "name server 2";
43   private static final String NS3 = "name server 3";
44   private static final List<String> NAME_SERVERS = ImmutableList.of(NS1, NS2, NS3);
45   private static final Map<String, String> LABELS =
46       ImmutableMap.of("label1", "value1", "label2", "value2");
47   private static final String ALGORITHM = "rsasha256";
48   private static final String KEY_TYPE1 = "zoneSigning";
49   private static final String KEY_TYPE2 = "keySigning";
50   private static final String STATE = "off";
51   private static final String NON_EXISTENCE = "nsec";
52   private static final Long ZSK_KEY_LENGTH = 1024L;
53   private static final Long KSK_KEY_LENGTH = 2048L;
54   private static final ZoneInfo.KeySpec ZONE_SIGNING_KEY_SPEC =
55       ZoneInfo.KeySpec.newBuilder()
56           .setAlgorithm(ALGORITHM)
57           .setKeyLength(ZSK_KEY_LENGTH)
58           .setKeyType(KEY_TYPE1)
59           .build();
60   private static final ZoneInfo.KeySpec KEY_SIGNING_KEY_SPEC =
61       ZoneInfo.KeySpec.newBuilder()
62           .setAlgorithm(ALGORITHM)
63           .setKeyLength(KSK_KEY_LENGTH)
64           .setKeyType(KEY_TYPE2)
65           .build();
66   private static final List<ZoneInfo.KeySpec> DEFAULT_KEY_SPECS =
67       ImmutableList.of(ZONE_SIGNING_KEY_SPEC, KEY_SIGNING_KEY_SPEC);
68   private static final ZoneInfo.DnsSecConfig DNS_SEC_CONFIG =
69       ZoneInfo.DnsSecConfig.newBuilder()
70           .setDefaultKeySpecs(DEFAULT_KEY_SPECS)
71           .setState(STATE)
72           .setNonExistence(NON_EXISTENCE)
73           .build();
74   private static final ZoneInfo INFO =
75       ZoneInfo.of(NAME, DNS_NAME, DESCRIPTION)
76           .toBuilder()
77           .setCreationTimeMillis(CREATION_TIME_MILLIS)
78           .setGeneratedId(GENERATED_ID)
79           .setNameServerSet(NAME_SERVER_SET)
80           .setNameServers(NAME_SERVERS)
81           .setDnsSecConfig(DNS_SEC_CONFIG)
82           .setLabels(LABELS)
83           .build();
84 
85   @Test
testOf()86   public void testOf() {
87     ZoneInfo partial = ZoneInfo.of(NAME, DNS_NAME, DESCRIPTION);
88     assertTrue(partial.getNameServers().isEmpty());
89     assertEquals(NAME, partial.getName());
90     assertNull(partial.getGeneratedId());
91     assertNull(partial.getCreationTimeMillis());
92     assertNull(partial.getNameServerSet());
93     assertEquals(DESCRIPTION, partial.getDescription());
94     assertEquals(DNS_NAME, partial.getDnsName());
95   }
96 
97   @Test
testBuilder()98   public void testBuilder() {
99     assertEquals(3, INFO.getNameServers().size());
100     assertEquals(NS1, INFO.getNameServers().get(0));
101     assertEquals(NS2, INFO.getNameServers().get(1));
102     assertEquals(NS3, INFO.getNameServers().get(2));
103     assertEquals(NAME, INFO.getName());
104     assertEquals(GENERATED_ID, INFO.getGeneratedId());
105     assertEquals(CREATION_TIME_MILLIS, INFO.getCreationTimeMillis());
106     assertEquals(NAME_SERVER_SET, INFO.getNameServerSet());
107     assertEquals(DESCRIPTION, INFO.getDescription());
108     assertEquals(DNS_NAME, INFO.getDnsName());
109     assertEquals(DNS_SEC_CONFIG, INFO.getDnsSecConfig());
110     assertEquals(LABELS, INFO.getLabels());
111 
112     ZoneInfo.DnsSecConfig config = INFO.getDnsSecConfig();
113     assertEquals(DEFAULT_KEY_SPECS, config.getDefaultKeySpecs());
114     assertEquals(STATE, config.getState());
115     assertEquals(NON_EXISTENCE, config.getNonExistence());
116 
117     List<ZoneInfo.KeySpec> keySpecs = config.getDefaultKeySpecs();
118     ZoneInfo.KeySpec zoneSigningKeySpec = keySpecs.get(0);
119     assertEquals(ALGORITHM, zoneSigningKeySpec.getAlgorithm());
120     assertEquals(KEY_TYPE1, zoneSigningKeySpec.getKeyType());
121     assertEquals(ZSK_KEY_LENGTH, zoneSigningKeySpec.getKeyLength());
122 
123     ZoneInfo.KeySpec keySigningKeySpec = keySpecs.get(1);
124     assertEquals(ALGORITHM, keySigningKeySpec.getAlgorithm());
125     assertEquals(KEY_TYPE2, keySigningKeySpec.getKeyType());
126     assertEquals(KSK_KEY_LENGTH, keySigningKeySpec.getKeyLength());
127   }
128 
129   @Test
testEqualsAndNotEquals()130   public void testEqualsAndNotEquals() {
131     ZoneInfo clone = INFO.toBuilder().build();
132     assertEquals(INFO, clone);
133     List<String> moreServers = Lists.newLinkedList(NAME_SERVERS);
134     moreServers.add(NS1);
135     clone = INFO.toBuilder().setNameServers(moreServers).build();
136     assertNotEquals(INFO, clone);
137     String differentName = "totally different name";
138     clone = INFO.toBuilder().setName(differentName).build();
139     assertNotEquals(INFO, clone);
140     clone = INFO.toBuilder().setCreationTimeMillis(INFO.getCreationTimeMillis() + 1).build();
141     assertNotEquals(INFO, clone);
142     clone = INFO.toBuilder().setDescription(INFO.getDescription() + "aaaa").build();
143     assertNotEquals(INFO, clone);
144     clone = INFO.toBuilder().setDnsName(differentName).build();
145     assertNotEquals(INFO, clone);
146     clone = INFO.toBuilder().setGeneratedId(INFO.getGeneratedId() + "1111").build();
147     assertNotEquals(INFO, clone);
148     clone = INFO.toBuilder().setNameServerSet(INFO.getNameServerSet() + "salt").build();
149     assertNotEquals(INFO, clone);
150     clone =
151         INFO.toBuilder()
152             .setDnsSecConfig(DNS_SEC_CONFIG.toBuilder().setNonExistence("nsec3").build())
153             .build();
154     assertNotEquals(INFO, clone);
155   }
156 
157   @Test
testSameHashCodeOnEquals()158   public void testSameHashCodeOnEquals() {
159     int hash = INFO.hashCode();
160     ZoneInfo clone = INFO.toBuilder().build();
161     assertEquals(clone.hashCode(), hash);
162 
163     int dnsSecConfigHas = DNS_SEC_CONFIG.hashCode();
164     ZoneInfo.DnsSecConfig dnsSecConfig = DNS_SEC_CONFIG.toBuilder().build();
165     assertEquals(dnsSecConfig.hashCode(), dnsSecConfigHas);
166   }
167 
168   @Test
testToBuilder()169   public void testToBuilder() {
170     assertEquals(INFO, INFO.toBuilder().build());
171     ZoneInfo partial = ZoneInfo.of(NAME, DNS_NAME, DESCRIPTION);
172     assertEquals(partial, partial.toBuilder().build());
173     partial =
174         ZoneInfo.of(NAME, DNS_NAME, DESCRIPTION).toBuilder().setGeneratedId(GENERATED_ID).build();
175     assertEquals(partial, partial.toBuilder().build());
176     partial =
177         ZoneInfo.of(NAME, DNS_NAME, DESCRIPTION)
178             .toBuilder()
179             .setCreationTimeMillis(CREATION_TIME_MILLIS)
180             .build();
181     assertEquals(partial, partial.toBuilder().build());
182     List<String> nameServers = new LinkedList<>();
183     nameServers.add(NS1);
184     partial =
185         ZoneInfo.of(NAME, DNS_NAME, DESCRIPTION).toBuilder().setNameServers(nameServers).build();
186     assertEquals(partial, partial.toBuilder().build());
187     partial =
188         ZoneInfo.of(NAME, DNS_NAME, DESCRIPTION)
189             .toBuilder()
190             .setNameServerSet(NAME_SERVER_SET)
191             .build();
192     assertEquals(partial, partial.toBuilder().build());
193 
194     assertEquals(DNS_SEC_CONFIG, DNS_SEC_CONFIG.toBuilder().build());
195     ZoneInfo.DnsSecConfig partialDnsSecConfig = ZoneInfo.DnsSecConfig.newBuilder().build();
196     assertEquals(partialDnsSecConfig, partialDnsSecConfig.toBuilder().build());
197   }
198 
199   @Test
testToAndFromPb()200   public void testToAndFromPb() {
201     assertEquals(INFO, ZoneInfo.fromPb(INFO.toPb()));
202     ZoneInfo partial = ZoneInfo.of(NAME, DNS_NAME, DESCRIPTION);
203     assertEquals(partial, ZoneInfo.fromPb(partial.toPb()));
204     partial =
205         ZoneInfo.of(NAME, DNS_NAME, DESCRIPTION).toBuilder().setGeneratedId(GENERATED_ID).build();
206     assertEquals(partial, ZoneInfo.fromPb(partial.toPb()));
207     partial =
208         ZoneInfo.of(NAME, DNS_NAME, DESCRIPTION)
209             .toBuilder()
210             .setCreationTimeMillis(CREATION_TIME_MILLIS)
211             .build();
212     assertEquals(partial, ZoneInfo.fromPb(partial.toPb()));
213     List<String> nameServers = new LinkedList<>();
214     nameServers.add(NS1);
215     partial =
216         ZoneInfo.of(NAME, DNS_NAME, DESCRIPTION).toBuilder().setNameServers(nameServers).build();
217     assertEquals(partial, ZoneInfo.fromPb(partial.toPb()));
218     partial =
219         ZoneInfo.of(NAME, DNS_NAME, DESCRIPTION)
220             .toBuilder()
221             .setNameServerSet(NAME_SERVER_SET)
222             .build();
223     assertEquals(partial, ZoneInfo.fromPb(partial.toPb()));
224     assertEquals(DNS_SEC_CONFIG, ZoneInfo.DnsSecConfig.fromPb(DNS_SEC_CONFIG.toPb()));
225     ZoneInfo.DnsSecConfig partialDnsSecConfig =
226         ZoneInfo.DnsSecConfig.newBuilder().setState(STATE).setNonExistence(NON_EXISTENCE).build();
227     assertEquals(partialDnsSecConfig, ZoneInfo.DnsSecConfig.fromPb(partialDnsSecConfig.toPb()));
228   }
229 
230   @Test
testEmptyNameServers()231   public void testEmptyNameServers() {
232     ZoneInfo clone = INFO.toBuilder().setNameServers(new LinkedList<String>()).build();
233     assertTrue(clone.getNameServers().isEmpty());
234     clone.toPb(); // test that this is allowed
235   }
236 
237   @Test
testDateParsing()238   public void testDateParsing() {
239     ManagedZone pb = INFO.toPb();
240     pb.setCreationTime("2016-01-19T18:00:12.854Z"); // a real value obtained from Google Cloud DNS
241     ZoneInfo mz = ZoneInfo.fromPb(pb); // parses the string timestamp to millis
242     ManagedZone pbClone = mz.toPb(); // converts it back to string
243     assertEquals(pb, pbClone);
244     assertEquals(pb.getCreationTime(), pbClone.getCreationTime());
245   }
246 }
247