2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2021 Nordix Foundation.
4 * ================================================================================
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 * SPDX-License-Identifier: Apache-2.0
18 * ============LICENSE_END=========================================================
21 package org.onap.policy.clamp.controlloop.runtime.instantiation.rest;
23 import static org.assertj.core.api.Assertions.assertThat;
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertNotNull;
26 import static org.junit.Assert.assertNull;
28 import javax.ws.rs.client.Entity;
29 import javax.ws.rs.client.Invocation;
30 import javax.ws.rs.core.Response;
31 import org.junit.AfterClass;
32 import org.junit.BeforeClass;
33 import org.junit.Test;
34 import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoop;
35 import org.onap.policy.clamp.controlloop.models.controlloop.concepts.ControlLoops;
36 import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.InstantiationCommand;
37 import org.onap.policy.clamp.controlloop.models.messages.rest.instantiation.InstantiationResponse;
38 import org.onap.policy.clamp.controlloop.runtime.instantiation.ControlLoopInstantiationProvider;
39 import org.onap.policy.clamp.controlloop.runtime.instantiation.InstantiationUtils;
40 import org.onap.policy.clamp.controlloop.runtime.util.rest.CommonRestController;
41 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
44 * Class to perform unit test of {@link InstantiationController}}.
47 public class InstantiationControllerTest extends CommonRestController {
49 private static final String CL_INSTANTIATION_CREATE_JSON = "src/test/resources/rest/controlloops/ControlLoops.json";
51 private static final String CL_INSTANTIATION_UPDATE_JSON =
52 "src/test/resources/rest/controlloops/ControlLoopsUpdate.json";
54 private static final String CL_INSTANTIATION_CHANGE_STATE_JSON =
55 "src/test/resources/rest/controlloops/PassiveCommand.json";
57 private static final String INSTANTIATION_ENDPOINT = "instantiation";
59 private static final String INSTANTIATION_COMMAND_ENDPOINT = "instantiation/command";
62 * starts Main and inserts a commissioning template.
64 * @throws Exception if an error occurs
67 public static void setUpBeforeClass() throws Exception {
68 CommonRestController.setUpBeforeClass("InstApi");
70 ControlLoops controlLoops =
71 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Command");
72 try (ControlLoopInstantiationProvider instantiationProvider =
73 new ControlLoopInstantiationProvider(getParameters())) {
74 instantiationProvider.createControlLoops(controlLoops);
79 public static void teardownAfterClass() {
80 CommonRestController.teardownAfterClass();
84 public void testSwagger() throws Exception {
85 super.testSwagger(INSTANTIATION_ENDPOINT);
89 public void testCreate_Unauthorized() throws Exception {
90 ControlLoops controlLoops =
91 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Unauthorized");
93 assertUnauthorizedPost(INSTANTIATION_ENDPOINT, Entity.json(controlLoops));
97 public void testQuery_Unauthorized() throws Exception {
98 assertUnauthorizedGet(INSTANTIATION_ENDPOINT);
102 public void testUpdate_Unauthorized() throws Exception {
103 ControlLoops controlLoops =
104 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_UPDATE_JSON, "Unauthorized");
106 assertUnauthorizedPut(INSTANTIATION_ENDPOINT, Entity.json(controlLoops));
110 public void testDelete_Unauthorized() throws Exception {
111 assertUnauthorizedDelete(INSTANTIATION_ENDPOINT);
115 public void testComand_Unauthorized() throws Exception {
116 InstantiationCommand instantiationCommand = InstantiationUtils
117 .getInstantiationCommandFromResource(CL_INSTANTIATION_CHANGE_STATE_JSON, "Unauthorized");
119 assertUnauthorizedPut(INSTANTIATION_COMMAND_ENDPOINT, Entity.json(instantiationCommand));
123 public void testCreate() throws Exception {
124 ControlLoops controlLoopsFromRsc =
125 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Create");
127 Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT);
128 Response resp = invocationBuilder.post(Entity.json(controlLoopsFromRsc));
129 assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
130 InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
131 InstantiationUtils.assertInstantiationResponse(instResponse, controlLoopsFromRsc);
133 try (ControlLoopInstantiationProvider instantiationProvider =
134 new ControlLoopInstantiationProvider(getParameters())) {
135 for (ControlLoop controlLoopFromRsc : controlLoopsFromRsc.getControlLoopList()) {
136 ControlLoops controlLoopsFromDb = instantiationProvider.getControlLoops(
137 controlLoopFromRsc.getKey().getName(), controlLoopFromRsc.getKey().getVersion());
139 assertNotNull(controlLoopsFromDb);
140 assertThat(controlLoopsFromDb.getControlLoopList()).hasSize(1);
141 assertEquals(controlLoopFromRsc, controlLoopsFromDb.getControlLoopList().get(0));
147 public void testCreateBadRequest() throws Exception {
148 ControlLoops controlLoopsFromRsc =
149 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "CreateBadRequest");
151 Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT);
152 Response resp = invocationBuilder.post(Entity.json(controlLoopsFromRsc));
153 assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
155 // testing Bad Request: CL already defined
156 resp = invocationBuilder.post(Entity.json(controlLoopsFromRsc));
157 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus());
158 InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
159 assertNotNull(instResponse.getErrorDetails());
160 assertNull(instResponse.getAffectedControlLoops());
164 public void testQuery_NoResultWithThisName() throws Exception {
165 Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT + "?name=noResultWithThisName");
166 Response rawresp = invocationBuilder.buildGet().invoke();
167 assertEquals(Response.Status.OK.getStatusCode(), rawresp.getStatus());
168 ControlLoops resp = rawresp.readEntity(ControlLoops.class);
169 assertThat(resp.getControlLoopList()).isEmpty();
173 public void testQuery() throws Exception {
174 // inserts a ControlLoops to DB
175 ControlLoops controlLoops =
176 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Query");
177 try (ControlLoopInstantiationProvider instantiationProvider =
178 new ControlLoopInstantiationProvider(getParameters())) {
179 instantiationProvider.createControlLoops(controlLoops);
182 for (ControlLoop controlLoopFromRsc : controlLoops.getControlLoopList()) {
183 Invocation.Builder invocationBuilder =
184 super.sendRequest(INSTANTIATION_ENDPOINT + "?name=" + controlLoopFromRsc.getKey().getName());
185 Response rawresp = invocationBuilder.buildGet().invoke();
186 assertEquals(Response.Status.OK.getStatusCode(), rawresp.getStatus());
187 ControlLoops controlLoopsQuery = rawresp.readEntity(ControlLoops.class);
188 assertNotNull(controlLoopsQuery);
189 assertThat(controlLoopsQuery.getControlLoopList()).hasSize(1);
190 assertEquals(controlLoopFromRsc, controlLoopsQuery.getControlLoopList().get(0));
195 public void testUpdate() throws Exception {
196 ControlLoops controlLoopsCreate =
197 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Update");
199 ControlLoops controlLoops =
200 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_UPDATE_JSON, "Update");
202 try (ControlLoopInstantiationProvider instantiationProvider =
203 new ControlLoopInstantiationProvider(getParameters())) {
204 instantiationProvider.createControlLoops(controlLoopsCreate);
206 Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT);
207 Response resp = invocationBuilder.put(Entity.json(controlLoops));
208 assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
210 InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
211 InstantiationUtils.assertInstantiationResponse(instResponse, controlLoops);
213 for (ControlLoop controlLoopUpdate : controlLoops.getControlLoopList()) {
214 ControlLoops controlLoopsFromDb = instantiationProvider
215 .getControlLoops(controlLoopUpdate.getKey().getName(), controlLoopUpdate.getKey().getVersion());
217 assertNotNull(controlLoopsFromDb);
218 assertThat(controlLoopsFromDb.getControlLoopList()).hasSize(1);
219 assertEquals(controlLoopUpdate, controlLoopsFromDb.getControlLoopList().get(0));
225 public void testDelete_NoResultWithThisName() throws Exception {
226 Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT + "?name=noResultWithThisName");
227 Response resp = invocationBuilder.delete();
228 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), resp.getStatus());
229 InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
230 assertNotNull(instResponse.getErrorDetails());
231 assertNull(instResponse.getAffectedControlLoops());
235 public void testDelete() throws Exception {
236 ControlLoops controlLoopsFromRsc =
237 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Delete");
238 try (ControlLoopInstantiationProvider instantiationProvider =
239 new ControlLoopInstantiationProvider(getParameters())) {
240 instantiationProvider.createControlLoops(controlLoopsFromRsc);
242 for (ControlLoop controlLoopFromRsc : controlLoopsFromRsc.getControlLoopList()) {
243 Invocation.Builder invocationBuilder =
244 super.sendRequest(INSTANTIATION_ENDPOINT + "?name=" + controlLoopFromRsc.getKey().getName()
245 + "&version=" + controlLoopFromRsc.getKey().getVersion());
246 Response resp = invocationBuilder.delete();
247 assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
248 InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
249 InstantiationUtils.assertInstantiationResponse(instResponse, controlLoopFromRsc);
251 ControlLoops controlLoopsFromDb = instantiationProvider.getControlLoops(
252 controlLoopFromRsc.getKey().getName(), controlLoopFromRsc.getKey().getVersion());
253 assertThat(controlLoopsFromDb.getControlLoopList()).isEmpty();
259 public void testDeleteBadRequest() throws Exception {
260 ControlLoops controlLoopsFromRsc =
261 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "DelBadRequest");
262 try (ControlLoopInstantiationProvider instantiationProvider =
263 new ControlLoopInstantiationProvider(getParameters())) {
264 instantiationProvider.createControlLoops(controlLoopsFromRsc);
266 for (ControlLoop controlLoopFromRsc : controlLoopsFromRsc.getControlLoopList()) {
267 Invocation.Builder invocationBuilder =
268 super.sendRequest(INSTANTIATION_ENDPOINT + "?name=" + controlLoopFromRsc.getKey().getName());
269 Response resp = invocationBuilder.delete();
270 // should be BAD_REQUEST
271 assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), resp.getStatus());
277 public void testComand_NotFound1() throws Exception {
278 Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
279 Response resp = invocationBuilder.put(Entity.json(new InstantiationCommand()));
280 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus());
284 public void testComand_NotFound2() throws Exception {
285 InstantiationCommand command =
286 InstantiationUtils.getInstantiationCommandFromResource(CL_INSTANTIATION_CHANGE_STATE_JSON, "Command");
287 command.setOrderedState(null);
289 Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
290 Response resp = invocationBuilder.put(Entity.json(command));
291 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus());
295 public void testCommand() throws Exception {
296 InstantiationCommand command =
297 InstantiationUtils.getInstantiationCommandFromResource(CL_INSTANTIATION_CHANGE_STATE_JSON, "Command");
299 Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
300 Response resp = invocationBuilder.put(Entity.json(command));
301 assertEquals(Response.Status.ACCEPTED.getStatusCode(), resp.getStatus());
302 InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
303 InstantiationUtils.assertInstantiationResponse(instResponse, command);
305 // check passive state on DB
306 try (ControlLoopInstantiationProvider instantiationProvider =
307 new ControlLoopInstantiationProvider(getParameters())) {
308 for (ToscaConceptIdentifier toscaConceptIdentifier : command.getControlLoopIdentifierList()) {
309 ControlLoops controlLoopsGet = instantiationProvider.getControlLoops(toscaConceptIdentifier.getName(),
310 toscaConceptIdentifier.getVersion());
311 assertThat(controlLoopsGet.getControlLoopList()).hasSize(1);
312 assertEquals(command.getOrderedState(), controlLoopsGet.getControlLoopList().get(0).getOrderedState());