blob: 463d89d04fea56482a3d28bd88b01bcfae3fc6fe [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
44 private static final String HOSTNAME_1 = "hostname_1";
45 private static final String HOSTNAME_2 = "hostname_2";
46 private static final Device DEVICE_1 = createDevice(1);
47 private static final Device DEVICE_2 = createDevice(2);
48
49 private static final IpAddress MANAGEMENT_IP = IpAddress.valueOf("10.10.10.10");
50 private static final IpAddress DATA_IP = IpAddress.valueOf("20.20.20.20");
51
Jian Li7709eb42019-05-08 15:58:04 +090052 private static final String BRIDGE_INTF_1 = "eth1";
53 private static final String BRIDGE_INTF_2 = "eth2";
54
55 private static final IpAddress EXT_BRIDGE_IP_1 = IpAddress.valueOf("10.10.10.5");
56 private static final IpAddress EXT_BRIDGE_IP_2 = IpAddress.valueOf("20.20.20.5");
57
58 private static final IpAddress EXT_GATEWAY_IP_1 = IpAddress.valueOf("10.10.10.1");
59 private static final IpAddress EXT_GATEWAY_IP_2 = IpAddress.valueOf("20.20.20.1");
60
61 private static final String POD_CIDR_1 = "10.10.0.0/24";
62 private static final String POD_CIDR_2 = "20.20.0.0/24";
63
Jian Li49109b52019-01-22 00:17:28 +090064 private K8sNode refNode;
65
66 private static final K8sNode K8S_NODE_1 = createNode(
67 HOSTNAME_1,
68 MINION,
69 DEVICE_1,
Jian Libf562c22019-04-15 18:07:14 +090070 DEVICE_1,
Jian Li121ddfe2019-08-27 02:07:05 +090071 DEVICE_1,
Jian Li7709eb42019-05-08 15:58:04 +090072 BRIDGE_INTF_1,
Jian Li49109b52019-01-22 00:17:28 +090073 TEST_IP,
Jian Li7709eb42019-05-08 15:58:04 +090074 INIT,
75 EXT_BRIDGE_IP_1,
76 EXT_GATEWAY_IP_1,
77 POD_CIDR_1);
Jian Li49109b52019-01-22 00:17:28 +090078 private static final K8sNode K8S_NODE_2 = createNode(
79 HOSTNAME_1,
80 MINION,
81 DEVICE_1,
Jian Libf562c22019-04-15 18:07:14 +090082 DEVICE_1,
Jian Li121ddfe2019-08-27 02:07:05 +090083 DEVICE_1,
Jian Li7709eb42019-05-08 15:58:04 +090084 BRIDGE_INTF_1,
Jian Li49109b52019-01-22 00:17:28 +090085 TEST_IP,
Jian Li7709eb42019-05-08 15:58:04 +090086 INIT,
87 EXT_BRIDGE_IP_1,
88 EXT_GATEWAY_IP_1,
89 POD_CIDR_1);
Jian Li49109b52019-01-22 00:17:28 +090090 private static final K8sNode K8S_NODE_3 = createNode(
91 HOSTNAME_2,
92 MINION,
93 DEVICE_2,
Jian Libf562c22019-04-15 18:07:14 +090094 DEVICE_2,
Jian Li121ddfe2019-08-27 02:07:05 +090095 DEVICE_2,
Jian Li7709eb42019-05-08 15:58:04 +090096 BRIDGE_INTF_2,
Jian Li49109b52019-01-22 00:17:28 +090097 TEST_IP,
Jian Li7709eb42019-05-08 15:58:04 +090098 INIT,
99 EXT_BRIDGE_IP_2,
100 EXT_GATEWAY_IP_2,
101 POD_CIDR_2);
Jian Li49109b52019-01-22 00:17:28 +0900102
103 /**
104 * Initial setup for this unit test.
105 */
106 @Before
107 public void setUp() {
108 refNode = DefaultK8sNode.builder()
109 .hostname(HOSTNAME_1)
110 .type(MINION)
111 .managementIp(MANAGEMENT_IP)
112 .dataIp(DATA_IP)
113 .intgBridge(DEVICE_1.id())
Jian Libf562c22019-04-15 18:07:14 +0900114 .extBridge(DEVICE_1.id())
Jian Li121ddfe2019-08-27 02:07:05 +0900115 .localBridge(DEVICE_1.id())
Jian Li7709eb42019-05-08 15:58:04 +0900116 .extIntf(BRIDGE_INTF_1)
Jian Li49109b52019-01-22 00:17:28 +0900117 .state(COMPLETE)
Jian Li7709eb42019-05-08 15:58:04 +0900118 .extBridgeIp(EXT_BRIDGE_IP_1)
119 .extGatewayIp(EXT_GATEWAY_IP_1)
120 .podCidr(POD_CIDR_1)
Jian Li49109b52019-01-22 00:17:28 +0900121 .build();
122 }
123
124 /**
125 * Checks equals method works as expected.
126 */
127 @Test
128 public void testEquality() {
129 new EqualsTester().addEqualityGroup(K8S_NODE_1, K8S_NODE_2)
130 .addEqualityGroup(K8S_NODE_3)
131 .testEquals();
132 }
133
134 /**
135 * Test object construction.
136 */
137 @Test
138 public void testConstruction() {
139 checkCommonProperties(refNode);
140 assertSame(refNode.state(), COMPLETE);
141 assertEquals(refNode.intgBridge(), DEVICE_1.id());
Jian Libf562c22019-04-15 18:07:14 +0900142 assertEquals(refNode.extBridge(), DEVICE_1.id());
Jian Li121ddfe2019-08-27 02:07:05 +0900143 assertEquals(refNode.localBridge(), DEVICE_1.id());
Jian Li49109b52019-01-22 00:17:28 +0900144 }
145
146 /**
147 * Checks the functionality of update state method.
148 */
149 @Test
150 public void testUpdateState() {
151 K8sNode updatedNode = refNode.updateState(DEVICE_CREATED);
152
153 checkCommonProperties(updatedNode);
154 assertSame(updatedNode.state(), DEVICE_CREATED);
155 }
156
157 /**
158 * Checks the functionality of from method.
159 */
160 @Test
161 public void testFrom() {
162 K8sNode updatedNode = DefaultK8sNode.from(refNode).build();
163
164 assertEquals(updatedNode, refNode);
165 }
166
167 /**
168 * Checks building a node without hostname fails with proper exception.
169 */
170 @Test(expected = IllegalArgumentException.class)
171 public void testBuildWithoutHostname() {
172 DefaultK8sNode.builder()
173 .type(MINION)
174 .intgBridge(DEVICE_1.id())
Jian Libf562c22019-04-15 18:07:14 +0900175 .extBridge(DEVICE_1.id())
Jian Li121ddfe2019-08-27 02:07:05 +0900176 .localBridge(DEVICE_1.id())
Jian Li7709eb42019-05-08 15:58:04 +0900177 .extIntf(BRIDGE_INTF_1)
Jian Li49109b52019-01-22 00:17:28 +0900178 .managementIp(TEST_IP)
179 .dataIp(TEST_IP)
180 .state(INIT)
Jian Li7709eb42019-05-08 15:58:04 +0900181 .extBridgeIp(EXT_BRIDGE_IP_1)
182 .extGatewayIp(EXT_GATEWAY_IP_1)
183 .podCidr(POD_CIDR_1)
Jian Li49109b52019-01-22 00:17:28 +0900184 .build();
185 }
186
187 /**
188 * Checks building a node without type fails with proper exception.
189 */
190 @Test(expected = IllegalArgumentException.class)
191 public void testBuildWithoutType() {
192 DefaultK8sNode.builder()
193 .hostname(HOSTNAME_1)
194 .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 Li7709eb42019-05-08 15:58:04 +0900197 .extIntf(BRIDGE_INTF_1)
Jian Li49109b52019-01-22 00:17:28 +0900198 .managementIp(TEST_IP)
199 .dataIp(TEST_IP)
200 .state(INIT)
Jian Li7709eb42019-05-08 15:58:04 +0900201 .extBridgeIp(EXT_BRIDGE_IP_1)
202 .extGatewayIp(EXT_GATEWAY_IP_1)
203 .podCidr(POD_CIDR_1)
Jian Li49109b52019-01-22 00:17:28 +0900204 .build();
205 }
206
207 /**
208 * Checks building a node without management IP address fails with
209 * proper exception.
210 */
211 @Test(expected = IllegalArgumentException.class)
212 public void testBuildWithoutManagementIp() {
213 DefaultK8sNode.builder()
214 .hostname(HOSTNAME_1)
215 .type(MINION)
216 .intgBridge(DEVICE_1.id())
Jian Libf562c22019-04-15 18:07:14 +0900217 .extBridge(DEVICE_1.id())
Jian Li121ddfe2019-08-27 02:07:05 +0900218 .localBridge(DEVICE_1.id())
Jian Li7709eb42019-05-08 15:58:04 +0900219 .extIntf(BRIDGE_INTF_1)
Jian Li49109b52019-01-22 00:17:28 +0900220 .dataIp(TEST_IP)
221 .state(INIT)
Jian Li7709eb42019-05-08 15:58:04 +0900222 .extBridgeIp(EXT_BRIDGE_IP_1)
223 .extGatewayIp(EXT_GATEWAY_IP_1)
224 .podCidr(POD_CIDR_1)
Jian Li49109b52019-01-22 00:17:28 +0900225 .build();
226 }
227
228 private void checkCommonProperties(K8sNode node) {
229 assertEquals(node.hostname(), HOSTNAME_1);
230 assertEquals(node.type(), MINION);
231 assertEquals(node.managementIp(), MANAGEMENT_IP);
232 assertEquals(node.dataIp(), DATA_IP);
233 }
234
235 private static Device createDevice(long devIdNum) {
236 return new DefaultDevice(new ProviderId("of", "foo"),
237 DeviceId.deviceId(String.format("of:%016d", devIdNum)),
238 SWITCH,
239 "manufacturer",
240 "hwVersion",
241 "swVersion",
242 "serialNumber",
243 new ChassisId(1));
244 }
245
246 private static K8sNode createNode(String hostname, Type type,
Jian Libf562c22019-04-15 18:07:14 +0900247 Device intgBridge, Device extBridge,
Jian Li121ddfe2019-08-27 02:07:05 +0900248 Device localBridge, String bridgeIntf,
249 IpAddress ipAddr, K8sNodeState state,
250 IpAddress extBridgeIp, IpAddress extGatewayIp,
251 String podCidr) {
Jian Li49109b52019-01-22 00:17:28 +0900252 return DefaultK8sNode.builder()
253 .hostname(hostname)
254 .type(type)
255 .intgBridge(intgBridge.id())
Jian Libf562c22019-04-15 18:07:14 +0900256 .extBridge(extBridge.id())
Jian Li121ddfe2019-08-27 02:07:05 +0900257 .localBridge(localBridge.id())
Jian Li7709eb42019-05-08 15:58:04 +0900258 .extIntf(bridgeIntf)
Jian Li49109b52019-01-22 00:17:28 +0900259 .managementIp(ipAddr)
260 .dataIp(ipAddr)
261 .state(state)
Jian Li7709eb42019-05-08 15:58:04 +0900262 .extBridgeIp(extBridgeIp)
263 .extGatewayIp(extGatewayIp)
264 .podCidr(podCidr)
Jian Li49109b52019-01-22 00:17:28 +0900265 .build();
266 }
267}