blob: dec1d481fe345aa7651d363c4f7880f763cd8db0 [file] [log] [blame]
Jian Li49109b52019-01-22 00:17:28 +09001/*
2 * Copyright 2019-present Open Networking Foundation
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 */
16package org.onosproject.k8snode.api;
17
18import com.google.common.testing.EqualsTester;
19import org.junit.Before;
20import org.junit.Test;
21import org.onlab.packet.ChassisId;
22import org.onlab.packet.IpAddress;
23import org.onosproject.k8snode.api.K8sNode.Type;
24import org.onosproject.net.DefaultDevice;
25import org.onosproject.net.Device;
26import org.onosproject.net.DeviceId;
27import org.onosproject.net.provider.ProviderId;
28
29import static junit.framework.TestCase.assertEquals;
30import static junit.framework.TestCase.assertSame;
31import static org.onosproject.k8snode.api.K8sNode.Type.MINION;
32import static org.onosproject.k8snode.api.K8sNodeState.COMPLETE;
33import static org.onosproject.k8snode.api.K8sNodeState.DEVICE_CREATED;
34import static org.onosproject.k8snode.api.K8sNodeState.INIT;
35import static org.onosproject.net.Device.Type.SWITCH;
36
37/**
38 * Unit test for DefaultK8sNode.
39 */
40public final class DefaultK8sNodeTest {
41
42 private static final IpAddress TEST_IP = IpAddress.valueOf("10.100.0.3");
43
Jian Li58b33982020-07-01 19:07:02 +090044 private static final String CLUSTER_NAME = "cluster";
Jian Li49109b52019-01-22 00:17:28 +090045 private static final String HOSTNAME_1 = "hostname_1";
46 private static final String HOSTNAME_2 = "hostname_2";
47 private static final Device DEVICE_1 = createDevice(1);
48 private static final Device DEVICE_2 = createDevice(2);
Jian Li58b33982020-07-01 19:07:02 +090049 private static final int SEGMENT_ID_1 = 1;
50 private static final int SEGMENT_ID_2 = 2;
Jian Li49109b52019-01-22 00:17:28 +090051
52 private static final IpAddress MANAGEMENT_IP = IpAddress.valueOf("10.10.10.10");
53 private static final IpAddress DATA_IP = IpAddress.valueOf("20.20.20.20");
Jian Li9bc67772020-10-07 02:12:33 +090054 private static final IpAddress NODE_IP = IpAddress.valueOf("30.30.30.30");
Jian Li49109b52019-01-22 00:17:28 +090055
Jian Li7709eb42019-05-08 15:58:04 +090056 private static final String BRIDGE_INTF_1 = "eth1";
57 private static final String BRIDGE_INTF_2 = "eth2";
58
59 private static final IpAddress EXT_BRIDGE_IP_1 = IpAddress.valueOf("10.10.10.5");
60 private static final IpAddress EXT_BRIDGE_IP_2 = IpAddress.valueOf("20.20.20.5");
61
62 private static final IpAddress EXT_GATEWAY_IP_1 = IpAddress.valueOf("10.10.10.1");
63 private static final IpAddress EXT_GATEWAY_IP_2 = IpAddress.valueOf("20.20.20.1");
64
65 private static final String POD_CIDR_1 = "10.10.0.0/24";
66 private static final String POD_CIDR_2 = "20.20.0.0/24";
67
Jian Li49109b52019-01-22 00:17:28 +090068 private K8sNode refNode;
69
70 private static final K8sNode K8S_NODE_1 = createNode(
Jian Li58b33982020-07-01 19:07:02 +090071 CLUSTER_NAME,
Jian Li49109b52019-01-22 00:17:28 +090072 HOSTNAME_1,
73 MINION,
Jian Li58b33982020-07-01 19:07:02 +090074 SEGMENT_ID_1,
75 DEVICE_1,
Jian Li49109b52019-01-22 00:17:28 +090076 DEVICE_1,
Jian Libf562c22019-04-15 18:07:14 +090077 DEVICE_1,
Jian Li121ddfe2019-08-27 02:07:05 +090078 DEVICE_1,
Jian Li7709eb42019-05-08 15:58:04 +090079 BRIDGE_INTF_1,
Jian Li49109b52019-01-22 00:17:28 +090080 TEST_IP,
Jian Li7709eb42019-05-08 15:58:04 +090081 INIT,
82 EXT_BRIDGE_IP_1,
83 EXT_GATEWAY_IP_1,
84 POD_CIDR_1);
Jian Li49109b52019-01-22 00:17:28 +090085 private static final K8sNode K8S_NODE_2 = createNode(
Jian Li58b33982020-07-01 19:07:02 +090086 CLUSTER_NAME,
Jian Li49109b52019-01-22 00:17:28 +090087 HOSTNAME_1,
88 MINION,
Jian Li58b33982020-07-01 19:07:02 +090089 SEGMENT_ID_1,
90 DEVICE_1,
Jian Li49109b52019-01-22 00:17:28 +090091 DEVICE_1,
Jian Libf562c22019-04-15 18:07:14 +090092 DEVICE_1,
Jian Li121ddfe2019-08-27 02:07:05 +090093 DEVICE_1,
Jian Li7709eb42019-05-08 15:58:04 +090094 BRIDGE_INTF_1,
Jian Li49109b52019-01-22 00:17:28 +090095 TEST_IP,
Jian Li7709eb42019-05-08 15:58:04 +090096 INIT,
97 EXT_BRIDGE_IP_1,
98 EXT_GATEWAY_IP_1,
99 POD_CIDR_1);
Jian Li49109b52019-01-22 00:17:28 +0900100 private static final K8sNode K8S_NODE_3 = createNode(
Jian Li58b33982020-07-01 19:07:02 +0900101 CLUSTER_NAME,
Jian Li49109b52019-01-22 00:17:28 +0900102 HOSTNAME_2,
103 MINION,
Jian Li58b33982020-07-01 19:07:02 +0900104 SEGMENT_ID_2,
105 DEVICE_2,
Jian Li49109b52019-01-22 00:17:28 +0900106 DEVICE_2,
Jian Libf562c22019-04-15 18:07:14 +0900107 DEVICE_2,
Jian Li121ddfe2019-08-27 02:07:05 +0900108 DEVICE_2,
Jian Li7709eb42019-05-08 15:58:04 +0900109 BRIDGE_INTF_2,
Jian Li49109b52019-01-22 00:17:28 +0900110 TEST_IP,
Jian Li7709eb42019-05-08 15:58:04 +0900111 INIT,
112 EXT_BRIDGE_IP_2,
113 EXT_GATEWAY_IP_2,
114 POD_CIDR_2);
Jian Li49109b52019-01-22 00:17:28 +0900115
116 /**
117 * Initial setup for this unit test.
118 */
119 @Before
120 public void setUp() {
121 refNode = DefaultK8sNode.builder()
Jian Li58b33982020-07-01 19:07:02 +0900122 .clusterName(CLUSTER_NAME)
Jian Li49109b52019-01-22 00:17:28 +0900123 .hostname(HOSTNAME_1)
124 .type(MINION)
Jian Li58b33982020-07-01 19:07:02 +0900125 .segmentId(SEGMENT_ID_1)
Jian Li49109b52019-01-22 00:17:28 +0900126 .managementIp(MANAGEMENT_IP)
127 .dataIp(DATA_IP)
Jian Li9bc67772020-10-07 02:12:33 +0900128 .nodeIp(NODE_IP)
Jian Li49109b52019-01-22 00:17:28 +0900129 .intgBridge(DEVICE_1.id())
Jian Libf562c22019-04-15 18:07:14 +0900130 .extBridge(DEVICE_1.id())
Jian Li121ddfe2019-08-27 02:07:05 +0900131 .localBridge(DEVICE_1.id())
Jian Li58b33982020-07-01 19:07:02 +0900132 .tunBridge(DEVICE_1.id())
Jian Li7709eb42019-05-08 15:58:04 +0900133 .extIntf(BRIDGE_INTF_1)
Jian Li49109b52019-01-22 00:17:28 +0900134 .state(COMPLETE)
Jian Li7709eb42019-05-08 15:58:04 +0900135 .extBridgeIp(EXT_BRIDGE_IP_1)
136 .extGatewayIp(EXT_GATEWAY_IP_1)
137 .podCidr(POD_CIDR_1)
Jian Li49109b52019-01-22 00:17:28 +0900138 .build();
139 }
140
141 /**
142 * Checks equals method works as expected.
143 */
144 @Test
145 public void testEquality() {
146 new EqualsTester().addEqualityGroup(K8S_NODE_1, K8S_NODE_2)
147 .addEqualityGroup(K8S_NODE_3)
148 .testEquals();
149 }
150
151 /**
152 * Test object construction.
153 */
154 @Test
155 public void testConstruction() {
156 checkCommonProperties(refNode);
157 assertSame(refNode.state(), COMPLETE);
158 assertEquals(refNode.intgBridge(), DEVICE_1.id());
Jian Libf562c22019-04-15 18:07:14 +0900159 assertEquals(refNode.extBridge(), DEVICE_1.id());
Jian Li121ddfe2019-08-27 02:07:05 +0900160 assertEquals(refNode.localBridge(), DEVICE_1.id());
Jian Li58b33982020-07-01 19:07:02 +0900161 assertEquals(refNode.tunBridge(), DEVICE_1.id());
Jian Li49109b52019-01-22 00:17:28 +0900162 }
163
164 /**
165 * Checks the functionality of update state method.
166 */
167 @Test
168 public void testUpdateState() {
169 K8sNode updatedNode = refNode.updateState(DEVICE_CREATED);
170
171 checkCommonProperties(updatedNode);
172 assertSame(updatedNode.state(), DEVICE_CREATED);
173 }
174
175 /**
176 * Checks the functionality of from method.
177 */
178 @Test
179 public void testFrom() {
180 K8sNode updatedNode = DefaultK8sNode.from(refNode).build();
181
182 assertEquals(updatedNode, refNode);
183 }
184
185 /**
186 * Checks building a node without hostname fails with proper exception.
187 */
188 @Test(expected = IllegalArgumentException.class)
189 public void testBuildWithoutHostname() {
190 DefaultK8sNode.builder()
191 .type(MINION)
Jian Li58b33982020-07-01 19:07:02 +0900192 .clusterName(CLUSTER_NAME)
193 .segmentId(SEGMENT_ID_1)
Jian Li49109b52019-01-22 00:17:28 +0900194 .intgBridge(DEVICE_1.id())
Jian Libf562c22019-04-15 18:07:14 +0900195 .extBridge(DEVICE_1.id())
Jian Li121ddfe2019-08-27 02:07:05 +0900196 .localBridge(DEVICE_1.id())
Jian Li58b33982020-07-01 19:07:02 +0900197 .tunBridge(DEVICE_1.id())
Jian Li7709eb42019-05-08 15:58:04 +0900198 .extIntf(BRIDGE_INTF_1)
Jian Li49109b52019-01-22 00:17:28 +0900199 .managementIp(TEST_IP)
200 .dataIp(TEST_IP)
Jian Li9bc67772020-10-07 02:12:33 +0900201 .nodeIp(NODE_IP)
Jian Li49109b52019-01-22 00:17:28 +0900202 .state(INIT)
Jian Li7709eb42019-05-08 15:58:04 +0900203 .extBridgeIp(EXT_BRIDGE_IP_1)
204 .extGatewayIp(EXT_GATEWAY_IP_1)
205 .podCidr(POD_CIDR_1)
Jian Li49109b52019-01-22 00:17:28 +0900206 .build();
207 }
208
209 /**
210 * Checks building a node without type fails with proper exception.
211 */
212 @Test(expected = IllegalArgumentException.class)
213 public void testBuildWithoutType() {
214 DefaultK8sNode.builder()
215 .hostname(HOSTNAME_1)
Jian Li58b33982020-07-01 19:07:02 +0900216 .clusterName(CLUSTER_NAME)
217 .segmentId(SEGMENT_ID_1)
Jian Li49109b52019-01-22 00:17:28 +0900218 .intgBridge(DEVICE_1.id())
Jian Libf562c22019-04-15 18:07:14 +0900219 .extBridge(DEVICE_1.id())
Jian Li121ddfe2019-08-27 02:07:05 +0900220 .localBridge(DEVICE_1.id())
Jian Li58b33982020-07-01 19:07:02 +0900221 .tunBridge(DEVICE_1.id())
Jian Li7709eb42019-05-08 15:58:04 +0900222 .extIntf(BRIDGE_INTF_1)
Jian Li49109b52019-01-22 00:17:28 +0900223 .managementIp(TEST_IP)
224 .dataIp(TEST_IP)
Jian Li9bc67772020-10-07 02:12:33 +0900225 .nodeIp(NODE_IP)
Jian Li49109b52019-01-22 00:17:28 +0900226 .state(INIT)
Jian Li7709eb42019-05-08 15:58:04 +0900227 .extBridgeIp(EXT_BRIDGE_IP_1)
228 .extGatewayIp(EXT_GATEWAY_IP_1)
229 .podCidr(POD_CIDR_1)
Jian Li49109b52019-01-22 00:17:28 +0900230 .build();
231 }
232
233 /**
234 * Checks building a node without management IP address fails with
235 * proper exception.
236 */
237 @Test(expected = IllegalArgumentException.class)
238 public void testBuildWithoutManagementIp() {
239 DefaultK8sNode.builder()
Jian Li58b33982020-07-01 19:07:02 +0900240 .clusterName(CLUSTER_NAME)
Jian Li49109b52019-01-22 00:17:28 +0900241 .hostname(HOSTNAME_1)
242 .type(MINION)
Jian Li58b33982020-07-01 19:07:02 +0900243 .segmentId(SEGMENT_ID_1)
Jian Li49109b52019-01-22 00:17:28 +0900244 .intgBridge(DEVICE_1.id())
Jian Libf562c22019-04-15 18:07:14 +0900245 .extBridge(DEVICE_1.id())
Jian Li121ddfe2019-08-27 02:07:05 +0900246 .localBridge(DEVICE_1.id())
Jian Li58b33982020-07-01 19:07:02 +0900247 .tunBridge(DEVICE_1.id())
Jian Li7709eb42019-05-08 15:58:04 +0900248 .extIntf(BRIDGE_INTF_1)
Jian Li49109b52019-01-22 00:17:28 +0900249 .dataIp(TEST_IP)
Jian Li9bc67772020-10-07 02:12:33 +0900250 .nodeIp(NODE_IP)
Jian Li49109b52019-01-22 00:17:28 +0900251 .state(INIT)
Jian Li7709eb42019-05-08 15:58:04 +0900252 .extBridgeIp(EXT_BRIDGE_IP_1)
253 .extGatewayIp(EXT_GATEWAY_IP_1)
254 .podCidr(POD_CIDR_1)
Jian Li49109b52019-01-22 00:17:28 +0900255 .build();
256 }
257
258 private void checkCommonProperties(K8sNode node) {
Jian Li58b33982020-07-01 19:07:02 +0900259 assertEquals(node.clusterName(), CLUSTER_NAME);
Jian Li49109b52019-01-22 00:17:28 +0900260 assertEquals(node.hostname(), HOSTNAME_1);
261 assertEquals(node.type(), MINION);
262 assertEquals(node.managementIp(), MANAGEMENT_IP);
263 assertEquals(node.dataIp(), DATA_IP);
Jian Li9bc67772020-10-07 02:12:33 +0900264 assertEquals(node.nodeIp(), NODE_IP);
Jian Li49109b52019-01-22 00:17:28 +0900265 }
266
267 private static Device createDevice(long devIdNum) {
268 return new DefaultDevice(new ProviderId("of", "foo"),
269 DeviceId.deviceId(String.format("of:%016d", devIdNum)),
270 SWITCH,
271 "manufacturer",
272 "hwVersion",
273 "swVersion",
274 "serialNumber",
275 new ChassisId(1));
276 }
277
Jian Li58b33982020-07-01 19:07:02 +0900278 private static K8sNode createNode(String clusterName, String hostname, Type type,
279 int segmentId, Device intgBridge, Device extBridge,
280 Device localBridge, Device tunBridge, String bridgeIntf,
Jian Li121ddfe2019-08-27 02:07:05 +0900281 IpAddress ipAddr, K8sNodeState state,
282 IpAddress extBridgeIp, IpAddress extGatewayIp,
283 String podCidr) {
Jian Li49109b52019-01-22 00:17:28 +0900284 return DefaultK8sNode.builder()
Jian Li58b33982020-07-01 19:07:02 +0900285 .clusterName(clusterName)
Jian Li49109b52019-01-22 00:17:28 +0900286 .hostname(hostname)
287 .type(type)
Jian Li58b33982020-07-01 19:07:02 +0900288 .segmentId(segmentId)
Jian Li49109b52019-01-22 00:17:28 +0900289 .intgBridge(intgBridge.id())
Jian Libf562c22019-04-15 18:07:14 +0900290 .extBridge(extBridge.id())
Jian Li121ddfe2019-08-27 02:07:05 +0900291 .localBridge(localBridge.id())
Jian Li58b33982020-07-01 19:07:02 +0900292 .tunBridge(tunBridge.id())
Jian Li7709eb42019-05-08 15:58:04 +0900293 .extIntf(bridgeIntf)
Jian Li49109b52019-01-22 00:17:28 +0900294 .managementIp(ipAddr)
295 .dataIp(ipAddr)
Jian Li9bc67772020-10-07 02:12:33 +0900296 .nodeIp(ipAddr)
Jian Li49109b52019-01-22 00:17:28 +0900297 .state(state)
Jian Li7709eb42019-05-08 15:58:04 +0900298 .extBridgeIp(extBridgeIp)
299 .extGatewayIp(extGatewayIp)
300 .podCidr(podCidr)
Jian Li49109b52019-01-22 00:17:28 +0900301 .build();
302 }
303}