df21d3f00bdc0334218f1d3580ecf6302ed732bf
[policy/clamp.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2021-2022 Nordix Foundation.
4  *  Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
5  * ================================================================================
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  * SPDX-License-Identifier: Apache-2.0
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.onap.policy.clamp.acm.runtime.instantiation.rest;
23
24 import static org.assertj.core.api.Assertions.assertThat;
25 import static org.junit.jupiter.api.Assertions.assertEquals;
26 import static org.junit.jupiter.api.Assertions.assertFalse;
27 import static org.junit.jupiter.api.Assertions.assertNotNull;
28 import static org.junit.jupiter.api.Assertions.assertNull;
29 import static org.onap.policy.clamp.acm.runtime.util.CommonTestData.TOSCA_SERVICE_TEMPLATE_YAML;
30
31 import javax.ws.rs.client.Entity;
32 import javax.ws.rs.client.Invocation;
33 import javax.ws.rs.core.Response;
34 import org.junit.jupiter.api.AfterEach;
35 import org.junit.jupiter.api.BeforeAll;
36 import org.junit.jupiter.api.BeforeEach;
37 import org.junit.jupiter.api.Test;
38 import org.junit.jupiter.api.extension.ExtendWith;
39 import org.onap.policy.clamp.acm.runtime.instantiation.AutomationCompositionInstantiationProvider;
40 import org.onap.policy.clamp.acm.runtime.instantiation.InstantiationUtils;
41 import org.onap.policy.clamp.acm.runtime.main.rest.InstantiationController;
42 import org.onap.policy.clamp.acm.runtime.util.CommonTestData;
43 import org.onap.policy.clamp.acm.runtime.util.rest.CommonRestController;
44 import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
45 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionOrderedState;
46 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositions;
47 import org.onap.policy.clamp.models.acm.messages.rest.instantiation.AutomationCompositionOrderStateResponse;
48 import org.onap.policy.clamp.models.acm.messages.rest.instantiation.AutomationCompositionPrimedResponse;
49 import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstancePropertiesResponse;
50 import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationCommand;
51 import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationResponse;
52 import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider;
53 import org.onap.policy.clamp.models.acm.persistence.provider.ServiceTemplateProvider;
54 import org.onap.policy.clamp.models.acm.persistence.repository.AutomationCompositionRepository;
55 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
56 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
57 import org.springframework.beans.factory.annotation.Autowired;
58 import org.springframework.boot.test.context.SpringBootTest;
59 import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
60 import org.springframework.boot.web.server.LocalServerPort;
61 import org.springframework.test.context.ActiveProfiles;
62 import org.springframework.test.context.junit.jupiter.SpringExtension;
63
64 /**
65  * Class to perform unit test of {@link InstantiationController}}.
66  *
67  */
68 @ExtendWith(SpringExtension.class)
69 @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
70 @ActiveProfiles("test")
71 class InstantiationControllerTest extends CommonRestController {
72
73     private static final String ID_NAME = "PMSH_Test_Instance";
74     private static final String ID_VERSION = "1.2.3";
75
76     private static final String AC_INSTANTIATION_CREATE_JSON =
77         "src/test/resources/rest/acm/AutomationCompositions.json";
78
79     private static final String AC_INSTANTIATION_UPDATE_JSON =
80         "src/test/resources/rest/acm/AutomationCompositionsUpdate.json";
81
82     private static final String AC_INSTANTIATION_CHANGE_STATE_JSON = "src/test/resources/rest/acm/PassiveCommand.json";
83
84     private static final String INSTANTIATION_ENDPOINT = "instantiation";
85     private static final String INSTANTIATION_COMMAND_ENDPOINT = "instantiation/command";
86     private static final String PRIMING_ENDPOINT = "automationCompositionPriming";
87     private static final String INSTANTIATION_PROPERTIES = "instanceProperties";
88     private static final String INSTANTIATION_STATE = "instantiationState";
89
90     private static ToscaServiceTemplate serviceTemplate = new ToscaServiceTemplate();
91
92     @Autowired
93     private AutomationCompositionRepository automationCompositionRepository;
94
95     @Autowired
96     private ServiceTemplateProvider serviceTemplateProvider;
97
98     @Autowired
99     private AutomationCompositionInstantiationProvider instantiationProvider;
100
101     @Autowired
102     private ParticipantProvider participantProvider;
103
104     @LocalServerPort
105     private int randomServerPort;
106
107     @BeforeAll
108     public static void setUpBeforeClass() {
109         serviceTemplate = InstantiationUtils.getToscaServiceTemplate(TOSCA_SERVICE_TEMPLATE_YAML);
110     }
111
112     @BeforeEach
113     public void populateDb() throws Exception {
114         createEntryInDB();
115     }
116
117     @BeforeEach
118     public void setUpPort() {
119         super.setHttpPrefix(randomServerPort);
120     }
121
122     @AfterEach
123     public void cleanDatabase() throws Exception {
124         deleteEntryInDB();
125     }
126
127     @Test
128     void testSwagger() throws Exception {
129         super.testSwagger(INSTANTIATION_ENDPOINT);
130     }
131
132     @Test
133     void testCreate_Unauthorized() throws Exception {
134         AutomationCompositions automationCompositions =
135             InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "Unauthorized");
136
137         assertUnauthorizedPost(INSTANTIATION_ENDPOINT, Entity.json(automationCompositions));
138     }
139
140     @Test
141     void testQuery_Unauthorized() throws Exception {
142         assertUnauthorizedGet(INSTANTIATION_ENDPOINT);
143     }
144
145     @Test
146     void testUpdate_Unauthorized() throws Exception {
147         AutomationCompositions automationCompositions =
148             InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_UPDATE_JSON, "Unauthorized");
149
150         assertUnauthorizedPut(INSTANTIATION_ENDPOINT, Entity.json(automationCompositions));
151     }
152
153     @Test
154     void testDelete_Unauthorized() throws Exception {
155         assertUnauthorizedDelete(INSTANTIATION_ENDPOINT);
156     }
157
158     @Test
159     void testCommand_Unauthorized() throws Exception {
160         InstantiationCommand instantiationCommand =
161             InstantiationUtils.getInstantiationCommandFromResource(AC_INSTANTIATION_CHANGE_STATE_JSON, "Unauthorized");
162
163         assertUnauthorizedPut(INSTANTIATION_COMMAND_ENDPOINT, Entity.json(instantiationCommand));
164     }
165
166     @Test
167     void testCreate() throws Exception {
168
169         AutomationCompositions automationCompositionsFromRsc =
170             InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "Create");
171
172         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT);
173         Response resp = invocationBuilder.post(Entity.json(automationCompositionsFromRsc));
174         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
175         InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
176         InstantiationUtils.assertInstantiationResponse(instResponse, automationCompositionsFromRsc);
177
178         for (AutomationComposition automationCompositionFromRsc : automationCompositionsFromRsc
179             .getAutomationCompositionList()) {
180             AutomationCompositions automationCompositionsFromDb = instantiationProvider.getAutomationCompositions(
181                 automationCompositionFromRsc.getKey().getName(), automationCompositionFromRsc.getKey().getVersion());
182
183             assertNotNull(automationCompositionsFromDb);
184             assertThat(automationCompositionsFromDb.getAutomationCompositionList()).hasSize(1);
185             assertEquals(automationCompositionFromRsc,
186                 automationCompositionsFromDb.getAutomationCompositionList().get(0));
187         }
188
189         invocationBuilder =
190             super.sendRequest(PRIMING_ENDPOINT + "?name=" + "PMSHInstance0Create" + "&version=" + "1.0.1");
191         Response rawresp = invocationBuilder.buildGet().invoke();
192         assertEquals(Response.Status.OK.getStatusCode(), rawresp.getStatus());
193         AutomationCompositionPrimedResponse primResponse =
194             rawresp.readEntity(AutomationCompositionPrimedResponse.class);
195         assertFalse(primResponse.getPrimedAutomationCompositionsList().get(0).isPrimed());
196     }
197
198     @Test
199     void testCreateBadRequest() throws Exception {
200
201         AutomationCompositions automationCompositionsFromRsc =
202             InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "CreateBadRequest");
203
204         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT);
205         Response resp = invocationBuilder.post(Entity.json(automationCompositionsFromRsc));
206         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
207
208         // testing Bad Request: AC already defined
209         resp = invocationBuilder.post(Entity.json(automationCompositionsFromRsc));
210         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus());
211         InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
212         assertNotNull(instResponse.getErrorDetails());
213         assertNull(instResponse.getAffectedAutomationCompositions());
214     }
215
216     @Test
217     void testQuery_NoResultWithThisName() throws Exception {
218         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT + "?name=noResultWithThisName");
219         Response rawresp = invocationBuilder.buildGet().invoke();
220         assertEquals(Response.Status.OK.getStatusCode(), rawresp.getStatus());
221         AutomationCompositions resp = rawresp.readEntity(AutomationCompositions.class);
222         assertThat(resp.getAutomationCompositionList()).isEmpty();
223     }
224
225     @Test
226     void testQuery() throws Exception {
227
228         var automationCompositions =
229             InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "Query");
230         instantiationProvider.createAutomationCompositions(automationCompositions);
231
232         for (AutomationComposition automationCompositionFromRsc : automationCompositions
233             .getAutomationCompositionList()) {
234             Invocation.Builder invocationBuilder =
235                 super.sendRequest(INSTANTIATION_ENDPOINT + "?name=" + automationCompositionFromRsc.getKey().getName());
236             Response rawresp = invocationBuilder.buildGet().invoke();
237             assertEquals(Response.Status.OK.getStatusCode(), rawresp.getStatus());
238             AutomationCompositions automationCompositionsQuery = rawresp.readEntity(AutomationCompositions.class);
239             assertNotNull(automationCompositionsQuery);
240             assertThat(automationCompositionsQuery.getAutomationCompositionList()).hasSize(1);
241             assertEquals(automationCompositionFromRsc,
242                 automationCompositionsQuery.getAutomationCompositionList().get(0));
243         }
244     }
245
246     @Test
247     void testUpdate() throws Exception {
248
249         AutomationCompositions automationCompositionsCreate =
250             InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "Update");
251
252         var automationCompositions =
253             InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_UPDATE_JSON, "Update");
254         instantiationProvider.createAutomationCompositions(automationCompositionsCreate);
255
256         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT);
257         Response resp = invocationBuilder.put(Entity.json(automationCompositions));
258         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
259
260         InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
261         InstantiationUtils.assertInstantiationResponse(instResponse, automationCompositions);
262
263         for (AutomationComposition automationCompositionUpdate : automationCompositions
264             .getAutomationCompositionList()) {
265             AutomationCompositions automationCompositionsFromDb = instantiationProvider.getAutomationCompositions(
266                 automationCompositionUpdate.getKey().getName(), automationCompositionUpdate.getKey().getVersion());
267
268             assertNotNull(automationCompositionsFromDb);
269             assertThat(automationCompositionsFromDb.getAutomationCompositionList()).hasSize(1);
270             assertEquals(automationCompositionUpdate,
271                 automationCompositionsFromDb.getAutomationCompositionList().get(0));
272         }
273     }
274
275     @Test
276     void testDelete_NoResultWithThisName() throws Exception {
277         Invocation.Builder invocationBuilder =
278             super.sendRequest(INSTANTIATION_ENDPOINT + "?name=noResultWithThisName&version=1.0.1");
279         Response resp = invocationBuilder.delete();
280         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), resp.getStatus());
281         InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
282         assertNotNull(instResponse.getErrorDetails());
283         assertNull(instResponse.getAffectedAutomationCompositions());
284     }
285
286     @Test
287     void testDelete() throws Exception {
288
289         AutomationCompositions automationCompositionsFromRsc =
290             InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "Delete");
291
292         instantiationProvider.createAutomationCompositions(automationCompositionsFromRsc);
293
294         for (AutomationComposition automationCompositionFromRsc : automationCompositionsFromRsc
295             .getAutomationCompositionList()) {
296             Invocation.Builder invocationBuilder =
297                 super.sendRequest(INSTANTIATION_ENDPOINT + "?name=" + automationCompositionFromRsc.getKey().getName()
298                     + "&version=" + automationCompositionFromRsc.getKey().getVersion());
299             Response resp = invocationBuilder.delete();
300             assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
301             InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
302             InstantiationUtils.assertInstantiationResponse(instResponse, automationCompositionFromRsc);
303
304             AutomationCompositions automationCompositionsFromDb = instantiationProvider.getAutomationCompositions(
305                 automationCompositionFromRsc.getKey().getName(), automationCompositionFromRsc.getKey().getVersion());
306             assertThat(automationCompositionsFromDb.getAutomationCompositionList()).isEmpty();
307         }
308     }
309
310     @Test
311     void testDeleteBadRequest() throws Exception {
312
313         AutomationCompositions automationCompositionsFromRsc =
314             InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "DelBadRequest");
315
316         instantiationProvider.createAutomationCompositions(automationCompositionsFromRsc);
317
318         for (AutomationComposition automationCompositionFromRsc : automationCompositionsFromRsc
319             .getAutomationCompositionList()) {
320             Invocation.Builder invocationBuilder =
321                 super.sendRequest(INSTANTIATION_ENDPOINT + "?name=" + automationCompositionFromRsc.getKey().getName());
322             Response resp = invocationBuilder.delete();
323             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus());
324         }
325     }
326
327     @Test
328     void testCreateInstanceProperties() throws Exception {
329         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_PROPERTIES);
330         Response resp = invocationBuilder.post(Entity.json(serviceTemplate));
331         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
332         var instancePropertyList = resp.readEntity(InstancePropertiesResponse.class);
333         assertNull(instancePropertyList.getErrorDetails());
334         var id = new ToscaConceptIdentifier(ID_NAME, ID_VERSION);
335         assertEquals(id, instancePropertyList.getAffectedInstanceProperties().get(0));
336
337         invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT);
338         resp = invocationBuilder.get();
339         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
340         var automationCompositionsGet = resp.readEntity(AutomationCompositions.class);
341         assertThat(automationCompositionsGet.getAutomationCompositionList()).hasSize(1);
342     }
343
344     @Test
345     void testDeleteInstanceProperties() throws Exception {
346         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_PROPERTIES);
347         Response resp = invocationBuilder.post(Entity.json(serviceTemplate));
348         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
349
350         invocationBuilder = super.sendRequest(INSTANTIATION_PROPERTIES + "?name=" + ID_NAME + "&version=" + ID_VERSION);
351         resp = invocationBuilder.delete();
352         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
353         var instanceResponse = resp.readEntity(InstantiationResponse.class);
354         assertEquals(ID_NAME, instanceResponse.getAffectedAutomationCompositions().get(0).getName());
355         AutomationCompositions automationCompositionsGet =
356             instantiationProvider.getAutomationCompositions(ID_NAME, ID_VERSION);
357         assertThat(automationCompositionsGet.getAutomationCompositionList()).isEmpty();
358     }
359
360     @Test
361     void testDeleteInstancePropertiesBadRequest() throws Exception {
362         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_PROPERTIES);
363         Response resp = invocationBuilder.post(Entity.json(serviceTemplate));
364         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
365
366         invocationBuilder = super.sendRequest(INSTANTIATION_PROPERTIES + "?name=" + ID_NAME);
367         resp = invocationBuilder.delete();
368         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus());
369     }
370
371     @Test
372     void testDeleteInstancePropertiesPassiveMode() throws Exception {
373         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_PROPERTIES);
374         Response resp = invocationBuilder.post(Entity.json(serviceTemplate));
375         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
376
377         var automationCompositions =
378             InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "Command");
379         instantiationProvider.createAutomationCompositions(automationCompositions);
380
381         var participants = CommonTestData.createParticipants();
382         for (var participant : participants) {
383             participantProvider.saveParticipant(participant);
384         }
385
386         InstantiationCommand command =
387             InstantiationUtils.getInstantiationCommandFromResource(AC_INSTANTIATION_CHANGE_STATE_JSON, "Command");
388
389         invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
390         resp = invocationBuilder.put(Entity.json(command));
391         assertEquals(Response.Status.ACCEPTED.getStatusCode(), resp.getStatus());
392         InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
393         InstantiationUtils.assertInstantiationResponse(instResponse, command);
394
395         // check passive state on DB and delete properties
396         for (ToscaConceptIdentifier toscaConceptIdentifier : command.getAutomationCompositionIdentifierList()) {
397             AutomationCompositions automationCompositionsGet = instantiationProvider
398                 .getAutomationCompositions(toscaConceptIdentifier.getName(), toscaConceptIdentifier.getVersion());
399             assertThat(automationCompositionsGet.getAutomationCompositionList()).hasSize(1);
400             assertEquals(command.getOrderedState(),
401                 automationCompositionsGet.getAutomationCompositionList().get(0).getOrderedState());
402
403             invocationBuilder = super.sendRequest(INSTANTIATION_PROPERTIES + "?name=" + toscaConceptIdentifier.getName()
404                 + "&version=" + toscaConceptIdentifier.getVersion());
405             resp = invocationBuilder.delete();
406             assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus());
407         }
408     }
409
410     @Test
411     void testCommand_NotFound1() throws Exception {
412         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
413         Response resp = invocationBuilder.put(Entity.json(new InstantiationCommand()));
414         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus());
415     }
416
417     @Test
418     void testCommand_NotFound2() throws Exception {
419         InstantiationCommand command =
420             InstantiationUtils.getInstantiationCommandFromResource(AC_INSTANTIATION_CHANGE_STATE_JSON, "Command");
421         command.setOrderedState(null);
422
423         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
424         Response resp = invocationBuilder.put(Entity.json(command));
425         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus());
426     }
427
428     @Test
429     void testCommand() throws Exception {
430         var automationCompositions =
431             InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "Command");
432         instantiationProvider.createAutomationCompositions(automationCompositions);
433
434         var participants = CommonTestData.createParticipants();
435         for (var participant : participants) {
436             participantProvider.saveParticipant(participant);
437         }
438
439         InstantiationCommand command =
440             InstantiationUtils.getInstantiationCommandFromResource(AC_INSTANTIATION_CHANGE_STATE_JSON, "Command");
441
442         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
443         Response resp = invocationBuilder.put(Entity.json(command));
444         assertEquals(Response.Status.ACCEPTED.getStatusCode(), resp.getStatus());
445         InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
446         InstantiationUtils.assertInstantiationResponse(instResponse, command);
447
448         // check passive state on DB
449         for (ToscaConceptIdentifier toscaConceptIdentifier : command.getAutomationCompositionIdentifierList()) {
450             AutomationCompositions automationCompositionsGet = instantiationProvider
451                 .getAutomationCompositions(toscaConceptIdentifier.getName(), toscaConceptIdentifier.getVersion());
452             assertThat(automationCompositionsGet.getAutomationCompositionList()).hasSize(1);
453             assertEquals(command.getOrderedState(),
454                 automationCompositionsGet.getAutomationCompositionList().get(0).getOrderedState());
455         }
456     }
457
458     @Test
459     void testIntanceProperties() throws Exception {
460         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_PROPERTIES);
461         Response resp = invocationBuilder.post(Entity.json(serviceTemplate));
462         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
463         var instancePropertyList = resp.readEntity(InstancePropertiesResponse.class);
464         assertNull(instancePropertyList.getErrorDetails());
465         var id = new ToscaConceptIdentifier(ID_NAME, ID_VERSION);
466         assertEquals(id, instancePropertyList.getAffectedInstanceProperties().get(0));
467
468         invocationBuilder = super.sendRequest(INSTANTIATION_STATE + "?name=" + ID_NAME + "&version=" + ID_VERSION);
469         resp = invocationBuilder.buildGet().invoke();
470         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
471         var instanceOrderState = resp.readEntity(AutomationCompositionOrderStateResponse.class);
472         assertEquals(AutomationCompositionOrderedState.UNINITIALISED, instanceOrderState.getOrderedState());
473         assertEquals(ID_NAME, instanceOrderState.getAutomationCompositionIdentifierList().get(0).getName());
474         AutomationCompositions automationCompositionsGet =
475             instantiationProvider.getAutomationCompositions(ID_NAME, ID_VERSION);
476         assertThat(automationCompositionsGet.getAutomationCompositionList()).hasSize(1);
477
478         invocationBuilder = super.sendRequest(INSTANTIATION_PROPERTIES + "?name=" + ID_NAME + "&version=" + ID_VERSION);
479         resp = invocationBuilder.delete();
480         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
481         var instanceResponse = resp.readEntity(InstantiationResponse.class);
482         assertEquals(ID_NAME, instanceResponse.getAffectedAutomationCompositions().get(0).getName());
483         automationCompositionsGet = instantiationProvider.getAutomationCompositions(ID_NAME, ID_VERSION);
484         assertThat(automationCompositionsGet.getAutomationCompositionList()).isEmpty();
485     }
486
487     @Test
488     void testChangeOrderStateFromUninitializedPassiveMode() throws Exception {
489         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_PROPERTIES);
490         Response resp = invocationBuilder.post(Entity.json(serviceTemplate));
491         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
492
493         var automationCompositions =
494             InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "CommandPassive");
495         instantiationProvider.createAutomationCompositions(automationCompositions);
496
497         var participants = CommonTestData.createParticipants();
498         for (var participant : participants) {
499             participantProvider.saveParticipant(participant);
500         }
501
502         InstantiationCommand command = InstantiationUtils
503             .getInstantiationCommandFromResource(AC_INSTANTIATION_CHANGE_STATE_JSON, "CommandPassive");
504
505         invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
506         resp = invocationBuilder.put(Entity.json(command));
507         assertEquals(Response.Status.ACCEPTED.getStatusCode(), resp.getStatus());
508         InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class);
509         InstantiationUtils.assertInstantiationResponse(instResponse, command);
510     }
511
512     @Test
513     void testChangeOrderStateWithoutRegisteredParticipants() throws Exception {
514         Invocation.Builder invocationBuilder = super.sendRequest(INSTANTIATION_PROPERTIES);
515         Response resp = invocationBuilder.post(Entity.json(serviceTemplate));
516         assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus());
517
518         var automationCompositions =
519             InstantiationUtils.getAutomationCompositionsFromResource(AC_INSTANTIATION_CREATE_JSON, "CommandPassive");
520         instantiationProvider.createAutomationCompositions(automationCompositions);
521
522         InstantiationCommand command = InstantiationUtils
523             .getInstantiationCommandFromResource(AC_INSTANTIATION_CHANGE_STATE_JSON, "CommandPassive");
524
525         invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT);
526         resp = invocationBuilder.put(Entity.json(command));
527         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus());
528     }
529
530     private synchronized void deleteEntryInDB() throws Exception {
531         automationCompositionRepository.deleteAll();
532         var list = serviceTemplateProvider.getAllServiceTemplates();
533         if (!list.isEmpty()) {
534             serviceTemplateProvider.deleteServiceTemplate(list.get(0).getName(), list.get(0).getVersion());
535         }
536     }
537
538     private synchronized void createEntryInDB() throws Exception {
539         deleteEntryInDB();
540         serviceTemplateProvider.createServiceTemplate(serviceTemplate);
541     }
542 }