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 TOSCA_TEMPLATE_YAML =
58 "src/test/resources/rest/servicetemplates/pmsh_multiple_cl_tosca.yaml";
60 private static final String INSTANTIATION_ENDPOINT = "instantiation";
62 private static final String INSTANTIATION_COMMAND_ENDPOINT = "instantiation/command";
65 * starts Main and inserts a commissioning template.
67 * @throws Exception if an error occurs
70 public static void setUpBeforeClass() throws Exception {
71 CommonRestController.setUpBeforeClass("InstApi");
73 // to validate control Loop, it needs to define ToscaServiceTemplate
74 InstantiationUtils.storeToscaServiceTemplate(TOSCA_TEMPLATE_YAML, getParameters());
76 ControlLoops controlLoops =
77 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Command");
78 try (ControlLoopInstantiationProvider instantiationProvider =
79 new ControlLoopInstantiationProvider(getParameters())) {
80 instantiationProvider.createControlLoops(controlLoops);
85 public static void teardownAfterClass() {
86 CommonRestController.teardownAfterClass();
90 public void testSwagger() throws Exception {
91 super.testSwagger(INSTANTIATION_ENDPOINT);
95 public void testCreate_Unauthorized() throws Exception {
96 ControlLoops controlLoops =
97 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Unauthorized");
99 assertUnauthorizedPost(INSTANTIATION_ENDPOINT, Entity.json(controlLoops));
103 public void testQuery_Unauthorized() throws Exception {
104 assertUnauthorizedGet(INSTANTIATION_ENDPOINT);
108 public void testUpdate_Unauthorized() throws Exception {
109 ControlLoops controlLoops =
110 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_UPDATE_JSON, "Unauthorized");
112 assertUnauthorizedPut(INSTANTIATION_ENDPOINT, Entity.json(controlLoops));
116 public void testDelete_Unauthorized() throws Exception {
117 assertUnauthorizedDelete(INSTANTIATION_ENDPOINT);
121 public void testCommand_Unauthorized() throws Exception {
122 InstantiationCommand instantiationCommand = InstantiationUtils
123 .getInstantiationCommandFromResource(CL_INSTANTIATION_CHANGE_STATE_JSON, "Unauthorized");
125 assertUnauthorizedPut(INSTANTIATION_COMMAND_ENDPOINT, Entity.json(instantiationCommand));
129 public void testCreate() throws Exception {
130 ControlLoops controlLoopsFromRsc =
131 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Create");
133 Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT);
134 Response resp = invocationBuilder.post(Entity.json(controlLoopsFromRsc));
135 assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
136 InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
137 InstantiationUtils.assertInstantiationResponse(instResponse, controlLoopsFromRsc);
139 try (ControlLoopInstantiationProvider instantiationProvider =
140 new ControlLoopInstantiationProvider(getParameters())) {
141 for (ControlLoop controlLoopFromRsc : controlLoopsFromRsc.getControlLoopList()) {
142 ControlLoops controlLoopsFromDb = instantiationProvider.getControlLoops(
143 controlLoopFromRsc.getKey().getName(), controlLoopFromRsc.getKey().getVersion());
145 assertNotNull(controlLoopsFromDb);
146 assertThat(controlLoopsFromDb.getControlLoopList()).hasSize(1);
147 assertEquals(controlLoopFromRsc, controlLoopsFromDb.getControlLoopList().get(0));
153 public void testCreateBadRequest() throws Exception {
154 ControlLoops controlLoopsFromRsc =
155 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "CreateBadRequest");
157 Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT);
158 Response resp = invocationBuilder.post(Entity.json(controlLoopsFromRsc));
159 assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
161 // testing Bad Request: CL already defined
162 resp = invocationBuilder.post(Entity.json(controlLoopsFromRsc));
163 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus());
164 InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
165 assertNotNull(instResponse.getErrorDetails());
166 assertNull(instResponse.getAffectedControlLoops());
170 public void testQuery_NoResultWithThisName() throws Exception {
171 Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT + "?name=noResultWithThisName");
172 Response rawresp = invocationBuilder.buildGet().invoke();
173 assertEquals(Response.Status.OK.getStatusCode(), rawresp.getStatus());
174 ControlLoops resp = rawresp.readEntity(ControlLoops.class);
175 assertThat(resp.getControlLoopList()).isEmpty();
179 public void testQuery() throws Exception {
180 // inserts a ControlLoops to DB
181 ControlLoops controlLoops =
182 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Query");
183 try (ControlLoopInstantiationProvider instantiationProvider =
184 new ControlLoopInstantiationProvider(getParameters())) {
185 instantiationProvider.createControlLoops(controlLoops);
188 for (ControlLoop controlLoopFromRsc : controlLoops.getControlLoopList()) {
189 Invocation.Builder invocationBuilder =
190 super.sendRequest(INSTANTIATION_ENDPOINT + "?name=" + controlLoopFromRsc.getKey().getName());
191 Response rawresp = invocationBuilder.buildGet().invoke();
192 assertEquals(Response.Status.OK.getStatusCode(), rawresp.getStatus());
193 ControlLoops controlLoopsQuery = rawresp.readEntity(ControlLoops.class);
194 assertNotNull(controlLoopsQuery);
195 assertThat(controlLoopsQuery.getControlLoopList()).hasSize(1);
196 assertEquals(controlLoopFromRsc, controlLoopsQuery.getControlLoopList().get(0));
201 public void testUpdate() throws Exception {
202 ControlLoops controlLoopsCreate =
203 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Update");
205 ControlLoops controlLoops =
206 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_UPDATE_JSON, "Update");
208 try (ControlLoopInstantiationProvider instantiationProvider =
209 new ControlLoopInstantiationProvider(getParameters())) {
210 instantiationProvider.createControlLoops(controlLoopsCreate);
212 Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT);
213 Response resp = invocationBuilder.put(Entity.json(controlLoops));
214 assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
216 InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
217 InstantiationUtils.assertInstantiationResponse(instResponse, controlLoops);
219 for (ControlLoop controlLoopUpdate : controlLoops.getControlLoopList()) {
220 ControlLoops controlLoopsFromDb = instantiationProvider
221 .getControlLoops(controlLoopUpdate.getKey().getName(), controlLoopUpdate.getKey().getVersion());
223 assertNotNull(controlLoopsFromDb);
224 assertThat(controlLoopsFromDb.getControlLoopList()).hasSize(1);
225 assertEquals(controlLoopUpdate, controlLoopsFromDb.getControlLoopList().get(0));
231 public void testDelete_NoResultWithThisName() throws Exception {
232 Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT + "?name=noResultWithThisName");
233 Response resp = invocationBuilder.delete();
234 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), resp.getStatus());
235 InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
236 assertNotNull(instResponse.getErrorDetails());
237 assertNull(instResponse.getAffectedControlLoops());
241 public void testDelete() throws Exception {
242 ControlLoops controlLoopsFromRsc =
243 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "Delete");
244 try (ControlLoopInstantiationProvider instantiationProvider =
245 new ControlLoopInstantiationProvider(getParameters())) {
246 instantiationProvider.createControlLoops(controlLoopsFromRsc);
248 for (ControlLoop controlLoopFromRsc : controlLoopsFromRsc.getControlLoopList()) {
249 Invocation.Builder invocationBuilder =
250 super.sendRequest(INSTANTIATION_ENDPOINT + "?name=" + controlLoopFromRsc.getKey().getName()
251 + "&version=" + controlLoopFromRsc.getKey().getVersion());
252 Response resp = invocationBuilder.delete();
253 assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
254 InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
255 InstantiationUtils.assertInstantiationResponse(instResponse, controlLoopFromRsc);
257 ControlLoops controlLoopsFromDb = instantiationProvider.getControlLoops(
258 controlLoopFromRsc.getKey().getName(), controlLoopFromRsc.getKey().getVersion());
259 assertThat(controlLoopsFromDb.getControlLoopList()).isEmpty();
265 public void testDeleteBadRequest() throws Exception {
266 ControlLoops controlLoopsFromRsc =
267 InstantiationUtils.getControlLoopsFromResource(CL_INSTANTIATION_CREATE_JSON, "DelBadRequest");
268 try (ControlLoopInstantiationProvider instantiationProvider =
269 new ControlLoopInstantiationProvider(getParameters())) {
270 instantiationProvider.createControlLoops(controlLoopsFromRsc);
272 for (ControlLoop controlLoopFromRsc : controlLoopsFromRsc.getControlLoopList()) {
273 Invocation.Builder invocationBuilder =
274 super.sendRequest(INSTANTIATION_ENDPOINT + "?name=" + controlLoopFromRsc.getKey().getName());
275 Response resp = invocationBuilder.delete();
276 // should be BAD_REQUEST
277 assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), resp.getStatus());
283 public void testCommand_NotFound1() throws Exception {
284 Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
285 Response resp = invocationBuilder.put(Entity.json(new InstantiationCommand()));
286 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus());
290 public void testCommand_NotFound2() throws Exception {
291 InstantiationCommand command =
292 InstantiationUtils.getInstantiationCommandFromResource(CL_INSTANTIATION_CHANGE_STATE_JSON, "Command");
293 command.setOrderedState(null);
295 Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
296 Response resp = invocationBuilder.put(Entity.json(command));
297 assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus());
301 public void testCommand() throws Exception {
302 InstantiationCommand command =
303 InstantiationUtils.getInstantiationCommandFromResource(CL_INSTANTIATION_CHANGE_STATE_JSON, "Command");
305 Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
306 Response resp = invocationBuilder.put(Entity.json(command));
307 assertEquals(Response.Status.ACCEPTED.getStatusCode(), resp.getStatus());
308 InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
309 InstantiationUtils.assertInstantiationResponse(instResponse, command);
311 // check passive state on DB
312 try (ControlLoopInstantiationProvider instantiationProvider =
313 new ControlLoopInstantiationProvider(getParameters())) {
314 for (ToscaConceptIdentifier toscaConceptIdentifier : command.getControlLoopIdentifierList()) {
315 ControlLoops controlLoopsGet = instantiationProvider.getControlLoops(toscaConceptIdentifier.getName(),
316 toscaConceptIdentifier.getVersion());
317 assertThat(controlLoopsGet.getControlLoopList()).hasSize(1);
318 assertEquals(command.getOrderedState(), controlLoopsGet.getControlLoopList().get(0).getOrderedState());