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";
61 private static final String TOSCA_TEMPLATE_YAML = "examples/controlloop/PMSubscriptionHandling.yaml";
64 * starts Main and inserts a commissioning template.
66 * @throws Exception if an error occurs
69 public static void setUpBeforeClass() throws Exception {
70 CommonRestController.setUpBeforeClass("InstApi");
72 // to validate control Loop, it needs to define ToscaServiceTemplate
73 InstantiationUtils.storeToscaServiceTemplate(TOSCA_TEMPLATE_YAML, getParameters());
75 ControlLoops controlLoops =
76 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Command");
77 try (ControlLoopInstantiationProvider instantiationProvider =
78 new ControlLoopInstantiationProvider(getParameters())) {
79 instantiationProvider.createControlLoops(controlLoops);
84 public static void teardownAfterClass() {
85 CommonRestController.teardownAfterClass();
89 public void testSwagger() throws Exception {
90 super.testSwagger(INSTANTIATION_ENDPOINT);
94 public void testCreate_Unauthorized() throws Exception {
95 ControlLoops controlLoops =
96 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Unauthorized");
98 assertUnauthorizedPost(INSTANTIATION_ENDPOINT, Entity.json(controlLoops));
102 public void testQuery_Unauthorized() throws Exception {
103 assertUnauthorizedGet(INSTANTIATION_ENDPOINT);
107 public void testUpdate_Unauthorized() throws Exception {
108 ControlLoops controlLoops =
109 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_UPDATE_JSON, "Unauthorized");
111 assertUnauthorizedPut(INSTANTIATION_ENDPOINT, Entity.json(controlLoops));
115 public void testDelete_Unauthorized() throws Exception {
116 assertUnauthorizedDelete(INSTANTIATION_ENDPOINT);
120 public void testCommand_Unauthorized() throws Exception {
121 InstantiationCommand instantiationCommand = InstantiationUtils
122 .getInstantiationCommandFromResource(CL_INSTANTIATION_CHANGE_STATE_JSON, "Unauthorized");
124 assertUnauthorizedPut(INSTANTIATION_COMMAND_ENDPOINT, Entity.json(instantiationCommand));
128 public void testCreate() throws Exception {
129 ControlLoops controlLoopsFromRsc =
130 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Create");
132 Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT);
133 Response resp = invocationBuilder.post(Entity.json(controlLoopsFromRsc));
134 assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
135 InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
136 InstantiationUtils.assertInstantiationResponse(instResponse, controlLoopsFromRsc);
138 try (ControlLoopInstantiationProvider instantiationProvider =
139 new ControlLoopInstantiationProvider(getParameters())) {
140 for (ControlLoop controlLoopFromRsc : controlLoopsFromRsc.getControlLoopList()) {
141 ControlLoops controlLoopsFromDb = instantiationProvider.getControlLoops(
142 controlLoopFromRsc.getKey().getName(), controlLoopFromRsc.getKey().getVersion());
144 assertNotNull(controlLoopsFromDb);
145 assertThat(controlLoopsFromDb.getControlLoopList()).hasSize(1);
146 assertEquals(controlLoopFromRsc, controlLoopsFromDb.getControlLoopList().get(0));
152 public void testCreateBadRequest() throws Exception {
153 ControlLoops controlLoopsFromRsc =
154 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "CreateBadRequest");
156 Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT);
157 Response resp = invocationBuilder.post(Entity.json(controlLoopsFromRsc));
158 assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
160 // testing Bad Request: CL already defined
161 resp = invocationBuilder.post(Entity.json(controlLoopsFromRsc));
162 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus());
163 InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
164 assertNotNull(instResponse.getErrorDetails());
165 assertNull(instResponse.getAffectedControlLoops());
169 public void testQuery_NoResultWithThisName() throws Exception {
170 Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT + "?name=noResultWithThisName");
171 Response rawresp = invocationBuilder.buildGet().invoke();
172 assertEquals(Response.Status.OK.getStatusCode(), rawresp.getStatus());
173 ControlLoops resp = rawresp.readEntity(ControlLoops.class);
174 assertThat(resp.getControlLoopList()).isEmpty();
178 public void testQuery() throws Exception {
179 // inserts a ControlLoops to DB
180 ControlLoops controlLoops =
181 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Query");
182 try (ControlLoopInstantiationProvider instantiationProvider =
183 new ControlLoopInstantiationProvider(getParameters())) {
184 instantiationProvider.createControlLoops(controlLoops);
187 for (ControlLoop controlLoopFromRsc : controlLoops.getControlLoopList()) {
188 Invocation.Builder invocationBuilder =
189 super.sendRequest(INSTANTIATION_ENDPOINT + "?name=" + controlLoopFromRsc.getKey().getName());
190 Response rawresp = invocationBuilder.buildGet().invoke();
191 assertEquals(Response.Status.OK.getStatusCode(), rawresp.getStatus());
192 ControlLoops controlLoopsQuery = rawresp.readEntity(ControlLoops.class);
193 assertNotNull(controlLoopsQuery);
194 assertThat(controlLoopsQuery.getControlLoopList()).hasSize(1);
195 assertEquals(controlLoopFromRsc, controlLoopsQuery.getControlLoopList().get(0));
200 public void testUpdate() throws Exception {
201 ControlLoops controlLoopsCreate =
202 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Update");
204 ControlLoops controlLoops =
205 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_UPDATE_JSON, "Update");
207 try (ControlLoopInstantiationProvider instantiationProvider =
208 new ControlLoopInstantiationProvider(getParameters())) {
209 instantiationProvider.createControlLoops(controlLoopsCreate);
211 Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT);
212 Response resp = invocationBuilder.put(Entity.json(controlLoops));
213 assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
215 InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
216 InstantiationUtils.assertInstantiationResponse(instResponse, controlLoops);
218 for (ControlLoop controlLoopUpdate : controlLoops.getControlLoopList()) {
219 ControlLoops controlLoopsFromDb = instantiationProvider
220 .getControlLoops(controlLoopUpdate.getKey().getName(), controlLoopUpdate.getKey().getVersion());
222 assertNotNull(controlLoopsFromDb);
223 assertThat(controlLoopsFromDb.getControlLoopList()).hasSize(1);
224 assertEquals(controlLoopUpdate, controlLoopsFromDb.getControlLoopList().get(0));
230 public void testDelete_NoResultWithThisName() throws Exception {
231 Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT + "?name=noResultWithThisName");
232 Response resp = invocationBuilder.delete();
233 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), resp.getStatus());
234 InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
235 assertNotNull(instResponse.getErrorDetails());
236 assertNull(instResponse.getAffectedControlLoops());
240 public void testDelete() throws Exception {
241 ControlLoops controlLoopsFromRsc =
242 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Delete");
243 try (ControlLoopInstantiationProvider instantiationProvider =
244 new ControlLoopInstantiationProvider(getParameters())) {
245 instantiationProvider.createControlLoops(controlLoopsFromRsc);
247 for (ControlLoop controlLoopFromRsc : controlLoopsFromRsc.getControlLoopList()) {
248 Invocation.Builder invocationBuilder =
249 super.sendRequest(INSTANTIATION_ENDPOINT + "?name=" + controlLoopFromRsc.getKey().getName()
250 + "&version=" + controlLoopFromRsc.getKey().getVersion());
251 Response resp = invocationBuilder.delete();
252 assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
253 InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
254 InstantiationUtils.assertInstantiationResponse(instResponse, controlLoopFromRsc);
256 ControlLoops controlLoopsFromDb = instantiationProvider.getControlLoops(
257 controlLoopFromRsc.getKey().getName(), controlLoopFromRsc.getKey().getVersion());
258 assertThat(controlLoopsFromDb.getControlLoopList()).isEmpty();
264 public void testDeleteBadRequest() throws Exception {
265 ControlLoops controlLoopsFromRsc =
266 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "DelBadRequest");
267 try (ControlLoopInstantiationProvider instantiationProvider =
268 new ControlLoopInstantiationProvider(getParameters())) {
269 instantiationProvider.createControlLoops(controlLoopsFromRsc);
271 for (ControlLoop controlLoopFromRsc : controlLoopsFromRsc.getControlLoopList()) {
272 Invocation.Builder invocationBuilder =
273 super.sendRequest(INSTANTIATION_ENDPOINT + "?name=" + controlLoopFromRsc.getKey().getName());
274 Response resp = invocationBuilder.delete();
275 // should be BAD_REQUEST
276 assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), resp.getStatus());
282 public void testCommand_NotFound1() throws Exception {
283 Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
284 Response resp = invocationBuilder.put(Entity.json(new InstantiationCommand()));
285 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus());
289 public void testCommand_NotFound2() throws Exception {
290 InstantiationCommand command =
291 InstantiationUtils.getInstantiationCommandFromResource(CL_INSTANTIATION_CHANGE_STATE_JSON, "Command");
292 command.setOrderedState(null);
294 Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
295 Response resp = invocationBuilder.put(Entity.json(command));
296 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus());
300 public void testCommand() throws Exception {
301 InstantiationCommand command =
302 InstantiationUtils.getInstantiationCommandFromResource(CL_INSTANTIATION_CHANGE_STATE_JSON, "Command");
304 Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
305 Response resp = invocationBuilder.put(Entity.json(command));
306 assertEquals(Response.Status.ACCEPTED.getStatusCode(), resp.getStatus());
307 InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
308 InstantiationUtils.assertInstantiationResponse(instResponse, command);
310 // check passive state on DB
311 try (ControlLoopInstantiationProvider instantiationProvider =
312 new ControlLoopInstantiationProvider(getParameters())) {
313 for (ToscaConceptIdentifier toscaConceptIdentifier : command.getControlLoopIdentifierList()) {
314 ControlLoops controlLoopsGet = instantiationProvider.getControlLoops(toscaConceptIdentifier.getName(),
315 toscaConceptIdentifier.getVersion());
316 assertThat(controlLoopsGet.getControlLoopList()).hasSize(1);
317 assertEquals(command.getOrderedState(), controlLoopsGet.getControlLoopList().get(0).getOrderedState());