2 * ============LICENSE_START======================================================================
3 * Copyright (C) 2023 OpenInfra Foundation Europe. All rights reserved.
4 * ===============================================================================================
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 * ============LICENSE_END========================================================================
19 package com.oransc.rappmanager.dme.service;
21 import static org.junit.jupiter.api.Assertions.assertEquals;
23 import com.google.gson.JsonArray;
24 import com.google.gson.JsonParser;
25 import com.oransc.rappmanager.models.csar.RappCsarConfigurationHandler;
26 import com.oransc.rappmanager.models.rapp.Rapp;
27 import com.oransc.rappmanager.models.rapp.RappDmeResourceBuilder;
28 import com.oransc.rappmanager.models.rapp.RappState;
29 import com.oransc.rappmanager.models.rappinstance.RappInstance;
30 import java.util.HashMap;
31 import java.util.HashSet;
34 import java.util.UUID;
35 import java.util.stream.Stream;
36 import org.junit.jupiter.api.Test;
37 import org.junit.jupiter.params.ParameterizedTest;
38 import org.junit.jupiter.params.provider.Arguments;
39 import org.junit.jupiter.params.provider.MethodSource;
40 import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
41 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElement;
42 import org.onap.policy.models.tosca.authorative.concepts.ToscaDataType;
43 import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
44 import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeType;
45 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
46 import org.onap.policy.models.tosca.authorative.concepts.ToscaTopologyTemplate;
47 import org.springframework.beans.factory.annotation.Autowired;
48 import org.springframework.boot.test.context.SpringBootTest;
50 @SpringBootTest(classes = {RappCsarConfigurationHandler.class, DmeAcmInterceptor.class})
51 class DmeAcmInterceptorTest {
54 DmeAcmInterceptor dmeAcmInterceptor;
56 RappDmeResourceBuilder rappDmeResourceBuilder = new RappDmeResourceBuilder();
57 private static final String validRappFile = "valid-rapp-package.csar";
58 String validCsarFileLocation = "src/test/resources/";
61 @MethodSource("getrAppInstances")
62 void testInjectAutomationComposition(RappInstance rAppInstance) {
63 AutomationComposition automationComposition = new AutomationComposition();
64 Map<UUID, AutomationCompositionElement> elements =
65 new HashMap<>(Map.of(UUID.randomUUID(), new AutomationCompositionElement()));
66 automationComposition.setElements(elements);
67 assertEquals(1, automationComposition.getElements().size());
68 Rapp rApp = Rapp.builder().rappId(UUID.randomUUID()).name("").packageName(validRappFile)
69 .packageLocation(validCsarFileLocation).state(RappState.COMMISSIONED)
70 .rappResources(rappDmeResourceBuilder.getResources()).build();
71 dmeAcmInterceptor.injectAutomationComposition(automationComposition, rApp, rAppInstance);
72 assertEquals(2, automationComposition.getElements().size());
76 void testInjectToscaServiceTemplate() {
77 ToscaServiceTemplate toscaServiceTemplate = new ToscaServiceTemplate();
78 toscaServiceTemplate.setDataTypes(new HashMap<>(Map.of("datatype1", new ToscaDataType())));
79 toscaServiceTemplate.setNodeTypes(new HashMap<>(Map.of("nodetype1", new ToscaNodeType())));
80 ToscaTopologyTemplate toscaTopologyTemplate = new ToscaTopologyTemplate();
81 ToscaNodeTemplate toscaNodeTemplate = new ToscaNodeTemplate();
82 String elements = "elements";
83 toscaNodeTemplate.setProperties(new HashMap<>(Map.of(elements, "[{}]")));
84 String nodeTemplateKey = "onap.policy.clamp.ac.element.AutomationCompositionDefinition";
86 toscaTopologyTemplate.setNodeTemplates(new HashMap<>(Map.of(nodeTemplateKey, toscaNodeTemplate)));
87 toscaServiceTemplate.setToscaTopologyTemplate(toscaTopologyTemplate);
89 toscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates().get(nodeTemplateKey).getProperties()
91 JsonArray elementArray = JsonParser.parseString(o.toString()).getAsJsonArray();
92 assertEquals(1, toscaServiceTemplate.getDataTypes().size());
93 assertEquals(1, toscaServiceTemplate.getNodeTypes().size());
94 assertEquals(1, elementArray.size());
95 dmeAcmInterceptor.injectToscaServiceTemplate(toscaServiceTemplate);
97 toscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates().get(nodeTemplateKey).getProperties()
99 JsonArray newElementArray = JsonParser.parseString(modObject.toString()).getAsJsonArray();
100 assertEquals(4, toscaServiceTemplate.getDataTypes().size());
101 assertEquals(2, toscaServiceTemplate.getNodeTypes().size());
102 assertEquals(2, newElementArray.size());
105 private static Stream<Arguments> getrAppInstances() {
106 RappDmeResourceBuilder rappDmeResourceBuilder = new RappDmeResourceBuilder();
107 RappInstance rappInstanceProducerEmpty = rappDmeResourceBuilder.getRappInstance();
108 RappInstance rappInstanceConsumerEmpty = rappDmeResourceBuilder.getRappInstance();
109 RappInstance rappInstanceSameInfoType = rappDmeResourceBuilder.getRappInstance();
110 rappInstanceProducerEmpty.getDme().setInfoTypesProducer(null);
111 rappInstanceProducerEmpty.getDme().setInfoProducer(null);
112 rappInstanceConsumerEmpty.getDme().setInfoTypeConsumer(null);
113 rappInstanceConsumerEmpty.getDme().setInfoConsumer(null);
114 Set<String> infoTypesProducer = new HashSet<>(rappInstanceSameInfoType.getDme().getInfoTypesProducer());
115 infoTypesProducer.remove(rappInstanceSameInfoType.getDme().getInfoConsumer());
116 rappInstanceSameInfoType.getDme().setInfoTypesProducer(infoTypesProducer);
117 return Stream.of(Arguments.of(rappDmeResourceBuilder.getRappInstance()),
118 Arguments.of(rappInstanceProducerEmpty), Arguments.of(rappInstanceConsumerEmpty),
119 Arguments.of(rappInstanceSameInfoType));