Merge "Pass rAppInstanceId to k8s participant and create the invoker with the instanc...
[nonrtric/plt/rappmanager.git] / rapp-manager-dme / src / test / java / com / oransc / rappmanager / dme / service / DmeAcmInterceptorTest.java
1 /*-
2  * ============LICENSE_START======================================================================
3  * Copyright (C) 2023-2024 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
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
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========================================================================
17  */
18
19 package com.oransc.rappmanager.dme.service;
20
21 import static org.junit.jupiter.api.Assertions.assertEquals;
22
23 import com.fasterxml.jackson.databind.ObjectMapper;
24 import com.google.gson.JsonArray;
25 import com.google.gson.JsonParser;
26 import com.oransc.rappmanager.models.configuration.RappsEnvironmentConfiguration;
27 import com.oransc.rappmanager.models.csar.RappCsarConfigurationHandler;
28 import com.oransc.rappmanager.models.rapp.Rapp;
29 import com.oransc.rappmanager.models.rapp.RappDmeResourceBuilder;
30 import com.oransc.rappmanager.models.rapp.RappState;
31 import com.oransc.rappmanager.models.rappinstance.RappInstance;
32 import java.util.HashMap;
33 import java.util.HashSet;
34 import java.util.Map;
35 import java.util.Set;
36 import java.util.UUID;
37 import java.util.stream.Stream;
38 import org.junit.jupiter.api.Test;
39 import org.junit.jupiter.params.ParameterizedTest;
40 import org.junit.jupiter.params.provider.Arguments;
41 import org.junit.jupiter.params.provider.MethodSource;
42 import org.onap.policy.clamp.models.acm.concepts.AutomationComposition;
43 import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionElement;
44 import org.onap.policy.models.tosca.authorative.concepts.ToscaDataType;
45 import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
46 import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeType;
47 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
48 import org.onap.policy.models.tosca.authorative.concepts.ToscaTopologyTemplate;
49 import org.springframework.beans.factory.annotation.Autowired;
50 import org.springframework.boot.test.context.SpringBootTest;
51
52 @SpringBootTest(classes = {ObjectMapper.class, RappsEnvironmentConfiguration.class, RappCsarConfigurationHandler.class,
53         DmeAcmInterceptor.class})
54 class DmeAcmInterceptorTest {
55
56     @Autowired
57     DmeAcmInterceptor dmeAcmInterceptor;
58
59     RappDmeResourceBuilder rappDmeResourceBuilder = new RappDmeResourceBuilder();
60     private static final String validRappFile = "valid-rapp-package.csar";
61     String validCsarFileLocation = "src/test/resources/";
62
63     @ParameterizedTest
64     @MethodSource("getrAppInstances")
65     void testInjectAutomationComposition(RappInstance rAppInstance) {
66         AutomationComposition automationComposition = new AutomationComposition();
67         Map<UUID, AutomationCompositionElement> elements =
68                 new HashMap<>(Map.of(UUID.randomUUID(), new AutomationCompositionElement()));
69         automationComposition.setElements(elements);
70         assertEquals(1, automationComposition.getElements().size());
71         Rapp rApp = Rapp.builder().rappId(UUID.randomUUID()).name("").packageName(validRappFile)
72                             .packageLocation(validCsarFileLocation).state(RappState.COMMISSIONED)
73                             .rappResources(rappDmeResourceBuilder.getResources()).build();
74         dmeAcmInterceptor.injectAutomationComposition(automationComposition, rApp, rAppInstance);
75         assertEquals(2, automationComposition.getElements().size());
76     }
77
78     @Test
79     void testInjectToscaServiceTemplate() {
80         ToscaServiceTemplate toscaServiceTemplate = new ToscaServiceTemplate();
81         toscaServiceTemplate.setDataTypes(new HashMap<>(Map.of("datatype1", new ToscaDataType())));
82         toscaServiceTemplate.setNodeTypes(new HashMap<>(Map.of("nodetype1", new ToscaNodeType())));
83         ToscaTopologyTemplate toscaTopologyTemplate = new ToscaTopologyTemplate();
84         ToscaNodeTemplate toscaNodeTemplate = new ToscaNodeTemplate();
85         String elements = "elements";
86         toscaNodeTemplate.setProperties(new HashMap<>(Map.of(elements, "[{}]")));
87         String nodeTemplateKey = "onap.policy.clamp.ac.element.AutomationCompositionDefinition";
88
89         toscaTopologyTemplate.setNodeTemplates(new HashMap<>(Map.of(nodeTemplateKey, toscaNodeTemplate)));
90         toscaServiceTemplate.setToscaTopologyTemplate(toscaTopologyTemplate);
91         Object o =
92                 toscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates().get(nodeTemplateKey).getProperties()
93                         .get(elements);
94         JsonArray elementArray = JsonParser.parseString(o.toString()).getAsJsonArray();
95         assertEquals(1, toscaServiceTemplate.getDataTypes().size());
96         assertEquals(1, toscaServiceTemplate.getNodeTypes().size());
97         assertEquals(1, elementArray.size());
98         dmeAcmInterceptor.injectToscaServiceTemplate(toscaServiceTemplate);
99         Object modObject =
100                 toscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates().get(nodeTemplateKey).getProperties()
101                         .get(elements);
102         JsonArray newElementArray = JsonParser.parseString(modObject.toString()).getAsJsonArray();
103         assertEquals(4, toscaServiceTemplate.getDataTypes().size());
104         assertEquals(2, toscaServiceTemplate.getNodeTypes().size());
105         assertEquals(2, newElementArray.size());
106     }
107
108     private static Stream<Arguments> getrAppInstances() {
109         RappDmeResourceBuilder rappDmeResourceBuilder = new RappDmeResourceBuilder();
110         RappInstance rappInstanceProducerEmpty = rappDmeResourceBuilder.getRappInstance();
111         RappInstance rappInstanceConsumerEmpty = rappDmeResourceBuilder.getRappInstance();
112         RappInstance rappInstanceSameInfoType = rappDmeResourceBuilder.getRappInstance();
113         rappInstanceProducerEmpty.getDme().setInfoTypesProducer(null);
114         rappInstanceProducerEmpty.getDme().setInfoProducer(null);
115         rappInstanceConsumerEmpty.getDme().setInfoTypeConsumer(null);
116         rappInstanceConsumerEmpty.getDme().setInfoConsumer(null);
117         Set<String> infoTypesProducer = new HashSet<>(rappInstanceSameInfoType.getDme().getInfoTypesProducer());
118         infoTypesProducer.remove(rappInstanceSameInfoType.getDme().getInfoConsumer());
119         rappInstanceSameInfoType.getDme().setInfoTypesProducer(infoTypesProducer);
120         return Stream.of(Arguments.of(rappDmeResourceBuilder.getRappInstance()),
121                 Arguments.of(rappInstanceProducerEmpty), Arguments.of(rappInstanceConsumerEmpty),
122                 Arguments.of(rappInstanceSameInfoType));
123     }
124 }