blob: 166b528d26afe8186ecc8bceefc97db65ee151fc [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 Li7709eb42019-05-08 15:58:04 +090071 BRIDGE_INTF_1,
Jian Li49109b52019-01-22 00:17:28 +090072 TEST_IP,
Jian Li7709eb42019-05-08 15:58:04 +090073 INIT,
74 EXT_BRIDGE_IP_1,
75 EXT_GATEWAY_IP_1,
76 POD_CIDR_1);
Jian Li49109b52019-01-22 00:17:28 +090077 private static final K8sNode K8S_NODE_2 = createNode(
78 HOSTNAME_1,
79 MINION,
80 DEVICE_1,
Jian Libf562c22019-04-15 18:07:14 +090081 DEVICE_1,
Jian Li7709eb42019-05-08 15:58:04 +090082 BRIDGE_INTF_1,
Jian Li49109b52019-01-22 00:17:28 +090083 TEST_IP,
Jian Li7709eb42019-05-08 15:58:04 +090084 INIT,
85 EXT_BRIDGE_IP_1,
86 EXT_GATEWAY_IP_1,
87 POD_CIDR_1);
Jian Li49109b52019-01-22 00:17:28 +090088 private static final K8sNode K8S_NODE_3 = createNode(
89 HOSTNAME_2,
90 MINION,
91 DEVICE_2,
Jian Libf562c22019-04-15 18:07:14 +090092 DEVICE_2,
Jian Li7709eb42019-05-08 15:58:04 +090093 BRIDGE_INTF_2,
Jian Li49109b52019-01-22 00:17:28 +090094 TEST_IP,
Jian Li7709eb42019-05-08 15:58:04 +090095 INIT,
96 EXT_BRIDGE_IP_2,
97 EXT_GATEWAY_IP_2,
98 POD_CIDR_2);
Jian Li49109b52019-01-22 00:17:28 +090099
100 /**
101 * Initial setup for this unit test.
102 */
103 @Before
104 public void setUp() {
105 refNode = DefaultK8sNode.builder()
106 .hostname(HOSTNAME_1)
107 .type(MINION)
108 .managementIp(MANAGEMENT_IP)
109 .dataIp(DATA_IP)
110 .intgBridge(DEVICE_1.id())
Jian Libf562c22019-04-15 18:07:14 +0900111 .extBridge(DEVICE_1.id())
Jian Li7709eb42019-05-08 15:58:04 +0900112 .extIntf(BRIDGE_INTF_1)
Jian Li49109b52019-01-22 00:17:28 +0900113 .state(COMPLETE)
Jian Li7709eb42019-05-08 15:58:04 +0900114 .extBridgeIp(EXT_BRIDGE_IP_1)
115 .extGatewayIp(EXT_GATEWAY_IP_1)
116 .podCidr(POD_CIDR_1)
Jian Li49109b52019-01-22 00:17:28 +0900117 .build();
118 }
119
120 /**
121 * Checks equals method works as expected.
122 */
123 @Test
124 public void testEquality() {
125 new EqualsTester().addEqualityGroup(K8S_NODE_1, K8S_NODE_2)
126 .addEqualityGroup(K8S_NODE_3)
127 .testEquals();
128 }
129
130 /**
131 * Test object construction.
132 */
133 @Test
134 public void testConstruction() {
135 checkCommonProperties(refNode);
136 assertSame(refNode.state(), COMPLETE);
137 assertEquals(refNode.intgBridge(), DEVICE_1.id());
Jian Libf562c22019-04-15 18:07:14 +0900138 assertEquals(refNode.extBridge(), DEVICE_1.id());
Jian Li49109b52019-01-22 00:17:28 +0900139 }
140
141 /**
142 * Checks the functionality of update state method.
143 */
144 @Test
145 public void testUpdateState() {
146 K8sNode updatedNode = refNode.updateState(DEVICE_CREATED);
147
148 checkCommonProperties(updatedNode);
149 assertSame(updatedNode.state(), DEVICE_CREATED);
150 }
151
152 /**
153 * Checks the functionality of from method.
154 */
155 @Test
156 public void testFrom() {
157 K8sNode updatedNode = DefaultK8sNode.from(refNode).build();
158
159 assertEquals(updatedNode, refNode);
160 }
161
162 /**
163 * Checks building a node without hostname fails with proper exception.
164 */
165 @Test(expected = IllegalArgumentException.class)
166 public void testBuildWithoutHostname() {
167 DefaultK8sNode.builder()
168 .type(MINION)
169 .intgBridge(DEVICE_1.id())
Jian Libf562c22019-04-15 18:07:14 +0900170 .extBridge(DEVICE_1.id())
Jian Li7709eb42019-05-08 15:58:04 +0900171 .extIntf(BRIDGE_INTF_1)
Jian Li49109b52019-01-22 00:17:28 +0900172 .managementIp(TEST_IP)
173 .dataIp(TEST_IP)
174 .state(INIT)
Jian Li7709eb42019-05-08 15:58:04 +0900175 .extBridgeIp(EXT_BRIDGE_IP_1)
176 .extGatewayIp(EXT_GATEWAY_IP_1)
177 .podCidr(POD_CIDR_1)
Jian Li49109b52019-01-22 00:17:28 +0900178 .build();
179 }
180
181 /**
182 * Checks building a node without type fails with proper exception.
183 */
184 @Test(expected = IllegalArgumentException.class)
185 public void testBuildWithoutType() {
186 DefaultK8sNode.builder()
187 .hostname(HOSTNAME_1)
188 .intgBridge(DEVICE_1.id())
Jian Libf562c22019-04-15 18:07:14 +0900189 .extBridge(DEVICE_1.id())
Jian Li7709eb42019-05-08 15:58:04 +0900190 .extIntf(BRIDGE_INTF_1)
Jian Li49109b52019-01-22 00:17:28 +0900191 .managementIp(TEST_IP)
192 .dataIp(TEST_IP)
193 .state(INIT)
Jian Li7709eb42019-05-08 15:58:04 +0900194 .extBridgeIp(EXT_BRIDGE_IP_1)
195 .extGatewayIp(EXT_GATEWAY_IP_1)
196 .podCidr(POD_CIDR_1)
Jian Li49109b52019-01-22 00:17:28 +0900197 .build();
198 }
199
200 /**
201 * Checks building a node without management IP address fails with
202 * proper exception.
203 */
204 @Test(expected = IllegalArgumentException.class)
205 public void testBuildWithoutManagementIp() {
206 DefaultK8sNode.builder()
207 .hostname(HOSTNAME_1)
208 .type(MINION)
209 .intgBridge(DEVICE_1.id())
Jian Libf562c22019-04-15 18:07:14 +0900210 .extBridge(DEVICE_1.id())
Jian Li7709eb42019-05-08 15:58:04 +0900211 .extIntf(BRIDGE_INTF_1)
Jian Li49109b52019-01-22 00:17:28 +0900212 .dataIp(TEST_IP)
213 .state(INIT)
Jian Li7709eb42019-05-08 15:58:04 +0900214 .extBridgeIp(EXT_BRIDGE_IP_1)
215 .extGatewayIp(EXT_GATEWAY_IP_1)
216 .podCidr(POD_CIDR_1)
Jian Li49109b52019-01-22 00:17:28 +0900217 .build();
218 }
219
220 private void checkCommonProperties(K8sNode node) {
221 assertEquals(node.hostname(), HOSTNAME_1);
222 assertEquals(node.type(), MINION);
223 assertEquals(node.managementIp(), MANAGEMENT_IP);
224 assertEquals(node.dataIp(), DATA_IP);
225 }
226
227 private static Device createDevice(long devIdNum) {
228 return new DefaultDevice(new ProviderId("of", "foo"),
229 DeviceId.deviceId(String.format("of:%016d", devIdNum)),
230 SWITCH,
231 "manufacturer",
232 "hwVersion",
233 "swVersion",
234 "serialNumber",
235 new ChassisId(1));
236 }
237
238 private static K8sNode createNode(String hostname, Type type,
Jian Libf562c22019-04-15 18:07:14 +0900239 Device intgBridge, Device extBridge,
Jian Li7709eb42019-05-08 15:58:04 +0900240 String bridgeIntf, IpAddress ipAddr,
241 K8sNodeState state, IpAddress extBridgeIp,
242 IpAddress extGatewayIp, String podCidr) {
Jian Li49109b52019-01-22 00:17:28 +0900243 return DefaultK8sNode.builder()
244 .hostname(hostname)
245 .type(type)
246 .intgBridge(intgBridge.id())
Jian Libf562c22019-04-15 18:07:14 +0900247 .extBridge(extBridge.id())
Jian Li7709eb42019-05-08 15:58:04 +0900248 .extIntf(bridgeIntf)
Jian Li49109b52019-01-22 00:17:28 +0900249 .managementIp(ipAddr)
250 .dataIp(ipAddr)
251 .state(state)
Jian Li7709eb42019-05-08 15:58:04 +0900252 .extBridgeIp(extBridgeIp)
253 .extGatewayIp(extGatewayIp)
254 .podCidr(podCidr)
Jian Li49109b52019-01-22 00:17:28 +0900255 .build();
256 }
257}