Add unit tests for policy type and policy filters
[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
99                     if (policy.getVersion() == null) {
100                         policy.setVersion(PfKey.NULL_KEY_VERSION);
101                     }
102                     if (policy.getTypeVersion() == null) {
103                         policy.setTypeVersion(PfKey.NULL_KEY_VERSION);
104                     }
105                     if (!policyList.contains(policy)) {
106                         policyList.add(policy);
107                     }
108                 }
109             }
110         }
111
112         for (ToscaPolicy policy : policyList) {
113             LOGGER.info("using policy-" + policy.getName() + ":" + policy.getVersion() + ", type-" + policy.getType()
114                     + ":" + policy.getTypeVersion());
115         }
116     }
117
118     @Test
119     public void testNullList() {
120         ToscaPolicyFilter filter = ToscaPolicyFilter.builder().build();
121
122         assertThatThrownBy(() -> {
123             filter.filter(null);
124         }).hasMessage("originalList is marked @NonNull but is null");
125     }
126
127     @Test
128     public void testFilterNothing() {
129         ToscaPolicyFilter filter = ToscaPolicyFilter.builder().build();
130
131         List<ToscaPolicy> filteredList = filter.filter(policyList);
132         assertTrue(filteredList.containsAll(policyList));
133     }
134
135     @Test
136     public void testFilterLatestVersion() {
137         ToscaPolicyFilter filter = ToscaPolicyFilter.builder().version(ToscaPolicyFilter.LATEST_VERSION).build();
138
139         List<ToscaPolicy> filteredList = filter.filter(policyList);
140         assertEquals(15, filteredList.size());
141         assertEquals("1.0.0", filteredList.get(7).getVersion());
142         assertEquals("1.0.0", filteredList.get(12).getVersion());
143
144         assertEquals(17, policyList.size());
145         assertEquals(15, filteredList.size());
146
147         policyList.get(10).setVersion("2.0.0");
148         policyList.get(16).setVersion("3.4.5");
149         filteredList = filter.filter(policyList);
150         assertEquals(15, filteredList.size());
151         assertEquals("2.0.0", filteredList.get(7).getVersion());
152         assertEquals("3.4.5", filteredList.get(12).getVersion());
153
154         policyList.get(10).setVersion("1.0.0");
155         policyList.get(16).setVersion("1.0.0");
156         filteredList = filter.filter(policyList);
157         assertEquals(15, filteredList.size());
158         assertEquals("1.0.0", filteredList.get(7).getVersion());
159         assertEquals("1.0.0", filteredList.get(12).getVersion());
160     }
161
162     @Test
163     public void testFilterNameVersion() {
164         ToscaPolicyFilter filter = ToscaPolicyFilter.builder().name("operational.modifyconfig").build();
165         List<ToscaPolicy> filteredList = filter.filter(policyList);
166         assertEquals(2, filteredList.size());
167
168         filter = ToscaPolicyFilter.builder().name("guard.frequency.scaleout").build();
169         filteredList = filter.filter(policyList);
170         assertEquals(2, filteredList.size());
171
172         filter = ToscaPolicyFilter.builder().name("guard.frequency.scalein").build();
173         filteredList = filter.filter(policyList);
174         assertEquals(0, filteredList.size());
175
176         filter = ToscaPolicyFilter.builder().version("1.0.0").build();
177         filteredList = filter.filter(policyList);
178         assertEquals(17, filteredList.size());
179
180         filter = ToscaPolicyFilter.builder().name("OSDF_CASABLANCA.SubscriberPolicy_v1").version("1.0.0").build();
181         filteredList = filter.filter(policyList);
182         assertEquals(1, filteredList.size());
183
184         filter = ToscaPolicyFilter.builder().name("operational.modifyconfig").version("1.0.0").build();
185         filteredList = filter.filter(policyList);
186         assertEquals(2, filteredList.size());
187     }
188
189     @Test
190     public void testFilterTypeVersion() {
191         ToscaPolicyFilter filter = ToscaPolicyFilter.builder().type("onap.policies.controlloop.Operational").build();
192         List<ToscaPolicy> filteredList = filter.filter(policyList);
193         assertEquals(4, filteredList.size());
194
195         filter = ToscaPolicyFilter.builder().type("onap.policies.monitoring.cdap.tca.hi.lo.app").build();
196         filteredList = filter.filter(policyList);
197         assertEquals(2, filteredList.size());
198
199         filter = ToscaPolicyFilter.builder().type("onap.policies.controlloop.NonOperational").build();
200         filteredList = filter.filter(policyList);
201         assertEquals(0, filteredList.size());
202
203         filter = ToscaPolicyFilter.builder().typeVersion("0.0.0").build();
204         filteredList = filter.filter(policyList);
205         assertEquals(17, filteredList.size());
206
207         filter = ToscaPolicyFilter.builder().type("onap.policies.optimization.HpaPolicy").typeVersion("0.0.0").build();
208         filteredList = filter.filter(policyList);
209         assertEquals(1, filteredList.size());
210
211         filter = ToscaPolicyFilter.builder().type("onap.policies.controlloop.Operational").typeVersion("0.0.0").build();
212         filteredList = filter.filter(policyList);
213         assertEquals(4, filteredList.size());
214     }
215 }