4653296b723e17fd046a6b05b0942f234eb6dcef
[policy/models.git] / models-tosca / src / test / java / org / onap / policy / models / tosca / authorative / concepts / ToscaPolicyFilterTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2019 Nordix Foundation.
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  *
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.models.tosca.authorative.concepts;
22
23 import static org.assertj.core.api.Assertions.assertThatThrownBy;
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertNotNull;
26 import static org.junit.Assert.assertTrue;
27
28 import com.google.gson.GsonBuilder;
29
30 import java.util.ArrayList;
31 import java.util.List;
32 import java.util.Map;
33 import java.util.Map.Entry;
34
35 import org.junit.BeforeClass;
36 import org.junit.Test;
37 import org.onap.policy.common.utils.coder.CoderException;
38 import org.onap.policy.common.utils.coder.StandardCoder;
39 import org.onap.policy.common.utils.resources.ResourceUtils;
40 import org.onap.policy.models.base.PfKey;
41 import org.slf4j.Logger;
42 import org.slf4j.LoggerFactory;
43 import org.yaml.snakeyaml.Yaml;
44
45 /**
46  * Test of the {@link ToscaPolicyFilter} class.
47  *
48  * @author Liam Fallon (liam.fallon@est.tech)
49  */
50 public class ToscaPolicyFilterTest {
51     // Logger for this class
52     private static final Logger LOGGER = LoggerFactory.getLogger(ToscaPolicyFilterTest.class);
53
54     // @formatter:off
55     private static final String[] policyResourceNames = {
56         "policies/vCPE.policies.optimization.input.tosca.yaml",
57         "policies/vCPE.policy.monitoring.input.tosca.json",
58         "policies/vCPE.policy.monitoring.input.tosca.yaml",
59         "policies/vCPE.policy.operational.input.tosca.yaml",
60         "policies/vDNS.policy.guard.frequency.input.tosca.json",
61         "policies/vDNS.policy.guard.frequency.input.tosca.yaml",
62         "policies/vDNS.policy.guard.minmax.input.tosca.yaml",
63         "policies/vDNS.policy.monitoring.input.tosca.json",
64         "policies/vDNS.policy.monitoring.input.tosca.yaml",
65         "policies/vDNS.policy.operational.input.tosca.yaml",
66         "policies/vFirewall.policy.monitoring.input.tosca.json",
67         "policies/vFirewall.policy.monitoring.input.tosca.yaml",
68         "policies/vFirewall.policy.operational.input.tosca.json",
69         "policies/vFirewall.policy.operational.input.tosca.yaml"
70     };
71     // @formatter:on
72
73     private static List<ToscaPolicy> policyList = new ArrayList<>();
74
75     /**
76      * Set up a Tosca Policy type list for filtering.
77      *
78      * @throws CoderException on JSON decoding errors
79      */
80     @BeforeClass
81     public static void setupTypeList() throws CoderException {
82         for (String policyResourceName : policyResourceNames) {
83             String policyString = ResourceUtils.getResourceAsString(policyResourceName);
84             if (policyResourceName.endsWith("yaml")) {
85                 Object yamlObject = new Yaml().load(policyString);
86                 policyString = new GsonBuilder().setPrettyPrinting().create().toJson(yamlObject);
87             }
88
89             ToscaServiceTemplate serviceTemplate = new StandardCoder().decode(policyString, ToscaServiceTemplate.class);
90             assertNotNull(serviceTemplate);
91
92             for (Map<String, ToscaPolicy> foundPolicyMap : serviceTemplate.getToscaTopologyTemplate().getPolicies()) {
93                 for (Entry<String, ToscaPolicy> policyEntry : foundPolicyMap.entrySet()) {
94                     ToscaPolicy policy = policyEntry.getValue();
95                     if (policy.getName() == null) {
96                         policy.setName(policyEntry.getKey());
97                     }
98                     if (policy.getVersion() == null) {
99                         policy.setVersion(PfKey.NULL_KEY_VERSION);
100                     }
101                     if (policy.getTypeVersion() == null) {
102                         policy.setTypeVersion(PfKey.NULL_KEY_VERSION);
103                     }
104                     if (!policyList.contains(policy)) {
105                         policyList.add(policy);
106                     }
107                 }
108             }
109         }
110
111         for (ToscaPolicy policy : policyList) {
112             LOGGER.info("using policy-" + policy.getName() + ":" + policy.getVersion() + ", type-" + policy.getType()
113                     + ":" + policy.getTypeVersion());
114         }
115     }
116
117     @Test
118     public void testNullList() {
119         ToscaPolicyFilter filter = ToscaPolicyFilter.builder().build();
120
121         assertThatThrownBy(() -> {
122             filter.filter(null);
123         }).hasMessage("originalList is marked @NonNull but is null");
124     }
125
126     @Test
127     public void testFilterNothing() {
128         ToscaPolicyFilter filter = ToscaPolicyFilter.builder().build();
129
130         List<ToscaPolicy> filteredList = filter.filter(policyList);
131         assertTrue(filteredList.containsAll(policyList));
132     }
133
134     @Test
135     public void testFilterLatestVersion() {
136         ToscaPolicyFilter filter = ToscaPolicyFilter.builder().version(ToscaPolicyFilter.LATEST_VERSION).build();
137
138         List<ToscaPolicy> filteredList = filter.filter(policyList);
139         assertEquals(15, filteredList.size());
140         assertEquals("1.0.0", filteredList.get(7).getVersion());
141         assertEquals("1.0.0", filteredList.get(12).getVersion());
142
143         assertEquals(17, policyList.size());
144         assertEquals(15, filteredList.size());
145
146         policyList.get(10).setVersion("2.0.0");
147         policyList.get(16).setVersion("3.4.5");
148         filteredList = filter.filter(policyList);
149         assertEquals(15, filteredList.size());
150         assertEquals("2.0.0", filteredList.get(7).getVersion());
151         assertEquals("3.4.5", filteredList.get(12).getVersion());
152
153         policyList.get(10).setVersion("1.0.0");
154         policyList.get(16).setVersion("1.0.0");
155         filteredList = filter.filter(policyList);
156         assertEquals(15, filteredList.size());
157         assertEquals("1.0.0", filteredList.get(7).getVersion());
158         assertEquals("1.0.0", filteredList.get(12).getVersion());
159     }
160
161     @Test
162     public void testFilterNameVersion() {
163         ToscaPolicyFilter filter = ToscaPolicyFilter.builder().name("operational.modifyconfig").build();
164         List<ToscaPolicy> filteredList = filter.filter(policyList);
165         assertEquals(2, filteredList.size());
166
167         filter = ToscaPolicyFilter.builder().name("guard.frequency.scaleout").build();
168         filteredList = filter.filter(policyList);
169         assertEquals(2, filteredList.size());
170
171         filter = ToscaPolicyFilter.builder().name("guard.frequency.scalein").build();
172         filteredList = filter.filter(policyList);
173         assertEquals(0, filteredList.size());
174
175         filter = ToscaPolicyFilter.builder().version("1.0.0").build();
176         filteredList = filter.filter(policyList);
177         assertEquals(17, filteredList.size());
178
179         filter = ToscaPolicyFilter.builder().name("OSDF_CASABLANCA.SubscriberPolicy_v1").version("1.0.0").build();
180         filteredList = filter.filter(policyList);
181         assertEquals(1, filteredList.size());
182
183         filter = ToscaPolicyFilter.builder().name("operational.modifyconfig").version("1.0.0").build();
184         filteredList = filter.filter(policyList);
185         assertEquals(2, filteredList.size());
186     }
187
188     @Test
189     public void testFilterTypeVersion() {
190         ToscaPolicyFilter filter = ToscaPolicyFilter.builder().type("onap.policies.controlloop.Operational").build();
191         List<ToscaPolicy> filteredList = filter.filter(policyList);
192         assertEquals(4, filteredList.size());
193
194         filter = ToscaPolicyFilter.builder().type("onap.policies.monitoring.cdap.tca.hi.lo.app").build();
195         filteredList = filter.filter(policyList);
196         assertEquals(2, filteredList.size());
197
198         filter = ToscaPolicyFilter.builder().type("onap.policies.controlloop.NonOperational").build();
199         filteredList = filter.filter(policyList);
200         assertEquals(0, filteredList.size());
201
202         filter = ToscaPolicyFilter.builder().typeVersion("0.0.0").build();
203         filteredList = filter.filter(policyList);
204         assertEquals(17, filteredList.size());
205
206         filter = ToscaPolicyFilter.builder().type("onap.policies.optimization.HpaPolicy").typeVersion("0.0.0").build();
207         filteredList = filter.filter(policyList);
208         assertEquals(1, filteredList.size());
209
210         filter = ToscaPolicyFilter.builder().type("onap.policies.controlloop.Operational").typeVersion("0.0.0").build();
211         filteredList = filter.filter(policyList);
212         assertEquals(4, filteredList.size());
213     }
214 }