blob: 26553a86a9b67dd1cd222fbe964dbbad2fecb7e3 [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 Lie2a04ce2020-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 Lie2a04ce2020-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");
54
Jian Li0c632722019-05-08 15:58:04 +090055 private static final String BRIDGE_INTF_1 = "eth1";
56 private static final String BRIDGE_INTF_2 = "eth2";
57
58 private static final IpAddress EXT_BRIDGE_IP_1 = IpAddress.valueOf("10.10.10.5");
59 private static final IpAddress EXT_BRIDGE_IP_2 = IpAddress.valueOf("20.20.20.5");
60
61 private static final IpAddress EXT_GATEWAY_IP_1 = IpAddress.valueOf("10.10.10.1");
62 private static final IpAddress EXT_GATEWAY_IP_2 = IpAddress.valueOf("20.20.20.1");
63
64 private static final String POD_CIDR_1 = "10.10.0.0/24";
65 private static final String POD_CIDR_2 = "20.20.0.0/24";
66
Jian Li49109b52019-01-22 00:17:28 +090067 private K8sNode refNode;
68
69 private static final K8sNode K8S_NODE_1 = createNode(
Jian Lie2a04ce2020-07-01 19:07:02 +090070 CLUSTER_NAME,
Jian Li49109b52019-01-22 00:17:28 +090071 HOSTNAME_1,
72 MINION,
Jian Lie2a04ce2020-07-01 19:07:02 +090073 SEGMENT_ID_1,
74 DEVICE_1,
Jian Li49109b52019-01-22 00:17:28 +090075 DEVICE_1,
Jian Libf562c22019-04-15 18:07:14 +090076 DEVICE_1,
Jian Li1a2eb5d2019-08-27 02:07:05 +090077 DEVICE_1,
Jian Li0c632722019-05-08 15:58:04 +090078 BRIDGE_INTF_1,
Jian Li49109b52019-01-22 00:17:28 +090079 TEST_IP,
Jian Li0c632722019-05-08 15:58:04 +090080 INIT,
81 EXT_BRIDGE_IP_1,
82 EXT_GATEWAY_IP_1,
83 POD_CIDR_1);
Jian Li49109b52019-01-22 00:17:28 +090084 private static final K8sNode K8S_NODE_2 = createNode(
Jian Lie2a04ce2020-07-01 19:07:02 +090085 CLUSTER_NAME,
Jian Li49109b52019-01-22 00:17:28 +090086 HOSTNAME_1,
87 MINION,
Jian Lie2a04ce2020-07-01 19:07:02 +090088 SEGMENT_ID_1,
89 DEVICE_1,
Jian Li49109b52019-01-22 00:17:28 +090090 DEVICE_1,
Jian Libf562c22019-04-15 18:07:14 +090091 DEVICE_1,
Jian Li1a2eb5d2019-08-27 02:07:05 +090092 DEVICE_1,
Jian Li0c632722019-05-08 15:58:04 +090093 BRIDGE_INTF_1,
Jian Li49109b52019-01-22 00:17:28 +090094 TEST_IP,
Jian Li0c632722019-05-08 15:58:04 +090095 INIT,
96 EXT_BRIDGE_IP_1,
97 EXT_GATEWAY_IP_1,
98 POD_CIDR_1);
Jian Li49109b52019-01-22 00:17:28 +090099 private static final K8sNode K8S_NODE_3 = createNode(
Jian Lie2a04ce2020-07-01 19:07:02 +0900100 CLUSTER_NAME,
Jian Li49109b52019-01-22 00:17:28 +0900101 HOSTNAME_2,
102 MINION,
Jian Lie2a04ce2020-07-01 19:07:02 +0900103 SEGMENT_ID_2,
104 DEVICE_2,
Jian Li49109b52019-01-22 00:17:28 +0900105 DEVICE_2,
Jian Libf562c22019-04-15 18:07:14 +0900106 DEVICE_2,
Jian Li1a2eb5d2019-08-27 02:07:05 +0900107 DEVICE_2,
Jian Li0c632722019-05-08 15:58:04 +0900108 BRIDGE_INTF_2,
Jian Li49109b52019-01-22 00:17:28 +0900109 TEST_IP,
Jian Li0c632722019-05-08 15:58:04 +0900110 INIT,
111 EXT_BRIDGE_IP_2,
112 EXT_GATEWAY_IP_2,
113 POD_CIDR_2);
Jian Li49109b52019-01-22 00:17:28 +0900114
115 /**
116 * Initial setup for this unit test.
117 */
118 @Before
119 public void setUp() {
120 refNode = DefaultK8sNode.builder()
Jian Lie2a04ce2020-07-01 19:07:02 +0900121 .clusterName(CLUSTER_NAME)
Jian Li49109b52019-01-22 00:17:28 +0900122 .hostname(HOSTNAME_1)
123 .type(MINION)
Jian Lie2a04ce2020-07-01 19:07:02 +0900124 .segmentId(SEGMENT_ID_1)
Jian Li49109b52019-01-22 00:17:28 +0900125 .managementIp(MANAGEMENT_IP)
126 .dataIp(DATA_IP)
127 .intgBridge(DEVICE_1.id())
Jian Libf562c22019-04-15 18:07:14 +0900128 .extBridge(DEVICE_1.id())
Jian Li1a2eb5d2019-08-27 02:07:05 +0900129 .localBridge(DEVICE_1.id())
Jian Lie2a04ce2020-07-01 19:07:02 +0900130 .tunBridge(DEVICE_1.id())
Jian Li0c632722019-05-08 15:58:04 +0900131 .extIntf(BRIDGE_INTF_1)
Jian Li49109b52019-01-22 00:17:28 +0900132 .state(COMPLETE)
Jian Li0c632722019-05-08 15:58:04 +0900133 .extBridgeIp(EXT_BRIDGE_IP_1)
134 .extGatewayIp(EXT_GATEWAY_IP_1)
135 .podCidr(POD_CIDR_1)
Jian Li49109b52019-01-22 00:17:28 +0900136 .build();
137 }
138
139 /**
140 * Checks equals method works as expected.
141 */
142 @Test
143 public void testEquality() {
144 new EqualsTester().addEqualityGroup(K8S_NODE_1, K8S_NODE_2)
145 .addEqualityGroup(K8S_NODE_3)
146 .testEquals();
147 }
148
149 /**
150 * Test object construction.
151 */
152 @Test
153 public void testConstruction() {
154 checkCommonProperties(refNode);
155 assertSame(refNode.state(), COMPLETE);
156 assertEquals(refNode.intgBridge(), DEVICE_1.id());
Jian Libf562c22019-04-15 18:07:14 +0900157 assertEquals(refNode.extBridge(), DEVICE_1.id());
Jian Li1a2eb5d2019-08-27 02:07:05 +0900158 assertEquals(refNode.localBridge(), DEVICE_1.id());
Jian Lie2a04ce2020-07-01 19:07:02 +0900159 assertEquals(refNode.tunBridge(), DEVICE_1.id());
Jian Li49109b52019-01-22 00:17:28 +0900160 }
161
162 /**
163 * Checks the functionality of update state method.
164 */
165 @Test
166 public void testUpdateState() {
167 K8sNode updatedNode = refNode.updateState(DEVICE_CREATED);
168
169 checkCommonProperties(updatedNode);
170 assertSame(updatedNode.state(), DEVICE_CREATED);
171 }
172
173 /**
174 * Checks the functionality of from method.
175 */
176 @Test
177 public void testFrom() {
178 K8sNode updatedNode = DefaultK8sNode.from(refNode).build();
179
180 assertEquals(updatedNode, refNode);
181 }
182
183 /**
184 * Checks building a node without hostname fails with proper exception.
185 */
186 @Test(expected = IllegalArgumentException.class)
187 public void testBuildWithoutHostname() {
188 DefaultK8sNode.builder()
189 .type(MINION)
Jian Lie2a04ce2020-07-01 19:07:02 +0900190 .clusterName(CLUSTER_NAME)
191 .segmentId(SEGMENT_ID_1)
Jian Li49109b52019-01-22 00:17:28 +0900192 .intgBridge(DEVICE_1.id())
Jian Libf562c22019-04-15 18:07:14 +0900193 .extBridge(DEVICE_1.id())
Jian Li1a2eb5d2019-08-27 02:07:05 +0900194 .localBridge(DEVICE_1.id())
Jian Lie2a04ce2020-07-01 19:07:02 +0900195 .tunBridge(DEVICE_1.id())
Jian Li0c632722019-05-08 15:58:04 +0900196 .extIntf(BRIDGE_INTF_1)
Jian Li49109b52019-01-22 00:17:28 +0900197 .managementIp(TEST_IP)
198 .dataIp(TEST_IP)
199 .state(INIT)
Jian Li0c632722019-05-08 15:58:04 +0900200 .extBridgeIp(EXT_BRIDGE_IP_1)
201 .extGatewayIp(EXT_GATEWAY_IP_1)
202 .podCidr(POD_CIDR_1)
Jian Li49109b52019-01-22 00:17:28 +0900203 .build();
204 }
205
206 /**
207 * Checks building a node without type fails with proper exception.
208 */
209 @Test(expected = IllegalArgumentException.class)
210 public void testBuildWithoutType() {
211 DefaultK8sNode.builder()
212 .hostname(HOSTNAME_1)
Jian Lie2a04ce2020-07-01 19:07:02 +0900213 .clusterName(CLUSTER_NAME)
214 .segmentId(SEGMENT_ID_1)
Jian Li49109b52019-01-22 00:17:28 +0900215 .intgBridge(DEVICE_1.id())
Jian Libf562c22019-04-15 18:07:14 +0900216 .extBridge(DEVICE_1.id())
Jian Li1a2eb5d2019-08-27 02:07:05 +0900217 .localBridge(DEVICE_1.id())
Jian Lie2a04ce2020-07-01 19:07:02 +0900218 .tunBridge(DEVICE_1.id())
Jian Li0c632722019-05-08 15:58:04 +0900219 .extIntf(BRIDGE_INTF_1)
Jian Li49109b52019-01-22 00:17:28 +0900220 .managementIp(TEST_IP)
221 .dataIp(TEST_IP)
222 .state(INIT)
Jian Li0c632722019-05-08 15:58:04 +0900223 .extBridgeIp(EXT_BRIDGE_IP_1)
224 .extGatewayIp(EXT_GATEWAY_IP_1)
225 .podCidr(POD_CIDR_1)
Jian Li49109b52019-01-22 00:17:28 +0900226 .build();
227 }
228
229 /**
230 * Checks building a node without management IP address fails with
231 * proper exception.
232 */
233 @Test(expected = IllegalArgumentException.class)
234 public void testBuildWithoutManagementIp() {
235 DefaultK8sNode.builder()
Jian Lie2a04ce2020-07-01 19:07:02 +0900236 .clusterName(CLUSTER_NAME)
Jian Li49109b52019-01-22 00:17:28 +0900237 .hostname(HOSTNAME_1)
238 .type(MINION)
Jian Lie2a04ce2020-07-01 19:07:02 +0900239 .segmentId(SEGMENT_ID_1)
Jian Li49109b52019-01-22 00:17:28 +0900240 .intgBridge(DEVICE_1.id())
Jian Libf562c22019-04-15 18:07:14 +0900241 .extBridge(DEVICE_1.id())
Jian Li1a2eb5d2019-08-27 02:07:05 +0900242 .localBridge(DEVICE_1.id())
Jian Lie2a04ce2020-07-01 19:07:02 +0900243 .tunBridge(DEVICE_1.id())
Jian Li0c632722019-05-08 15:58:04 +0900244 .extIntf(BRIDGE_INTF_1)
Jian Li49109b52019-01-22 00:17:28 +0900245 .dataIp(TEST_IP)
246 .state(INIT)
Jian Li0c632722019-05-08 15:58:04 +0900247 .extBridgeIp(EXT_BRIDGE_IP_1)
248 .extGatewayIp(EXT_GATEWAY_IP_1)
249 .podCidr(POD_CIDR_1)
Jian Li49109b52019-01-22 00:17:28 +0900250 .build();
251 }
252
253 private void checkCommonProperties(K8sNode node) {
Jian Lie2a04ce2020-07-01 19:07:02 +0900254 assertEquals(node.clusterName(), CLUSTER_NAME);
Jian Li49109b52019-01-22 00:17:28 +0900255 assertEquals(node.hostname(), HOSTNAME_1);
256 assertEquals(node.type(), MINION);
257 assertEquals(node.managementIp(), MANAGEMENT_IP);
258 assertEquals(node.dataIp(), DATA_IP);
259 }
260
261 private static Device createDevice(long devIdNum) {
262 return new DefaultDevice(new ProviderId("of", "foo"),
263 DeviceId.deviceId(String.format("of:%016d", devIdNum)),
264 SWITCH,
265 "manufacturer",
266 "hwVersion",
267 "swVersion",
268 "serialNumber",
269 new ChassisId(1));
270 }
271
Jian Lie2a04ce2020-07-01 19:07:02 +0900272 private static K8sNode createNode(String clusterName, String hostname, Type type,
273 int segmentId, Device intgBridge, Device extBridge,
274 Device localBridge, Device tunBridge, String bridgeIntf,
Jian Li1a2eb5d2019-08-27 02:07:05 +0900275 IpAddress ipAddr, K8sNodeState state,
276 IpAddress extBridgeIp, IpAddress extGatewayIp,
277 String podCidr) {
Jian Li49109b52019-01-22 00:17:28 +0900278 return DefaultK8sNode.builder()
Jian Lie2a04ce2020-07-01 19:07:02 +0900279 .clusterName(clusterName)
Jian Li49109b52019-01-22 00:17:28 +0900280 .hostname(hostname)
281 .type(type)
Jian Lie2a04ce2020-07-01 19:07:02 +0900282 .segmentId(segmentId)
Jian Li49109b52019-01-22 00:17:28 +0900283 .intgBridge(intgBridge.id())
Jian Libf562c22019-04-15 18:07:14 +0900284 .extBridge(extBridge.id())
Jian Li1a2eb5d2019-08-27 02:07:05 +0900285 .localBridge(localBridge.id())
Jian Lie2a04ce2020-07-01 19:07:02 +0900286 .tunBridge(tunBridge.id())
Jian Li0c632722019-05-08 15:58:04 +0900287 .extIntf(bridgeIntf)
Jian Li49109b52019-01-22 00:17:28 +0900288 .managementIp(ipAddr)
289 .dataIp(ipAddr)
290 .state(state)
Jian Li0c632722019-05-08 15:58:04 +0900291 .extBridgeIp(extBridgeIp)
292 .extGatewayIp(extGatewayIp)
293 .podCidr(podCidr)
Jian Li49109b52019-01-22 00:17:28 +0900294 .build();
295 }
296}