diff options
14 files changed, 639 insertions, 3 deletions
diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/CommissioningController.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/CommissioningController.java index 4247a5b31..653bb9daf 100644 --- a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/CommissioningController.java +++ b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/CommissioningController.java @@ -29,6 +29,7 @@ import org.onap.policy.clamp.models.acm.messages.rest.commissioning.Commissionin import org.onap.policy.models.base.PfModelException; import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplates; +import org.springframework.context.annotation.Profile; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RestController; @@ -37,6 +38,7 @@ import org.springframework.web.bind.annotation.RestController; */ @RestController @RequiredArgsConstructor +@Profile("default") public class CommissioningController extends AbstractRestController implements AutomationCompositionDefinitionApi { private final CommissioningProvider provider; diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/InstantiationController.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/InstantiationController.java index e828843a6..92651bc91 100644 --- a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/InstantiationController.java +++ b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/InstantiationController.java @@ -30,6 +30,7 @@ import org.onap.policy.clamp.models.acm.concepts.AutomationComposition; import org.onap.policy.clamp.models.acm.concepts.AutomationCompositions; import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationResponse; import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationUpdate; +import org.springframework.context.annotation.Profile; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RestController; @@ -38,6 +39,7 @@ import org.springframework.web.bind.annotation.RestController; */ @RestController @RequiredArgsConstructor +@Profile("default") public class InstantiationController extends AbstractRestController implements AutomationCompositionInstanceApi { // The Automation Composition provider for instantiation requests diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/stub/CommissioningControllerStub.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/stub/CommissioningControllerStub.java new file mode 100644 index 000000000..f03cc4ecd --- /dev/null +++ b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/stub/CommissioningControllerStub.java @@ -0,0 +1,107 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2022 Nordix Foundation. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.clamp.acm.runtime.main.rest.stub; + +import java.util.UUID; +import javax.servlet.http.HttpServletRequest; +import javax.validation.Valid; +import org.onap.policy.clamp.acm.runtime.main.rest.gen.AutomationCompositionDefinitionApi; +import org.onap.policy.clamp.acm.runtime.main.web.AbstractRestController; +import org.onap.policy.clamp.models.acm.messages.rest.commissioning.CommissioningResponse; +import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; +import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplates; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Profile; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@Profile("stub") +public class CommissioningControllerStub extends AbstractRestController + implements AutomationCompositionDefinitionApi { + + private static final Logger log = LoggerFactory.getLogger(CommissioningControllerStub.class); + + @Autowired + private HttpServletRequest request; + + @Autowired + private StubUtils stubUtils; + + @Value("${stub.deleteCompositionDefinitionResponse}") + private String pathToResponseFile; + + @Value("${stub.getAllCompositionDefinitions}") + private String pathToAllDefinitions; + + @Value("${stub.getSingleCompositionDefinition}") + private String pathToSingleDefinition; + + @Value("${stub.postCommissionResponse}") + private String pathToPostResponse; + + @Value("${stub.putCompositionDefinitionUpdateResponse}") + private String pathToPutUpdate; + + @Override + public ResponseEntity<CommissioningResponse> createCompositionDefinitions( + @Valid @RequestBody ToscaServiceTemplate body, + @RequestHeader(value = "X-onap-RequestId", required = false) UUID xonaprequestid) { + return stubUtils.getResponse(pathToPostResponse, CommissioningResponse.class, request, log); + } + + @Override + public ResponseEntity<CommissioningResponse> deleteCompositionDefinition( + @PathVariable("compositionId") UUID compositionId, + @RequestHeader(value = "X-onap-RequestId", required = false) UUID xonaprequestid) { + return stubUtils.getResponse(pathToResponseFile, CommissioningResponse.class, request, log); + } + + @Override + public ResponseEntity<ToscaServiceTemplate> getCompositionDefinition( + @PathVariable("compositionId") UUID compositionId, + @RequestHeader(value = "X-onap-RequestId", required = false) UUID xonaprequestid) { + return stubUtils.getResponse(pathToSingleDefinition, ToscaServiceTemplate.class, request, log); + } + + @Override + public ResponseEntity<ToscaServiceTemplates> queryCompositionDefinitions( + @Valid @RequestParam(value = "name", required = false) String name, + @Valid @RequestParam(value = "version", required = false) String version, + @RequestHeader(value = "X-onap-RequestId", required = false) UUID xonaprequestid) { + return stubUtils.getResponse(pathToAllDefinitions, ToscaServiceTemplates.class, request, log); + } + + @Override + public ResponseEntity<CommissioningResponse> updateCompositionDefinition( + @PathVariable("compositionId") UUID compositionId, + @Valid @RequestBody ToscaServiceTemplate body, + @RequestHeader(value = "X-onap-RequestId", required = false) UUID xonaprequestid) { + return stubUtils.getResponse(pathToPutUpdate, CommissioningResponse.class, request, log); + } +} diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/stub/InstantiationControllerStub.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/stub/InstantiationControllerStub.java new file mode 100644 index 000000000..40152683d --- /dev/null +++ b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/stub/InstantiationControllerStub.java @@ -0,0 +1,112 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2022 Nordix Foundation. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.clamp.acm.runtime.main.rest.stub; + +import java.util.UUID; +import javax.servlet.http.HttpServletRequest; +import javax.validation.Valid; +import org.onap.policy.clamp.acm.runtime.main.rest.gen.AutomationCompositionInstanceApi; +import org.onap.policy.clamp.acm.runtime.main.web.AbstractRestController; +import org.onap.policy.clamp.models.acm.concepts.AutomationComposition; +import org.onap.policy.clamp.models.acm.concepts.AutomationCompositions; +import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationResponse; +import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationUpdate; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Profile; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@Profile("stub") +public class InstantiationControllerStub extends AbstractRestController implements AutomationCompositionInstanceApi { + + private static final Logger log = LoggerFactory.getLogger(InstantiationControllerStub.class); + + @Autowired + private StubUtils stubUtils; + + @Autowired + private HttpServletRequest request; + + @Value("${stub.deleteCompositionInstanceResponse}") + private String pathToResponseFile; + + @Value("${stub.getCompositionInstancesResponse}") + private String pathToSingleIntance; + + @Value("${stub.getAllCompositionInstancesResponse}") + private String pathToAllIntances; + + @Value("${stub.postInstanceResponse}") + private String pathPostIntance; + + @Value("${stub.putCompositionInstanceUpdateResponse}") + private String pathToPutUpdate; + + @Override + public ResponseEntity<InstantiationResponse> createCompositionInstance( + @PathVariable("compositionId") UUID compositionId, + @Valid @RequestBody AutomationComposition body, + @RequestHeader(value = "X-onap-RequestId", required = false) UUID xonaprequestid) { + return stubUtils.getResponse(pathPostIntance, InstantiationResponse.class, request, log); + } + + @Override + public ResponseEntity<InstantiationResponse> deleteCompositionInstance( + @PathVariable("compositionId") UUID compositionId, + @PathVariable("instanceId") UUID instanceId, + @RequestHeader(value = "X-onap-RequestId", required = false) UUID xonaprequestid) { + return stubUtils.getResponse(pathToResponseFile, InstantiationResponse.class, request, log); + } + + @Override + public ResponseEntity<AutomationComposition> getCompositionInstance( + @PathVariable("compositionId") UUID compositionId, + @PathVariable("instanceId") UUID instanceId, + @RequestHeader(value = "X-onap-RequestId", required = false) UUID xonaprequestid) { + return stubUtils.getResponse(pathToSingleIntance, AutomationComposition.class, request, log); + } + + @Override + public ResponseEntity<AutomationCompositions> queryCompositionInstances( + @PathVariable("compositionId") UUID compositionId, + @Valid @RequestParam(value = "name", required = false) String name, + @Valid @RequestParam(value = "version", required = false) String version, + @RequestHeader(value = "X-onap-RequestId", required = false) UUID xonaprequestid) { + return stubUtils.getResponse(pathToAllIntances, AutomationCompositions.class, request, log); + } + + @Override + public ResponseEntity<InstantiationResponse> updateCompositionInstance( + UUID compositionId, + UUID instanceId, + InstantiationUpdate body, + UUID xonaprequestid) { + return stubUtils.getResponse(pathToResponseFile, InstantiationResponse.class, request, log); + } +}
\ No newline at end of file diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/stub/StubUtils.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/stub/StubUtils.java new file mode 100644 index 000000000..285365d9b --- /dev/null +++ b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/stub/StubUtils.java @@ -0,0 +1,71 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2022 Nordix Foundation. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.clamp.acm.runtime.main.rest.stub; + +import com.google.gson.Gson; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import javax.servlet.http.HttpServletRequest; +import org.onap.policy.common.utils.coder.CoderException; +import org.onap.policy.common.utils.coder.StandardYamlCoder; +import org.slf4j.Logger; +import org.springframework.context.annotation.Profile; +import org.springframework.core.io.ClassPathResource; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; + +@Service +@Profile("stub") +public class StubUtils { + + private static final StandardYamlCoder YAML_TRANSLATOR = new StandardYamlCoder(); + private static final Gson JSON_TRANSLATOR = new Gson(); + private static final String YAML = "application/yaml"; + private static final String ACCEPT = "Accept"; + + <T> ResponseEntity<T> getResponse(String path, Class<T> clazz, + HttpServletRequest request, Logger log) { + String accept = request.getHeader(ACCEPT); + if (accept.contains(YAML)) { + path = path.replace("json", "yaml"); + final ClassPathResource resourceY = new ClassPathResource(path); + try (InputStream inputStreamY = resourceY.getInputStream()) { + var targetObj = YAML_TRANSLATOR.decode(inputStreamY, clazz); + return new ResponseEntity<>(targetObj, HttpStatus.OK); + } catch (IOException | CoderException e) { + log.error("Error reading the file.", e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); + } + } else { + final ClassPathResource resource = new ClassPathResource(path); + try (InputStream inputStream = resource.getInputStream()) { + final String string = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); + var targetObject = JSON_TRANSLATOR.fromJson(string, clazz); + return new ResponseEntity<>(targetObject, HttpStatus.OK); + } catch (final IOException exception) { + log.error("Error reading the file.", exception); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); + } + } + } +} diff --git a/runtime-acm/src/main/resources/application-stub.yaml b/runtime-acm/src/main/resources/application-stub.yaml new file mode 100644 index 000000000..e752df3fd --- /dev/null +++ b/runtime-acm/src/main/resources/application-stub.yaml @@ -0,0 +1,21 @@ +spring: + application: + name: "policy-clamp-runtime-acm-stub" +stub: + deleteCompositionDefinitionResponse: "/openapi/examples/deleteCompositionDefinitionResponse.json" + deleteCompositionInstanceResponse: "/openapi/examples/deleteCompositionInstanceResponse.json" + getAllCompositionDefinitions: "/openapi/examples/getAllCompositionDefinitions.json" + getAllCompositionInstancesResponse: "/openapi/examples/getAllCompositionInstancesResponse.json" + getCompositionInstancesResponse: "/openapi/examples/getCompositionInstancesResponse.json" + getSingleCompositionDefinition: "/openapi/examples/getSingleCompositionDefinition.json" + postCommissionResponse: "/openapi/examples/postCommissionCompositionDefinitionsResponse.json" + postCompositionDefinitions: "/openapi/examples/postCompositionDefinitions.json" + postCompositionInstance: "/openapi/examples/postCompositionInstance.json" + postInstanceResponse: "/openapi/examples/postCompositionInstancesResponse.json" + putCompositionDefinitionUpdate: "/openapi/examples/putCompositionDefinitionUpdate.json" + putCompositionDefinitionUpdateResponse: "/openapi/examples/putCompositionDefinitionUpdateResponse.json" + putCompositionInstanceUpdate: "/openapi/examples/putCompositionInstanceUpdate.json" + putCompositionInstanceUpdateResponse: " /openapi/examples/putCompositionInstanceUpdateResponse.json" + + + diff --git a/runtime-acm/src/main/resources/application.yaml b/runtime-acm/src/main/resources/application.yaml index df1310d0a..771d7006a 100644 --- a/runtime-acm/src/main/resources/application.yaml +++ b/runtime-acm/src/main/resources/application.yaml @@ -1,4 +1,6 @@ spring: + profiles: + active: default security: user: name: runtimeUser diff --git a/runtime-acm/src/main/resources/openapi/examples/getAllCompositionInstancesResponse.json b/runtime-acm/src/main/resources/openapi/examples/getAllCompositionInstancesResponse.json new file mode 100644 index 000000000..55b99b28c --- /dev/null +++ b/runtime-acm/src/main/resources/openapi/examples/getAllCompositionInstancesResponse.json @@ -0,0 +1,72 @@ +{ + "automationCompositionList": [ + { + "compositionId": "562ed027-2689-481a-b3a5-e284b1fbc33f", + "state": "UNINITIALISED", + "orderedState": "UNINITIALISED", + "elements": { + "709c62b3-8918-41b9-a747-d21eb79c6c23": { + "id": "709c62b3-8918-41b9-a747-d21eb79c6c23", + "definition": { + "name": "onap.policy.clamp.ac.element.Http_SinkAutomationCompositionElement", + "version": "1.2.3" + }, + "participantType": { + "name": "org.onap.policy.clamp.acm.HttpParticipant", + "version": "2.3.4" + }, + "participantId": { + "name": "HttpParticipant0", + "version": "1.0.0" + }, + "state": "UNINITIALISED", + "orderedState": "UNINITIALISED", + "description": "Sink Automation Composition Element for the Demo", + "propertiesMap": {} + }, + "709c62b3-8918-41b9-a747-d21eb79c6c25": { + "id": "709c62b3-8918-41b9-a747-d21eb79c6c25", + "definition": { + "name": "onap.policy.clamp.ac.element.Http_BridgeAutomationCompositionElement", + "version": "1.2.3" + }, + "participantType": { + "name": "org.onap.policy.clamp.acm.HttpParticipant", + "version": "2.3.4" + }, + "participantId": { + "name": "HttpParticipant0", + "version": "1.0.0" + }, + "state": "UNINITIALISED", + "orderedState": "UNINITIALISED", + "description": "Bridge Automation Composition Element for the Demo", + "propertiesMap": {} + }, + "709c62b3-8918-41b9-a747-d21eb79c6c24": { + "id": "709c62b3-8918-41b9-a747-d21eb79c6c24", + "definition": { + "name": "onap.policy.clamp.ac.element.Http_StarterAutomationCompositionElement", + "version": "1.2.3" + }, + "participantType": { + "name": "org.onap.policy.clamp.acm.HttpParticipant", + "version": "2.3.4" + }, + "participantId": { + "name": "HttpParticipant0", + "version": "1.0.0" + }, + "state": "UNINITIALISED", + "orderedState": "UNINITIALISED", + "description": "Starter Automation Composition Element for the Demo", + "propertiesMap": {} + } + }, + "primed": false, + "name": "InstanceHttp", + "version": "1.0.1", + "description": "Demo automation composition instance Http" + } + ] +}
\ No newline at end of file diff --git a/runtime-acm/src/main/resources/openapi/examples/getAllCompositionInstancesResponse.yaml b/runtime-acm/src/main/resources/openapi/examples/getAllCompositionInstancesResponse.yaml new file mode 100644 index 000000000..3fa6506ea --- /dev/null +++ b/runtime-acm/src/main/resources/openapi/examples/getAllCompositionInstancesResponse.yaml @@ -0,0 +1,54 @@ +automationCompositionList: +- compositionId: 562ed027-2689-481a-b3a5-e284b1fbc33f + state: UNINITIALISED + orderedState: UNINITIALISED + elements: + 709c62b3-8918-41b9-a747-d21eb79c6c23: + id: 709c62b3-8918-41b9-a747-d21eb79c6c23 + definition: + name: onap.policy.clamp.ac.element.Http_SinkAutomationCompositionElement + version: 1.2.3 + participantType: + name: org.onap.policy.clamp.acm.HttpParticipant + version: 2.3.4 + participantId: + name: HttpParticipant0 + version: 1.0.0 + state: UNINITIALISED + orderedState: UNINITIALISED + description: Sink Automation Composition Element for the Demo + propertiesMap: {} + 709c62b3-8918-41b9-a747-d21eb79c6c25: + id: 709c62b3-8918-41b9-a747-d21eb79c6c25 + definition: + name: onap.policy.clamp.ac.element.Http_BridgeAutomationCompositionElement + version: 1.2.3 + participantType: + name: org.onap.policy.clamp.acm.HttpParticipant + version: 2.3.4 + participantId: + name: HttpParticipant0 + version: 1.0.0 + state: UNINITIALISED + orderedState: UNINITIALISED + description: Bridge Automation Composition Element for the Demo + propertiesMap: {} + 709c62b3-8918-41b9-a747-d21eb79c6c24: + id: 709c62b3-8918-41b9-a747-d21eb79c6c24 + definition: + name: onap.policy.clamp.ac.element.Http_StarterAutomationCompositionElement + version: 1.2.3 + participantType: + name: org.onap.policy.clamp.acm.HttpParticipant + version: 2.3.4 + participantId: + name: HttpParticipant0 + version: 1.0.0 + state: UNINITIALISED + orderedState: UNINITIALISED + description: Starter Automation Composition Element for the Demo + propertiesMap: {} + primed: false + name: InstanceHttp + version: 1.0.1 + description: Demo automation composition instance Http diff --git a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/commissioning/rest/CommissioningControllerTest.java b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/commissioning/rest/CommissioningControllerTest.java index d99bf2df6..8625408f4 100644 --- a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/commissioning/rest/CommissioningControllerTest.java +++ b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/commissioning/rest/CommissioningControllerTest.java @@ -52,7 +52,7 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; @ExtendWith(SpringExtension.class) @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) -@ActiveProfiles("test") +@ActiveProfiles({ "test", "default" }) class CommissioningControllerTest extends CommonRestController { private static final String COMMISSIONING_ENDPOINT = "compositions"; diff --git a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/commissioning/rest/stub/CommissioningControllerStubTest.java b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/commissioning/rest/stub/CommissioningControllerStubTest.java new file mode 100644 index 000000000..5bf259310 --- /dev/null +++ b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/commissioning/rest/stub/CommissioningControllerStubTest.java @@ -0,0 +1,89 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2022 Nordix Foundation. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.clamp.acm.runtime.commissioning.rest.stub; + +import static org.assertj.core.api.Assertions.assertThat; + +import javax.ws.rs.client.Entity; +import javax.ws.rs.core.Response; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.onap.policy.clamp.acm.runtime.util.rest.CommonRestController; +import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; +import org.springframework.boot.web.server.LocalServerPort; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +@ExtendWith(SpringExtension.class) +@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) +@ActiveProfiles({ "test", "stub" }) +class CommissioningControllerStubTest extends CommonRestController { + + private static final String COMMISSIONING_ENDPOINT = "compositions"; + private static final String COMPOSITION_ID = "1aeed185-a98b-45b6-af22-8d5d20485ea3"; + private static ToscaServiceTemplate serviceTemplate = new ToscaServiceTemplate(); + + @LocalServerPort + private int randomServerPort; + + @BeforeEach + public void setUpPort() { + super.setHttpPrefix(randomServerPort); + } + + @Test + void testQuery() { + var invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT); + var respPost = invocationBuilder.get(); + assertThat(Response.Status.OK.getStatusCode()).isEqualTo(respPost.getStatus()); + } + + @Test + void testGet() { + var invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT + "/" + COMPOSITION_ID); + var respPost = invocationBuilder.get(); + assertThat(Response.Status.OK.getStatusCode()).isEqualTo(respPost.getStatus()); + } + + @Test + void testPut() { + var invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT + "/" + COMPOSITION_ID); + var respPost = invocationBuilder.put(Entity.json(serviceTemplate)); + assertThat(Response.Status.OK.getStatusCode()).isEqualTo(respPost.getStatus()); + } + + @Test + void testPost() { + var invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT); + var respPost = invocationBuilder.post(Entity.json(serviceTemplate)); + assertThat(Response.Status.OK.getStatusCode()).isEqualTo(respPost.getStatus()); + } + + @Test + void testDelete() { + var invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT + "/" + COMPOSITION_ID); + var respPost = invocationBuilder.delete(); + assertThat(Response.Status.OK.getStatusCode()).isEqualTo(respPost.getStatus()); + } +} diff --git a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/rest/InstantiationControllerTest.java b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/rest/InstantiationControllerTest.java index b93d214cb..0e58eb6ae 100644 --- a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/rest/InstantiationControllerTest.java +++ b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/rest/InstantiationControllerTest.java @@ -62,7 +62,7 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; */ @ExtendWith(SpringExtension.class) @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) -@ActiveProfiles("test") +@ActiveProfiles({ "test", "default" }) class InstantiationControllerTest extends CommonRestController { private static final String AC_INSTANTIATION_CREATE_JSON = "src/test/resources/rest/acm/AutomationComposition.json"; diff --git a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/rest/stub/InstantiationControllerStubTest.java b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/rest/stub/InstantiationControllerStubTest.java new file mode 100644 index 000000000..afddc4d01 --- /dev/null +++ b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/rest/stub/InstantiationControllerStubTest.java @@ -0,0 +1,104 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2022 Nordix Foundation. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.clamp.acm.runtime.instantiation.rest.stub; + +import static org.assertj.core.api.Assertions.assertThat; + +import javax.ws.rs.client.Entity; +import javax.ws.rs.core.Response; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.onap.policy.clamp.acm.runtime.util.rest.CommonRestController; +import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationUpdate; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; +import org.springframework.boot.web.server.LocalServerPort; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +@ExtendWith(SpringExtension.class) +@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) +@ActiveProfiles({ "test", "stub" }) +class InstantiationControllerStubTest extends CommonRestController { + + private static final String COMMISSIONING_ENDPOINT = "compositions"; + private static final String INSTANTIATION_ENDPOINT = "instances"; + private static final String COMPOSITION_ID = "1aeed185-a98b-45b6-af22-8d5d20485ea3"; + private static final String INSTANCE_ID = "709c62b3-8918-41b9-a747-d21eb79c6c23"; + private static InstantiationUpdate instantiationUpdate = new InstantiationUpdate(); + + @LocalServerPort + private int randomServerPort; + + @BeforeEach + public void setUpPort() { + super.setHttpPrefix(randomServerPort); + } + + @Test + void testQuery() { + var invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT + + "/" + COMPOSITION_ID + + "/" + INSTANTIATION_ENDPOINT); + var respPost = invocationBuilder.get(); + assertThat(Response.Status.OK.getStatusCode()).isEqualTo(respPost.getStatus()); + } + + @Test + void testGet() { + var invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT + + "/" + COMPOSITION_ID + + "/" + INSTANTIATION_ENDPOINT + + "/" + INSTANCE_ID); + var respPost = invocationBuilder.get(); + assertThat(Response.Status.OK.getStatusCode()).isEqualTo(respPost.getStatus()); + } + + @Test + void testPut() { + var invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT + + "/" + COMPOSITION_ID + + "/" + INSTANTIATION_ENDPOINT + + "/" + INSTANCE_ID); + var respPost = invocationBuilder.put(Entity.json(instantiationUpdate)); + assertThat(Response.Status.OK.getStatusCode()).isEqualTo(respPost.getStatus()); + } + + @Test + void testPost() { + var invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT + + "/" + COMPOSITION_ID + + "/" + INSTANTIATION_ENDPOINT); + var respPost = invocationBuilder.post(Entity.json(instantiationUpdate)); + assertThat(Response.Status.OK.getStatusCode()).isEqualTo(respPost.getStatus()); + } + + @Test + void testDelete() { + var invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT + + "/" + COMPOSITION_ID + + "/" + INSTANTIATION_ENDPOINT + + "/" + INSTANCE_ID); + var respPost = invocationBuilder.delete(); + assertThat(Response.Status.OK.getStatusCode()).isEqualTo(respPost.getStatus()); + } +} diff --git a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/main/rest/ActuatorControllerTest.java b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/main/rest/ActuatorControllerTest.java index c1f7362e1..6070cafa4 100644 --- a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/main/rest/ActuatorControllerTest.java +++ b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/main/rest/ActuatorControllerTest.java @@ -38,7 +38,7 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; @AutoConfigureMetrics @ExtendWith(SpringExtension.class) @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) -@ActiveProfiles("test") +@ActiveProfiles({ "test", "default" }) class ActuatorControllerTest extends CommonRestController { private static final String HEALTH_ENDPOINT = "health"; |