blob: b453dad3e142242c64ea0c6e0bff790f470752a2 [file] [log] [blame]
Jian Lif97a07e2021-01-13 18:05:00 +09001/*
2 * Copyright 2021-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.kubevirtnetworking.web;
17
18import org.glassfish.jersey.server.ResourceConfig;
19import org.junit.Before;
20import org.junit.Test;
21import org.onlab.osgi.ServiceDirectory;
22import org.onlab.osgi.TestServiceDirectory;
23import org.onlab.packet.IpAddress;
24import org.onosproject.codec.CodecService;
25import org.onosproject.codec.impl.CodecManager;
26import org.onosproject.kubevirtnetworking.api.DefaultKubevirtNetwork;
27import org.onosproject.kubevirtnetworking.api.KubevirtHostRoute;
28import org.onosproject.kubevirtnetworking.api.KubevirtIpPool;
29import org.onosproject.kubevirtnetworking.api.KubevirtNetwork;
30import org.onosproject.kubevirtnetworking.api.KubevirtNetworkAdminService;
31import org.onosproject.kubevirtnetworking.codec.KubevirtHostRouteCodec;
32import org.onosproject.kubevirtnetworking.codec.KubevirtIpPoolCodec;
33import org.onosproject.kubevirtnetworking.codec.KubevirtNetworkCodec;
34import org.onosproject.rest.resources.ResourceTest;
35
36import javax.ws.rs.client.Entity;
37import javax.ws.rs.client.WebTarget;
38import javax.ws.rs.core.MediaType;
39import javax.ws.rs.core.Response;
40import java.io.InputStream;
41
42import static org.easymock.EasyMock.anyObject;
43import static org.easymock.EasyMock.anyString;
44import static org.easymock.EasyMock.createMock;
45import static org.easymock.EasyMock.expect;
46import static org.easymock.EasyMock.replay;
47import static org.easymock.EasyMock.verify;
48import static org.hamcrest.Matchers.is;
49import static org.junit.Assert.assertThat;
50
51/**
52 * Unit tests for kubevirt network REST API.
53 */
54public class KubevirtNetworkWebResourceTest extends ResourceTest {
55
56 final KubevirtNetworkAdminService mockAdminService = createMock(KubevirtNetworkAdminService.class);
57 private static final String PATH = "network";
58
59 private KubevirtNetwork network;
60
61 /**
62 * Constructs a kubernetes networking resource test instance.
63 */
64 public KubevirtNetworkWebResourceTest() {
65 super(ResourceConfig.forApplicationClass(KubevirtNetworkingWebApplication.class));
66 }
67
68 /**
69 * Sets up the global values for all the tests.
70 */
71 @Before
72 public void setUpTest() {
73 final CodecManager codecService = new CodecManager();
74 codecService.activate();
75 codecService.registerCodec(KubevirtHostRoute.class, new KubevirtHostRouteCodec());
76 codecService.registerCodec(KubevirtIpPool.class, new KubevirtIpPoolCodec());
77 codecService.registerCodec(KubevirtNetwork.class, new KubevirtNetworkCodec());
78 ServiceDirectory testDirectory =
79 new TestServiceDirectory()
80 .add(KubevirtNetworkAdminService.class, mockAdminService)
81 .add(CodecService.class, codecService);
82 setServiceDirectory(testDirectory);
83
84 network = DefaultKubevirtNetwork.builder()
85 .networkId("network")
86 .name("network")
87 .type(KubevirtNetwork.Type.FLAT)
88 .cidr("10.10.10.0/24")
89 .mtu(1500)
90 .gatewayIp(IpAddress.valueOf("10.10.10.1"))
Jian Lie2abe812021-08-12 18:03:30 +090091 .defaultRoute(true)
Jian Lif97a07e2021-01-13 18:05:00 +090092 .ipPool(new KubevirtIpPool(IpAddress.valueOf("10.10.10.100"),
93 IpAddress.valueOf("10.10.10.200")))
94 .build();
95 }
96
97 /**
98 * Tests the results of the REST API POST method with creating new network operation.
99 */
100 @Test
101 public void testCreateNetworkWithCreateOperation() {
102 mockAdminService.createNetwork(anyObject());
103 replay(mockAdminService);
104
105 final WebTarget wt = target();
106 InputStream jsonStream = KubevirtNetworkWebResourceTest.class
107 .getResourceAsStream("kubevirt-network.json");
108 Response response = wt.path(PATH).request(MediaType.APPLICATION_JSON_TYPE)
109 .post(Entity.json(jsonStream));
110 final int status = response.getStatus();
111
112 assertThat(status, is(201));
113
114 verify(mockAdminService);
115 }
116
117 /**
118 * Tests the results of the REST API PUT method with modifying the network.
119 */
120 @Test
121 public void testUpdateNetworkWithModifyOperation() {
122 mockAdminService.updateNetwork(anyObject());
123 replay(mockAdminService);
124
125 String location = PATH + "/network";
126
127 final WebTarget wt = target();
128 InputStream jsonStream = KubevirtNetworkWebResourceTest.class
129 .getResourceAsStream("kubevirt-network.json");
130 Response response = wt.path(location)
131 .request(MediaType.APPLICATION_JSON_TYPE)
132 .put(Entity.json(jsonStream));
133 final int status = response.getStatus();
134
135 assertThat(status, is(200));
136
137 verify(mockAdminService);
138 }
139
140 /**
141 * Tests the results of the REST API DELETE method with deleting the network.
142 */
143 @Test
144 public void testDeleteNetworkWithDeletionOperation() {
145 mockAdminService.removeNetwork(anyString());
146 replay(mockAdminService);
147
148 String location = PATH + "/network";
149
150 final WebTarget wt = target();
151 Response response = wt.path(location).request(
152 MediaType.APPLICATION_JSON_TYPE).delete();
153
154 final int status = response.getStatus();
155
156 assertThat(status, is(204));
157
158 verify(mockAdminService);
159 }
160
161 /**
162 * Tests the results of checking network existence.
163 */
164 @Test
165 public void testHasNetworkWithValidNetwork() {
166 expect(mockAdminService.network(anyString())).andReturn(network);
167 replay(mockAdminService);
168
169 String location = PATH + "/exist/network";
170
171 final WebTarget wt = target();
172 String response = wt.path(location).request(
173 MediaType.APPLICATION_JSON_TYPE).get(String.class);
174
175 assertThat(response, is("{\"result\":true}"));
176
177 verify((mockAdminService));
178 }
179
180 /**
181 * Tests the results of checking network existence.
182 */
183 @Test
184 public void testHasNetworkWithNullNetwork() {
185 expect(mockAdminService.network(anyString())).andReturn(null);
186 replay(mockAdminService);
187
188 String location = PATH + "/exist/network";
189
190 final WebTarget wt = target();
191 String response = wt.path(location).request(
192 MediaType.APPLICATION_JSON_TYPE).get(String.class);
193
194 assertThat(response, is("{\"result\":false}"));
195
196 verify((mockAdminService));
197 }
198}