2  * ============LICENSE_START=======================================================
 
   3  *  Copyright (C) 2019-2021 Nordix Foundation.
 
   4  *  Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
 
   5  *  Modifications Copyright (C) 2024 Nordix Foundation
 
   6  * ================================================================================
 
   7  * Licensed under the Apache License, Version 2.0 (the "License");
 
   8  * you may not use this file except in compliance with the License.
 
   9  * You may obtain a copy of the License at
 
  11  *      http://www.apache.org/licenses/LICENSE-2.0
 
  13  * Unless required by applicable law or agreed to in writing, software
 
  14  * distributed under the License is distributed on an "AS IS" BASIS,
 
  15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  16  * See the License for the specific language governing permissions and
 
  17  * limitations under the License.
 
  19  * SPDX-License-Identifier: Apache-2.0
 
  20  * ============LICENSE_END=========================================================
 
  23 package org.onap.policy.models.tosca.authorative.concepts;
 
  25 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
  26 import static org.junit.jupiter.api.Assertions.assertEquals;
 
  27 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
  28 import static org.junit.jupiter.api.Assertions.assertTrue;
 
  30 import com.google.gson.GsonBuilder;
 
  31 import java.util.ArrayList;
 
  32 import java.util.List;
 
  34 import java.util.Map.Entry;
 
  35 import org.junit.jupiter.api.BeforeAll;
 
  36 import org.junit.jupiter.api.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;
 
  46  * Test of the {@link ToscaEntityFilter} class.
 
  48  * @author Liam Fallon (liam.fallon@est.tech)
 
  50 class ToscaEntityFilterTest {
 
  51     // Logger for this class
 
  52     private static final Logger LOGGER = LoggerFactory.getLogger(ToscaEntityFilterTest.class);
 
  54     private static final String VERSION_100 = "1.0.0";
 
  55     private static final String VERSION_000 = "0.0.0";
 
  58     private static final String[] policyTypeResourceNames = {
 
  59         "policytypes/onap.policies.optimization.resource.DistancePolicy.yaml",
 
  60         "policytypes/onap.policies.optimization.resource.VnfPolicy.yaml",
 
  61         "policytypes/onap.policies.optimization.resource.PciPolicy.yaml",
 
  62         "policytypes/onap.policies.optimization.resource.OptimizationPolicy.yaml",
 
  63         "policytypes/onap.policies.controlloop.guard.common.Blacklist.yaml",
 
  64         "policytypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.yaml",
 
  65         "policytypes/onap.policies.optimization.resource.HpaPolicy.yaml",
 
  66         "policytypes/onap.policies.optimization.resource.Vim_fit.yaml",
 
  67         "policytypes/onap.policies.optimization.service.SubscriberPolicy.yaml",
 
  68         "policytypes/onap.policies.optimization.resource.AffinityPolicy.yaml",
 
  69         "policytypes/onap.policies.optimization.service.QueryPolicy.yaml",
 
  70         "policytypes/onap.policies.controlloop.guard.common.MinMax.yaml",
 
  71         "policytypes/onap.policies.controlloop.guard.common.FrequencyLimiter.yaml",
 
  72         "policytypes/onap.policies.controlloop.guard.coordination.FirstBlocksSecond.yaml",
 
  73         "policytypes/onap.policies.Optimization.yaml",
 
  74         "policytypes/onap.policies.monitoring.tcagen2.yaml"
 
  78     private static List<ToscaPolicyType> typeList = new ArrayList<>();
 
  81      * Set up a Tosca Policy type list for filtering.
 
  83      * @throws CoderException on JSON decoding errors
 
  86     public static void setupTypeList() throws CoderException {
 
  87         for (String policyTypeResourceName : policyTypeResourceNames) {
 
  88             String policyTypeString = ResourceUtils.getResourceAsString(policyTypeResourceName);
 
  89             Object yamlObject = new Yaml().load(policyTypeString);
 
  90             String yamlAsJsonString = new GsonBuilder().setPrettyPrinting().create().toJson(yamlObject);
 
  92             ToscaServiceTemplate serviceTemplate =
 
  93                     new StandardCoder().decode(yamlAsJsonString, ToscaServiceTemplate.class);
 
  94             assertNotNull(serviceTemplate);
 
  96             addPolicyTypes(serviceTemplate.getPolicyTypes());
 
  99         for (ToscaPolicyType type : typeList) {
 
 100             LOGGER.info("using policy type-" + type.getName() + ":" + type.getVersion());
 
 104     private static void addPolicyTypes(Map<String, ToscaPolicyType> foundPolicyTypeMap) {
 
 105         for (Entry<String, ToscaPolicyType> policyTypeEntry : foundPolicyTypeMap.entrySet()) {
 
 106             ToscaPolicyType policyType = policyTypeEntry.getValue();
 
 107             if (policyType.getName() == null) {
 
 108                 policyType.setName(policyTypeEntry.getKey());
 
 110             if (policyType.getVersion() == null) {
 
 111                 policyType.setVersion(PfKey.NULL_KEY_VERSION);
 
 113             if (!typeList.contains(policyType)) {
 
 114                 typeList.add(policyType);
 
 120     void testNullList() {
 
 121         ToscaEntityFilter<ToscaPolicyType> filter = ToscaEntityFilter.<ToscaPolicyType>builder().build();
 
 123         assertThatThrownBy(() -> {
 
 125         }).hasMessageMatching("originalList is marked .*on.*ull but is null");
 
 129     void testFilterNothing() {
 
 130         ToscaEntityFilter<ToscaPolicyType> filter = ToscaEntityFilter.<ToscaPolicyType>builder().build();
 
 132         List<ToscaPolicyType> filteredList = filter.filter(typeList);
 
 133         assertTrue(filteredList.containsAll(typeList));
 
 137     void testFilterLatestVersion() {
 
 138         ToscaEntityFilter<ToscaPolicyType> filter =
 
 139                 ToscaEntityFilter.<ToscaPolicyType>builder().version(ToscaEntityFilter.LATEST_VERSION).build();
 
 141         List<ToscaPolicyType> filteredList = filter.filter(typeList);
 
 142         assertEquals(19, filteredList.size());
 
 143         assertEquals(VERSION_100, filteredList.get(0).getVersion());
 
 144         assertEquals(VERSION_100, filteredList.get(11).getVersion());
 
 146         typeList.get(12).setVersion("2.0.0");
 
 147         filteredList = filter.filter(typeList);
 
 148         assertEquals(19, filteredList.size());
 
 150         typeList.get(12).setVersion(VERSION_100);
 
 151         filteredList = filter.filter(typeList);
 
 152         assertEquals(19, filteredList.size());
 
 153         assertEquals(VERSION_100, filteredList.get(0).getVersion());
 
 154         assertEquals(VERSION_100, filteredList.get(18).getVersion());
 
 158     void testFilterNameVersion() {
 
 159         ToscaEntityFilter<ToscaPolicyType> filter =
 
 160                 ToscaEntityFilter.<ToscaPolicyType>builder().name("onap.policies.Monitoring").build();
 
 161         List<ToscaPolicyType> filteredList = filter.filter(typeList);
 
 162         assertEquals(1, filteredList.size());
 
 164         filter = ToscaEntityFilter.<ToscaPolicyType>builder().name("onap.policies.monitoring.tcagen2").build();
 
 165         filteredList = filter.filter(typeList);
 
 166         assertEquals(1, filteredList.size());
 
 168         filter = ToscaEntityFilter.<ToscaPolicyType>builder().name("onap.policies.optimization.LpaPolicy").build();
 
 169         filteredList = filter.filter(typeList);
 
 170         assertEquals(0, filteredList.size());
 
 172         filter = ToscaEntityFilter.<ToscaPolicyType>builder().version(VERSION_100).build();
 
 173         filteredList = filter.filter(typeList);
 
 174         assertEquals(19, filteredList.size());
 
 176         filter = ToscaEntityFilter.<ToscaPolicyType>builder().name("onap.policies.optimization.Vim_fit")
 
 177                 .version(VERSION_000).build();
 
 178         filteredList = filter.filter(typeList);
 
 179         assertEquals(0, filteredList.size());
 
 181         filter = ToscaEntityFilter.<ToscaPolicyType>builder().name("onap.policies.optimization.Vim_fit")
 
 182                 .version("0.0.1").build();
 
 183         filteredList = filter.filter(typeList);
 
 184         assertEquals(0, filteredList.size());