diff options
Diffstat (limited to 'runtime-acm')
6 files changed, 292 insertions, 2 deletions
diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/stub/ParticipantControllerStub.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/stub/ParticipantControllerStub.java new file mode 100644 index 000000000..e87accf20 --- /dev/null +++ b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/main/rest/stub/ParticipantControllerStub.java @@ -0,0 +1,70 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2023 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.ArrayList; +import java.util.List; +import java.util.UUID; +import lombok.RequiredArgsConstructor; +import org.onap.policy.clamp.acm.runtime.main.rest.gen.ParticipantMonitoringApi; +import org.onap.policy.clamp.acm.runtime.main.web.AbstractRestController; +import org.onap.policy.clamp.models.acm.concepts.ParticipantInformation; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Profile; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@Profile("stub") +@RequiredArgsConstructor +public class ParticipantControllerStub extends AbstractRestController implements ParticipantMonitoringApi { + + private final StubUtils stubUtils; + @Value("${stub.getSingleParticipantResponse}") + private String pathToSingleParticipant; + + @Value("${stub.getMultipleParticipantResponse}") + private String pathToParticipantList; + + @Override + public ResponseEntity<ParticipantInformation> getParticipant(UUID participantId, UUID xonaprequestid) { + return stubUtils.getResponse(pathToSingleParticipant, ParticipantInformation.class); + } + + @Override + public ResponseEntity<Void> orderAllParticipantsReport(UUID xonaprequestid) { + return new ResponseEntity(HttpStatus.ACCEPTED); + } + + @Override + public ResponseEntity<Void> orderParticipantReport(UUID participantId, UUID xonaprequestid) { + return new ResponseEntity(HttpStatus.ACCEPTED); + } + + @Override + public ResponseEntity<List<ParticipantInformation>> queryParticipants(String name, String version, + UUID xonaprequestid) { + List<ParticipantInformation> participantInformationList = new ArrayList<>(); + return (ResponseEntity<List<ParticipantInformation>>) stubUtils + .getResponse(pathToParticipantList, participantInformationList.getClass()); + } +} diff --git a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/participants/AcmParticipantProvider.java b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/participants/AcmParticipantProvider.java index de3fc753b..d0fcdd936 100644 --- a/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/participants/AcmParticipantProvider.java +++ b/runtime-acm/src/main/java/org/onap/policy/clamp/acm/runtime/participants/AcmParticipantProvider.java @@ -59,6 +59,10 @@ public class AcmParticipantProvider { participants.forEach(participant -> { ParticipantInformation participantInformation = new ParticipantInformation(); participantInformation.setParticipant(participant); + participantInformation.setAcElementInstanceMap(getAutomationCompositionElementsForParticipant(participant + .getParticipantId())); + participantInformation.setAcNodeTemplateStateDefinitionMap(getNodeTemplateStatesForParticipant(participant + .getParticipantId())); participantInformationList.add(participantInformation); }); return participantInformationList; diff --git a/runtime-acm/src/main/resources/application-stub.yaml b/runtime-acm/src/main/resources/application-stub.yaml index e752df3fd..39641e39d 100644 --- a/runtime-acm/src/main/resources/application-stub.yaml +++ b/runtime-acm/src/main/resources/application-stub.yaml @@ -8,6 +8,8 @@ stub: getAllCompositionInstancesResponse: "/openapi/examples/getAllCompositionInstancesResponse.json" getCompositionInstancesResponse: "/openapi/examples/getCompositionInstancesResponse.json" getSingleCompositionDefinition: "/openapi/examples/getSingleCompositionDefinition.json" + getSingleParticipantResponse: "/openapi/examples/getSingleParticipantResponse.json" + getMultipleParticipantResponse: "/openapi/examples/getMultipleParticipantResponse.json" postCommissionResponse: "/openapi/examples/postCommissionCompositionDefinitionsResponse.json" postCompositionDefinitions: "/openapi/examples/postCompositionDefinitions.json" postCompositionInstance: "/openapi/examples/postCompositionInstance.json" @@ -16,6 +18,6 @@ stub: putCompositionDefinitionUpdateResponse: "/openapi/examples/putCompositionDefinitionUpdateResponse.json" putCompositionInstanceUpdate: "/openapi/examples/putCompositionInstanceUpdate.json" putCompositionInstanceUpdateResponse: " /openapi/examples/putCompositionInstanceUpdateResponse.json" - - + + diff --git a/runtime-acm/src/main/resources/openapi/examples/getMultipleParticipantResponse.json b/runtime-acm/src/main/resources/openapi/examples/getMultipleParticipantResponse.json new file mode 100644 index 000000000..7e277c5a3 --- /dev/null +++ b/runtime-acm/src/main/resources/openapi/examples/getMultipleParticipantResponse.json @@ -0,0 +1,88 @@ +[ + { + "participant": { + "participantId": "101c62b3-8918-41b9-a747-d21eb79c6c03", + "participantState": "ON_LINE", + "participantSupportedElementTypes": { + "3012010d-e59e-4dde-bab1-3ee544e49b6d": { + "id": "3012010d-e59e-4dde-bab1-3ee544e49b6d", + "typeName": "org.onap.policy.clamp.acm.AutomationCompositionElement", + "typeVersion": "1.0.1" + }, + "8d9e947e-c444-471c-9420-29f1c6584f8c": { + "id": "8d9e947e-c444-471c-9420-29f1c6584f8c", + "typeName": "org.onap.policy.clamp.acm.PolicyAutomationCompositionElement", + "typeVersion": "1.0.1" + } + } + }, + "acNodeTemplateStateDefinitionMap": { + "8cf8b401-dfd7-4ffe-90ff-c6543da10789": { + "nodeTemplateStateId": "8cf8b401-dfd7-4ffe-90ff-c6543da10789", + "participantId": "101c62b3-8918-41b9-a747-d21eb79c6c03", + "nodeTemplateId": { + "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement", + "version": "1.2.3" + }, + "state": "PRIMED" + } + }, + "acElementInstanceMap": { + "709c62b3-8918-41b9-a747-d21eb79c6c22": { + "id": "709c62b3-8918-41b9-a747-d21eb79c6c22", + "definition": { + "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement", + "version": "1.2.3" + }, + "participantId": "101c62b3-8918-41b9-a747-d21eb79c6c03", + "deployState": "DEPLOYED", + "lockState": "UNLOCKED", + "description": "Automation composition element for the operational policy for Performance Management Subscription Handling", + "properties": {} + } + } + }, + { + "participant": { + "participantId": "985d73aa-abba-11ed-afa1-0242ac120002", + "participantState": "ON_LINE", + "participantSupportedElementTypes": { + "cded8a5a-abba-11ed-afa1-0242ac120002": { + "id": "cded8a5a-abba-11ed-afa1-0242ac120002", + "typeName": "org.onap.policy.clamp.acm.K8SMicroserviceAutomationCompositionElement", + "typeVersion": "1.0.1" + }, + "25ac7864-abbb-11ed-afa1-0242ac120002": { + "id": "25ac7864-abbb-11ed-afa1-0242ac120002", + "typeName": "org.onap.policy.clamp.acm.AutomationCompositionElement", + "typeVersion": "1.0.1" + } + } + }, + "acNodeTemplateStateDefinitionMap": { + "34b4d248-abbb-11ed-afa1-0242ac120002": { + "nodeTemplateStateId": "34b4d248-abbb-11ed-afa1-0242ac120002", + "participantId": "985d73aa-abba-11ed-afa1-0242ac120002", + "nodeTemplateId": { + "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement", + "version": "1.2.3" + }, + "state": "PRIMED" + } + }, + "acElementInstanceMap": { + "3dd7a936-abbb-11ed-afa1-0242ac120002": { + "id": "3dd7a936-abbb-11ed-afa1-0242ac120002", + "definition": { + "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement", + "version": "1.2.3" + }, + "participantId": "985d73aa-abba-11ed-afa1-0242ac120002", + "deployState": "DEPLOYED", + "lockState": "UNLOCKED", + "description": "Automation composition element for the operational policy for Performance Management Subscription Handling", + "properties": {} + } + } + } +] diff --git a/runtime-acm/src/main/resources/openapi/examples/getSingleParticipantResponse.json b/runtime-acm/src/main/resources/openapi/examples/getSingleParticipantResponse.json new file mode 100644 index 000000000..350fd29d7 --- /dev/null +++ b/runtime-acm/src/main/resources/openapi/examples/getSingleParticipantResponse.json @@ -0,0 +1,43 @@ +{ + "participant": { + "participantId": "101c62b3-8918-41b9-a747-d21eb79c6c03", + "participantState": "ON_LINE", + "participantSupportedElementTypes": { + "3012010d-e59e-4dde-bab1-3ee544e49b6d": { + "id": "3012010d-e59e-4dde-bab1-3ee544e49b6d", + "typeName": "org.onap.policy.clamp.acm.AutomationCompositionElement", + "typeVersion": "1.0.1" + }, + "8d9e947e-c444-471c-9420-29f1c6584f8c": { + "id": "8d9e947e-c444-471c-9420-29f1c6584f8c", + "typeName": "org.onap.policy.clamp.acm.PolicyAutomationCompositionElement", + "typeVersion": "1.0.1" + } + } + }, + "acNodeTemplateStateDefinitionMap": { + "8cf8b401-dfd7-4ffe-90ff-c6543da10789": { + "nodeTemplateStateId": "8cf8b401-dfd7-4ffe-90ff-c6543da10789", + "participantId": "101c62b3-8918-41b9-a747-d21eb79c6c03", + "nodeTemplateId": { + "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement", + "version": "1.2.3" + }, + "state": "PRIMED" + } + }, + "acElementInstanceMap": { + "709c62b3-8918-41b9-a747-d21eb79c6c22": { + "id": "709c62b3-8918-41b9-a747-d21eb79c6c22", + "definition": { + "name": "org.onap.domain.pmsh.PMSH_OperationalPolicyAutomationCompositionElement", + "version": "1.2.3" + }, + "participantId": "101c62b3-8918-41b9-a747-d21eb79c6c03", + "deployState": "DEPLOYED", + "lockState": "UNLOCKED", + "description": "Automation composition element for the operational policy for Performance Management Subscription Handling", + "properties": {} + } + } +} diff --git a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/contract/ParticipantControllerStubTest.java b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/contract/ParticipantControllerStubTest.java new file mode 100644 index 000000000..f0cd359c6 --- /dev/null +++ b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/contract/ParticipantControllerStubTest.java @@ -0,0 +1,83 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2023 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.contract; + +import static org.assertj.core.api.Assertions.assertThat; + +import javax.ws.rs.client.Entity; +import javax.ws.rs.core.MediaType; +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.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.web.server.LocalServerPort; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +@ExtendWith(SpringExtension.class) +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +@ActiveProfiles({ "test", "stub" }) +public class ParticipantControllerStubTest extends CommonRestController { + private static final String PARTICIPANT_ENDPOINT = "participants"; + private static final String PARTICIPANT_ID = "101c62b3-8918-41b9-a747-d21eb79c6c03"; + + @LocalServerPort + private int randomServerPort; + + @BeforeEach + public void setUpPort() { + super.setHttpPrefix(randomServerPort); + } + + @Test + void testGet() { + var invocationBuilder = super.sendRequest(PARTICIPANT_ENDPOINT + "/" + PARTICIPANT_ID); + var respPost = invocationBuilder.get(); + assertThat(Response.Status.OK.getStatusCode()).isEqualTo(respPost.getStatus()); + } + + @Test + void testQuery() { + var invocationBuilder = super.sendRequest(PARTICIPANT_ENDPOINT); + var respPost = invocationBuilder.get(); + assertThat(Response.Status.OK.getStatusCode()).isEqualTo(respPost.getStatus()); + } + + @Test + void testOrderReport() { + var invocationBuilder = super.sendRequest(PARTICIPANT_ENDPOINT + "/" + PARTICIPANT_ID); + + var respPost = invocationBuilder.header("Content-Length", 0).put(Entity.entity("" + + "", MediaType.APPLICATION_JSON)); + assertThat(Response.Status.ACCEPTED.getStatusCode()).isEqualTo(respPost.getStatus()); + } + + @Test + void testOrderAllReport() { + var invocationBuilder = super.sendRequest(PARTICIPANT_ENDPOINT); + + var respPost = invocationBuilder.header("Content-Length", 0).put(Entity.entity("" + + "", MediaType.APPLICATION_JSON)); + assertThat(Response.Status.ACCEPTED.getStatusCode()).isEqualTo(respPost.getStatus()); + } +} |