/*-
* ============LICENSE_START=======================================================
- * Copyright (C) 2019 Nordix Foundation.
+ * Copyright (C) 2019-2021 Nordix Foundation.
+ * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import java.util.ArrayList;
import java.util.List;
-
+import java.util.stream.Collectors;
import org.junit.Before;
import org.junit.Test;
import org.onap.policy.common.utils.coder.CoderException;
import org.onap.policy.common.utils.coder.StandardCoder;
import org.onap.policy.common.utils.resources.ResourceUtils;
+import org.onap.policy.models.pdp.enums.PdpState;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
/**
* Test of the {@link PdpGroupFilter} class.
* @author Liam Fallon (liam.fallon@est.tech)
*/
public class PdpGroupFilterTest {
+ private static final String POLICY_TYPE3 = "policy.type.3";
+ private static final String POLICY_TYPE2 = "policy.type.2";
+ private static final String POLICY_TYPE1 = "policy.type.1";
+ private static final String POLICY_TYPE0 = "policy.type.0";
+ private static final String POLICY3 = "Policy3";
+ private static final String POLICY2 = "Policy2";
+ private static final String POLICY1 = "Policy1";
+ private static final String POLICY0 = "Policy0";
+ private static final String NON_EXISTANT = "Nonexistant";
+ private static final String VERSION9 = "9.9.9";
+ private static final String VERSION7 = "7.8.9";
+ private static final String VERSION4 = "4.5.6";
+ private static final String VERSION1 = "1.2.3";
+ private static final String VERSION0 = "0.1.2";
private List<PdpGroup> pdpGroupList;
/**
assertThatThrownBy(() -> {
filter.filter(null);
- }).hasMessage("originalList is marked @NonNull but is null");
+ }).hasMessageMatching("originalList is marked .*ull but is null");
}
@Test
}
@Test
- public void testFilterLatestVersion() {
- PdpGroupFilter filter = PdpGroupFilter.builder().version(PdpGroupFilter.LATEST_VERSION).build();
+ public void testFilterName() {
+ PdpGroupFilter filter = PdpGroupFilter.builder().name("PdpGroup0").build();
+ List<PdpGroup> filteredList = filter.filter(pdpGroupList);
+ assertEquals(1, filteredList.size());
+
+ filter = PdpGroupFilter.builder().name("PdpGroup1").build();
+ filteredList = filter.filter(pdpGroupList);
+ assertEquals(1, filteredList.size());
+
+ filter = PdpGroupFilter.builder().name("PdpGroup20").build();
+ filteredList = filter.filter(pdpGroupList);
+ assertEquals(1, filteredList.size());
+
+ filter = PdpGroupFilter.builder().build();
+ filteredList = filter.filter(pdpGroupList);
+ assertEquals(5, filteredList.size());
+
+ filter = PdpGroupFilter.builder().name("PdpGroup0").build();
+ filteredList = filter.filter(pdpGroupList);
+ assertEquals(1, filteredList.size());
+
+ filter = PdpGroupFilter.builder().name("PdpGroup19").build();
+ filteredList = filter.filter(pdpGroupList);
+ assertEquals(0, filteredList.size());
+ }
+
+ @Test
+ public void testFilterPdpGroupState() {
+ PdpGroupFilter filter = PdpGroupFilter.builder().groupState(PdpState.ACTIVE).build();
+ List<PdpGroup> filteredList = filter.filter(pdpGroupList);
+ assertEquals(1, filteredList.size());
+
+ filter = PdpGroupFilter.builder().groupState(PdpState.PASSIVE).build();
+ filteredList = filter.filter(pdpGroupList);
+ assertEquals(2, filteredList.size());
+
+ filter = PdpGroupFilter.builder().groupState(PdpState.TEST).build();
+ filteredList = filter.filter(pdpGroupList);
+ assertEquals(1, filteredList.size());
+ filter = PdpGroupFilter.builder().groupState(PdpState.SAFE).build();
+ filteredList = filter.filter(pdpGroupList);
+ assertEquals(1, filteredList.size());
+
+ filter = PdpGroupFilter.builder().groupState(PdpState.TERMINATED).build();
+ filteredList = filter.filter(pdpGroupList);
+ assertEquals(0, filteredList.size());
+ }
+
+ @Test
+ public void testFilterPdpType() {
+ PdpGroupFilter filter = PdpGroupFilter.builder().pdpType("APEX").build();
List<PdpGroup> filteredList = filter.filter(pdpGroupList);
+ assertEquals(5, filteredList.size());
+
+ filter = PdpGroupFilter.builder().pdpType("DROOLS").build();
+ filteredList = filter.filter(pdpGroupList);
assertEquals(2, filteredList.size());
- assertEquals("1.2.4", filteredList.get(0).getVersion());
- assertEquals("1.2.3", filteredList.get(1).getVersion());
+
+ filter = PdpGroupFilter.builder().pdpType("XACML").build();
+ filteredList = filter.filter(pdpGroupList);
+ assertEquals(1, filteredList.size());
}
@Test
- public void testFilterNameVersion() {
- PdpGroupFilter filter = PdpGroupFilter.builder().name("PdpGroup0").build();
+ public void testFilterPdpState() {
+ PdpGroupFilter filter = PdpGroupFilter.builder().pdpState(PdpState.ACTIVE).build();
List<PdpGroup> filteredList = filter.filter(pdpGroupList);
assertEquals(3, filteredList.size());
- filter = PdpGroupFilter.builder().name("PdpGroup1").build();
+ filter = PdpGroupFilter.builder().pdpState(PdpState.PASSIVE).build();
+ filteredList = filter.filter(pdpGroupList);
+ assertEquals(3, filteredList.size());
+
+ filter = PdpGroupFilter.builder().pdpState(PdpState.SAFE).build();
filteredList = filter.filter(pdpGroupList);
assertEquals(2, filteredList.size());
- filter = PdpGroupFilter.builder().name("PdpGroup2").build();
+ filter = PdpGroupFilter.builder().pdpState(PdpState.TEST).build();
filteredList = filter.filter(pdpGroupList);
+ assertEquals(2, filteredList.size());
+ }
+
+ @Test
+ public void testFilterPolicyType() {
+ List<ToscaConceptIdentifier> identifierList = new ArrayList<>();
+
+ identifierList.add(new ToscaConceptIdentifier(NON_EXISTANT, VERSION1));
+ PdpGroupFilter filter =
+ PdpGroupFilter.builder().policyTypeList(identifierList).build();
+ List<PdpGroup> filteredList = filter.filter(pdpGroupList);
+ assertEquals(0, filteredList.size());
+ identifierList.clear();
+
+ // don't match wild cards
+ identifierList.add(new ToscaConceptIdentifier(NON_EXISTANT, VERSION1));
+ filter = PdpGroupFilter.builder().policyTypeList(identifierList).build();
+ final List<PdpGroup> wildCards =
+ pdpGroupList.stream().map(this::makeWildCardPolicyTypes).collect(Collectors.toList());
+ filteredList = filter.filter(wildCards);
assertEquals(0, filteredList.size());
+ identifierList.clear();
+
+ // match wild cards
+ identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE0, VERSION1));
+ filter = PdpGroupFilter.builder().policyTypeList(identifierList).build();
+ filteredList = filter.filter(wildCards);
+ assertEquals(4, filteredList.size());
+ identifierList.clear();
- filter = PdpGroupFilter.builder().version("1.2.3").build();
+ identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE0, VERSION1));
+ filter = PdpGroupFilter.builder().policyTypeList(identifierList).build();
+ filteredList = filter.filter(pdpGroupList);
+ assertEquals(4, filteredList.size());
+ identifierList.clear();
+
+ identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE1, VERSION4));
+ filter = PdpGroupFilter.builder().policyTypeList(identifierList).build();
+ filteredList = filter.filter(pdpGroupList);
+ assertEquals(4, filteredList.size());
+ identifierList.clear();
+
+ identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE2, VERSION7));
+ filter = PdpGroupFilter.builder().policyTypeList(identifierList).build();
+ filteredList = filter.filter(pdpGroupList);
+ assertEquals(2, filteredList.size());
+ identifierList.clear();
+
+ identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE3, VERSION0));
+ filter = PdpGroupFilter.builder().policyTypeList(identifierList).build();
filteredList = filter.filter(pdpGroupList);
assertEquals(2, filteredList.size());
+ identifierList.clear();
+
+ identifierList.add(new ToscaConceptIdentifier(NON_EXISTANT, VERSION1));
+ identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE0, VERSION9));
+ identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE0, VERSION1));
+ identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE1, VERSION4));
+ identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE2, VERSION7));
+ identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE3, VERSION0));
+ filter = PdpGroupFilter.builder().policyTypeList(identifierList).build();
+ filteredList = filter.filter(pdpGroupList);
+ assertEquals(5, filteredList.size());
+
+ filter = PdpGroupFilter.builder().policyTypeList(identifierList).matchPolicyTypesExactly(true).build();
+ filteredList = filter.filter(pdpGroupList);
+ assertEquals(0, filteredList.size());
+
+ identifierList.clear();
+ identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE0, VERSION1));
+ filter = PdpGroupFilter.builder().policyTypeList(identifierList).matchPolicyTypesExactly(true).build();
+ filteredList = filter.filter(pdpGroupList);
+ assertEquals(2, filteredList.size());
+
+ identifierList.clear();
+ identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE0, VERSION1));
+ identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE1, VERSION4));
+ identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE2, VERSION7));
+ filter = PdpGroupFilter.builder().policyTypeList(identifierList).matchPolicyTypesExactly(true).build();
+ filteredList = filter.filter(pdpGroupList);
+ assertEquals(1, filteredList.size());
- filter = PdpGroupFilter.builder().name("PdpGroup0").version("1.2.3").build();
+ identifierList.clear();
+ identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE0, VERSION1));
+ identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE1, VERSION4));
+ identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE3, VERSION0));
+ filter = PdpGroupFilter.builder().policyTypeList(identifierList).matchPolicyTypesExactly(true).build();
filteredList = filter.filter(pdpGroupList);
assertEquals(1, filteredList.size());
- filter = PdpGroupFilter.builder().name("PdpGroup1").version("1.2.9").build();
+ identifierList.clear();
+ identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE1, VERSION4));
+ identifierList.add(new ToscaConceptIdentifier(POLICY_TYPE3, VERSION0));
+ filter = PdpGroupFilter.builder().policyTypeList(identifierList).matchPolicyTypesExactly(true).build();
filteredList = filter.filter(pdpGroupList);
+ assertEquals(1, filteredList.size());
+ }
+
+ /**
+ * Makes a clone of a PdpGroup, changing all occurrences of supported policy type,
+ * "policy.type.0", to a wild card type, "policy.type.*".
+ *
+ * @param group group to be cloned
+ * @return a new PdpGroup containing wild card policy types
+ */
+ private PdpGroup makeWildCardPolicyTypes(PdpGroup group) {
+ PdpGroup newGroup = new PdpGroup(group);
+
+ for (PdpSubGroup subgroup : newGroup.getPdpSubgroups()) {
+ for (ToscaConceptIdentifier subType : subgroup.getSupportedPolicyTypes()) {
+ if (POLICY_TYPE0.equals(subType.getName())) {
+ subType.setName("policy.type.*");
+ }
+ }
+ }
+
+ return newGroup;
+ }
+
+ @Test
+ public void testFilterPolicy() {
+ List<ToscaConceptIdentifier> identifierList = new ArrayList<>();
+
+ identifierList.add(new ToscaConceptIdentifier(NON_EXISTANT, VERSION1));
+ PdpGroupFilter filter =
+ PdpGroupFilter.builder().policyList(identifierList).build();
+ List<PdpGroup> filteredList = filter.filter(pdpGroupList);
assertEquals(0, filteredList.size());
+ identifierList.clear();
+
+ identifierList.add(new ToscaConceptIdentifier(POLICY0, VERSION9));
+ filter = PdpGroupFilter.builder().policyList(identifierList).build();
+ filteredList = filter.filter(pdpGroupList);
+ assertEquals(0, filteredList.size());
+ identifierList.clear();
+
+ identifierList.add(new ToscaConceptIdentifier(POLICY0, VERSION4));
+ filter = PdpGroupFilter.builder().policyList(identifierList).build();
+ filteredList = filter.filter(pdpGroupList);
+ assertEquals(4, filteredList.size());
+ identifierList.clear();
+
+ identifierList.add(new ToscaConceptIdentifier(POLICY1, VERSION4));
+ filter = PdpGroupFilter.builder().policyList(identifierList).build();
+ filteredList = filter.filter(pdpGroupList);
+ assertEquals(1, filteredList.size());
+ identifierList.clear();
+
+ identifierList.add(new ToscaConceptIdentifier(POLICY2, VERSION4));
+ filter = PdpGroupFilter.builder().policyList(identifierList).build();
+ filteredList = filter.filter(pdpGroupList);
+ assertEquals(2, filteredList.size());
+ identifierList.clear();
+
+ identifierList.add(new ToscaConceptIdentifier(POLICY3, VERSION1));
+ filter = PdpGroupFilter.builder().policyList(identifierList).build();
+ filteredList = filter.filter(pdpGroupList);
+ assertEquals(1, filteredList.size());
+ identifierList.clear();
+
+ identifierList.add(new ToscaConceptIdentifier(NON_EXISTANT, VERSION1));
+ identifierList.add(new ToscaConceptIdentifier(POLICY0, VERSION9));
+ identifierList.add(new ToscaConceptIdentifier(POLICY0, VERSION4));
+ identifierList.add(new ToscaConceptIdentifier(POLICY1, VERSION4));
+ identifierList.add(new ToscaConceptIdentifier(POLICY2, VERSION4));
+ identifierList.add(new ToscaConceptIdentifier(POLICY3, VERSION1));
+ filter = PdpGroupFilter.builder().policyList(identifierList).build();
+ filteredList = filter.filter(pdpGroupList);
+ assertEquals(5, filteredList.size());
+
+ filter = PdpGroupFilter.builder().policyList(identifierList).matchPoliciesExactly(true).build();
+ filteredList = filter.filter(pdpGroupList);
+ assertEquals(0, filteredList.size());
+
+ identifierList.clear();
+ identifierList.add(new ToscaConceptIdentifier(POLICY0, VERSION4));
+ filter = PdpGroupFilter.builder().policyList(identifierList).matchPoliciesExactly(true).build();
+ filteredList = filter.filter(pdpGroupList);
+ assertEquals(3, filteredList.size());
+
+ identifierList.clear();
+ identifierList.add(new ToscaConceptIdentifier(POLICY0, VERSION4));
+ identifierList.add(new ToscaConceptIdentifier(POLICY1, VERSION4));
+ filter = PdpGroupFilter.builder().policyList(identifierList).matchPoliciesExactly(true).build();
+ filteredList = filter.filter(pdpGroupList);
+ assertEquals(1, filteredList.size());
+
+ identifierList.clear();
+ identifierList.add(new ToscaConceptIdentifier(POLICY2, VERSION4));
+ filter = PdpGroupFilter.builder().policyList(identifierList).matchPoliciesExactly(true).build();
+ filteredList = filter.filter(pdpGroupList);
+ assertEquals(1, filteredList.size());
+
+ identifierList.clear();
+ identifierList.add(new ToscaConceptIdentifier(POLICY2, VERSION4));
+ identifierList.add(new ToscaConceptIdentifier(POLICY3, VERSION1));
+ filter = PdpGroupFilter.builder().policyList(identifierList).matchPoliciesExactly(true).build();
+ filteredList = filter.filter(pdpGroupList);
+ assertEquals(1, filteredList.size());
}
}