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