552f430e905364fa27eb561483184f1dad402449
[policy/distribution.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2019 Nordix Foundation.
4  *  Modifications Copyright (C) 2020 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.distribution.reception.decoding.hpa;
23
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertTrue;
26
27 import java.io.IOException;
28 import java.util.Collection;
29 import java.util.Map;
30 import org.junit.AfterClass;
31 import org.junit.BeforeClass;
32 import org.junit.Test;
33 import org.onap.policy.common.parameters.ParameterGroup;
34 import org.onap.policy.common.parameters.ParameterService;
35 import org.onap.policy.common.utils.coder.CoderException;
36 import org.onap.policy.common.utils.coder.StandardCoder;
37 import org.onap.policy.distribution.model.Csar;
38 import org.onap.policy.distribution.reception.decoding.PolicyDecodingException;
39 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
40 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
41 import org.onap.policy.models.tosca.authorative.concepts.ToscaTopologyTemplate;
42
43 /**
44  * Class to perform unit test of {@link PolicyDecoderCsarHpa}.
45  */
46 public class TestPolicyDecoderCsarHpa {
47
48     private final StandardCoder encoder = new StandardCoder();
49
50     /**
51      * Set up for test cases.
52      */
53     @BeforeClass
54     public static void setUp() {
55         final ParameterGroup parameterGroup = CommonTestData.getPolicyDecoderParameters(
56                 "src/test/resources/parameters/HpaPolicyDecoderParameters.json",
57                 PolicyDecoderCsarHpaParameters.class);
58         parameterGroup.setName(PolicyDecoderCsarHpaParameters.class.getSimpleName());
59         ParameterService.register(parameterGroup);
60     }
61
62     /**
63      * Tear down.
64      */
65     @AfterClass
66     public static void tearDown() {
67         ParameterService.deregister(PolicyDecoderCsarHpaParameters.class.getSimpleName());
68     }
69
70     @Test
71     public void testHpaPolicy2Vnf() throws IOException, PolicyDecodingException, CoderException {
72         final Csar csar = new Csar("src/test/resources/service-TestNs8-csar.csar");
73         final PolicyDecoderCsarHpa policyDecoderCsarHpa = new PolicyDecoderCsarHpa();
74         policyDecoderCsarHpa.configure(PolicyDecoderCsarHpaParameters.class.getSimpleName());
75
76         final Collection<ToscaServiceTemplate> entities = policyDecoderCsarHpa.decode(csar);
77
78         assertEquals(2, entities.size());
79         final ToscaServiceTemplate entity = entities.iterator().next();
80         ToscaTopologyTemplate topologyTemplate = entity.getToscaTopologyTemplate();
81         Map<String, ToscaPolicy> map = topologyTemplate.getPolicies().get(0);
82         ToscaPolicy policy = map.get(PolicyDecoderCsarHpa.TOSCA_POLICY_HPA_OOF);
83         Map<String, Object> props = policy.getProperties();
84         Object flavorFeatures =
85                       props.get(PolicyDecoderCsarHpa.TOSCA_POLICY_FLAVORFEATURES);
86         String features = encoder.encode(flavorFeatures);
87         assertTrue(features.contains("\"id\":\"VDU_vgw_0\""));
88         assertTrue(features.contains("\"type\":\"tosca.nodes.nfv.Vdu.Compute\""));
89         assertTrue(features.contains("\"type\":\"flavor_directives\""));
90         assertTrue(features.contains("\"hpa-feature\":\"basicCapabilities\""));
91         assertTrue(features.contains("\"mandatory\":\"True\""));
92         assertTrue(features.contains("\"architecture\":\"generic\""));
93         assertTrue(features.contains("\"hpa-version\":\"v1\""));
94         assertTrue(features.contains("\"hpa-attribute-key\":\"virtualMemSize\""));
95         assertTrue(features.contains("\"operator\":\"=\""));
96         assertTrue(features.contains("\"unit\":\"MB\""));
97     }
98
99     @Test
100     public void testHpaPolicySriov() throws IOException, PolicyDecodingException, CoderException {
101         final Csar csar = new Csar("src/test/resources/hpaPolicySriov.csar");
102         final PolicyDecoderCsarHpa policyDecoderCsarHpa = new PolicyDecoderCsarHpa();
103         policyDecoderCsarHpa.configure(PolicyDecoderCsarHpaParameters.class.getSimpleName());
104
105         final Collection<ToscaServiceTemplate> entities = policyDecoderCsarHpa.decode(csar);
106         final ToscaServiceTemplate entity = entities.iterator().next();
107         ToscaTopologyTemplate topologyTemplate = entity.getToscaTopologyTemplate();
108         Map<String, ToscaPolicy> map = topologyTemplate.getPolicies().get(0);
109         ToscaPolicy policy = map.get(PolicyDecoderCsarHpa.TOSCA_POLICY_HPA_OOF);
110         Map<String, Object> props = policy.getProperties();
111         Object flavorFeatures =
112                       props.get(PolicyDecoderCsarHpa.TOSCA_POLICY_FLAVORFEATURES);
113         String features = encoder.encode(flavorFeatures);
114         assertTrue(features.contains("\"id\":\"VDU_vgw_0\""));
115         assertTrue(features.contains("\"type\":\"tosca.nodes.nfv.Vdu.Compute\""));
116         assertTrue(features.contains("\"type\":\"flavor_directives\""));
117         assertTrue(features.contains("\"attribute_name\":\"flavorName\""));
118         assertTrue(features.contains("\"attribute_value\":\"\""));
119         assertTrue(features.contains("\"hpa-feature\":\"sriovNICNetwork\""));
120         assertTrue(features.contains("\"mandatory\":\"True\""));
121         assertTrue(features.contains("\"architecture\":\"generic\""));
122         assertTrue(features.contains("\"hpa-version\":\"v1\""));
123         assertTrue(features.contains("\"hpa-attribute-key\":\"pciVendorId\""));
124         assertTrue(features.contains("\"hpa-attribute-value\":\"1234\""));
125         assertTrue(features.contains("\"operator\":\"=\""));
126         assertTrue(features.contains("\"unit\":\"\""));
127         assertTrue(features.contains("\"hpa-attribute-key\":\"pciDeviceId\""));
128         assertTrue(features.contains("\"hpa-attribute-value\":\"5678\""));
129         assertTrue(features.contains("\"operator\":\"=\""));
130         assertTrue(features.contains("\"unit\":\"\""));
131         assertTrue(features.contains("\"hpa-attribute-key\":\"pciNumDevices\""));
132         assertTrue(features.contains("\"hpa-attribute-value\":\"1\""));
133         assertTrue(features.contains("\"operator\":\"=\""));
134         assertTrue(features.contains("\"unit\":\"\""));
135     }
136
137     @Test
138     public void testHpaPolicyPciePassthrough() throws IOException, PolicyDecodingException, CoderException {
139         final Csar csar = new Csar("src/test/resources/hpaPolicyPciePassthrough.csar");
140         final PolicyDecoderCsarHpa policyDecoderCsarHpa = new PolicyDecoderCsarHpa();
141         policyDecoderCsarHpa.configure(PolicyDecoderCsarHpaParameters.class.getSimpleName());
142
143         final Collection<ToscaServiceTemplate> entities = policyDecoderCsarHpa.decode(csar);
144         assertEquals(2, entities.size());
145         final ToscaServiceTemplate entity = entities.iterator().next();
146         ToscaTopologyTemplate topologyTemplate = entity.getToscaTopologyTemplate();
147         Map<String, ToscaPolicy> map = topologyTemplate.getPolicies().get(0);
148         ToscaPolicy policy = map.get(PolicyDecoderCsarHpa.TOSCA_POLICY_HPA_OOF);
149         Map<String, Object> props = policy.getProperties();
150         Object flavorFeatures =
151                       props.get(PolicyDecoderCsarHpa.TOSCA_POLICY_FLAVORFEATURES);
152         String features = encoder.encode(flavorFeatures);
153         assertTrue(features.contains("\"id\":\"VDU_vgw_0\""));
154         assertTrue(features.contains("\"type\":\"tosca.nodes.nfv.Vdu.Compute\""));
155         assertTrue(features.contains("\"type\":\"flavor_directives\""));
156         assertTrue(features.contains("\"attribute_name\":\"flavorName\""));
157         assertTrue(features.contains("\"attribute_value\":\"\""));
158         assertTrue(features.contains("\"hpa-feature\":\"pciePassthrough\""));
159         assertTrue(features.contains("\"mandatory\":\"True\""));
160         assertTrue(features.contains("\"architecture\":\"generic\""));
161         assertTrue(features.contains("\"hpa-version\":\"v1\""));
162         assertTrue(features.contains("\"hpa-attribute-key\":\"pciVendorId\""));
163         assertTrue(features.contains("\"hpa-attribute-value\":\"1234\""));
164         assertTrue(features.contains("\"operator\":\"=\""));
165         assertTrue(features.contains("\"unit\":\"\""));
166         assertTrue(features.contains("\"hpa-attribute-key\":\"pciDeviceId\""));
167         assertTrue(features.contains("\"hpa-attribute-value\":\"5678\""));
168         assertTrue(features.contains("\"operator\":\"=\""));
169         assertTrue(features.contains("\"unit\":\"\""));
170         assertTrue(features.contains("\"hpa-attribute-key\":\"pciNumDevices\""));
171         assertTrue(features.contains("\"hpa-attribute-value\":\"1\""));
172         assertTrue(features.contains("\"operator\":\"=\""));
173         assertTrue(features.contains("\"unit\":\"\""));
174     }
175
176     @Test
177     public void testHpaPolicyHugePage() throws IOException, PolicyDecodingException, CoderException {
178         final Csar csar = new Csar("src/test/resources/hpaPolicyHugePage.csar");
179         final PolicyDecoderCsarHpa policyDecoderCsarHpa = new PolicyDecoderCsarHpa();
180         policyDecoderCsarHpa.configure(PolicyDecoderCsarHpaParameters.class.getSimpleName());
181
182         final Collection<ToscaServiceTemplate> entities = policyDecoderCsarHpa.decode(csar);
183         assertEquals(2, entities.size());
184         final ToscaServiceTemplate entity = entities.iterator().next();
185         ToscaTopologyTemplate topologyTemplate = entity.getToscaTopologyTemplate();
186         Map<String, ToscaPolicy> map = topologyTemplate.getPolicies().get(0);
187         ToscaPolicy policy = map.get(PolicyDecoderCsarHpa.TOSCA_POLICY_HPA_OOF);
188         Map<String, Object> props = policy.getProperties();
189         Object flavorFeatures =
190                       props.get(PolicyDecoderCsarHpa.TOSCA_POLICY_FLAVORFEATURES);
191         String features = encoder.encode(flavorFeatures);
192         assertTrue(features.contains("\"id\":\"VDU_vgw_0\""));
193         assertTrue(features.contains("\"type\":\"tosca.nodes.nfv.Vdu.Compute\""));
194         assertTrue(features.contains("\"type\":\"flavor_directives\""));
195         assertTrue(features.contains("\"attribute_name\":\"flavorName\""));
196         assertTrue(features.contains("\"attribute_value\":\"\""));
197         assertTrue(features.contains("\"hpa-feature\":\"hugePages\""));
198         assertTrue(features.contains("\"mandatory\":\"true\""));
199         assertTrue(features.contains("\"architecture\":\"generic\""));
200         assertTrue(features.contains("\"hpa-version\":\"v1\""));
201         assertTrue(features.contains("\"hpa-attribute-key\":\"memoryPageSize\""));
202         assertTrue(features.contains("\"hpa-attribute-value\":\"2\""));
203         assertTrue(features.contains("\"operator\":\"=\""));
204         assertTrue(features.contains("\"unit\":\"MB\""));
205     }
206
207     @Test
208     public void testS3p0PciVendorId() throws IOException, PolicyDecodingException, CoderException {
209         final Csar csar = new Csar("src/test/resources/s3p_0_pciVendorId.csar");
210         final PolicyDecoderCsarHpa policyDecoderCsarHpa = new PolicyDecoderCsarHpa();
211         policyDecoderCsarHpa.configure(PolicyDecoderCsarHpaParameters.class.getSimpleName());
212
213         final Collection<ToscaServiceTemplate> entities = policyDecoderCsarHpa.decode(csar);
214         assertEquals(1, entities.size());
215         final ToscaServiceTemplate entity = entities.iterator().next();
216         ToscaTopologyTemplate topologyTemplate = entity.getToscaTopologyTemplate();
217         Map<String, ToscaPolicy> map = topologyTemplate.getPolicies().get(0);
218         ToscaPolicy policy = map.get(PolicyDecoderCsarHpa.TOSCA_POLICY_HPA_OOF);
219         Map<String, Object> props = policy.getProperties();
220         Object flavorFeatures =
221                       props.get(PolicyDecoderCsarHpa.TOSCA_POLICY_FLAVORFEATURES);
222         String features = encoder.encode(flavorFeatures);
223         assertTrue(features.contains("\"id\":\"VDU_vgw_0\""));
224         assertTrue(features.contains("\"type\":\"tosca.nodes.nfv.Vdu.Compute\""));
225         assertTrue(features.contains("\"type\":\"flavor_directives\""));
226         assertTrue(features.contains("\"attribute_name\":\"flavorName\""));
227         assertTrue(features.contains("\"attribute_value\":\"\""));
228         assertTrue(features.contains("\"hpa-feature\":\"pciePassthrough\""));
229         assertTrue(features.contains("\"mandatory\":\"True\""));
230         assertTrue(features.contains("\"architecture\":\"generic\""));
231         assertTrue(features.contains("\"hpa-version\":\"v1\""));
232         assertTrue(features.contains("\"hpa-attribute-key\":\"pciVendorId\""));
233         assertTrue(features.contains("\"hpa-attribute-value\":\"1234\""));
234         assertTrue(features.contains("\"operator\":\"=\""));
235         assertTrue(features.contains("\"unit\":\"\""));
236     }
237
238     @Test
239     public void testserviceVcpeWithAll() throws IOException, PolicyDecodingException, CoderException {
240         final Csar csar = new Csar("src/test/resources/service-VcpeWithAll-csar.csar");
241         final PolicyDecoderCsarHpa policyDecoderCsarHpa = new PolicyDecoderCsarHpa();
242         policyDecoderCsarHpa.configure(PolicyDecoderCsarHpaParameters.class.getSimpleName());
243
244         final Collection<ToscaServiceTemplate> entities = policyDecoderCsarHpa.decode(csar);
245         assertEquals(5, entities.size());
246         final ToscaServiceTemplate entity = entities.iterator().next();
247         ToscaTopologyTemplate topologyTemplate = entity.getToscaTopologyTemplate();
248         Map<String, ToscaPolicy> map = topologyTemplate.getPolicies().get(0);
249         ToscaPolicy policy = map.get(PolicyDecoderCsarHpa.TOSCA_POLICY_HPA_OOF);
250         Map<String, Object> props = policy.getProperties();
251         Object flavorFeatures =
252                       props.get(PolicyDecoderCsarHpa.TOSCA_POLICY_FLAVORFEATURES);
253         String features = encoder.encode(flavorFeatures);
254         assertTrue(features.contains("\"type\":\"tosca.nodes.nfv.Vdu.Compute\""));
255         assertTrue(features.contains("\"type\":\"flavor_directives\""));
256         assertTrue(features.contains("\"attribute_name\":\"flavorName\""));
257         assertTrue(features.contains("\"attribute_value\":\"\""));
258         assertTrue(features.contains("\"hpa-feature\":\"sriovNICNetwork\""));
259         assertTrue(features.contains("\"mandatory\":\"True\""));
260         assertTrue(features.contains("\"architecture\":\"generic\""));
261         assertTrue(features.contains("\"hpa-version\":\"v1\""));
262         assertTrue(features.contains("\"hpa-attribute-key\":\"pciVendorId\""));
263         assertTrue(features.contains("\"hpa-attribute-value\":\"1234\""));
264         assertTrue(features.contains("\"operator\":\"=\""));
265         assertTrue(features.contains("\"unit\":\"\""));
266     }
267 }