2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
6 * Modifications Copyright (C) 2021 Bell Canada. All rights reserved.
7 * Modifications Copyright (C) 2021 Nordix Foundation.
8 * ================================================================================
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 * ============LICENSE_END=========================================================
23 package org.onap.policy.pap.main.rest;
25 import static org.assertj.core.api.Assertions.assertThat;
26 import static org.junit.Assert.assertFalse;
27 import static org.junit.Assert.assertTrue;
28 import static org.mockito.Mockito.when;
30 import java.util.ArrayList;
31 import java.util.Collection;
32 import java.util.Collections;
33 import java.util.Iterator;
34 import java.util.List;
35 import lombok.NonNull;
36 import org.junit.AfterClass;
37 import org.junit.Before;
38 import org.junit.Test;
39 import org.onap.policy.common.utils.services.Registry;
40 import org.onap.policy.models.base.PfModelException;
41 import org.onap.policy.models.pap.concepts.PolicyStatus;
42 import org.onap.policy.models.pdp.concepts.PdpPolicyStatus;
43 import org.onap.policy.models.pdp.concepts.PdpPolicyStatus.PdpPolicyStatusBuilder;
44 import org.onap.policy.models.pdp.concepts.PdpPolicyStatus.State;
45 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
46 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifierOptVersion;
48 public class TestPolicyStatusProvider extends ProviderSuper {
49 private static final String MY_GROUP = "MyGroup";
50 private static final String MY_PDP_TYPE = "MySubGroup";
51 private static final @NonNull String VERSION = "1.2.3";
52 private static final String PDP_A = "pdpA";
53 private static final String PDP_B = "pdpB";
54 private static final String PDP_C = "pdpC";
55 private static final ToscaConceptIdentifier POLICY_TYPE = new ToscaConceptIdentifier("MyPolicyType", VERSION);
56 private static final ToscaConceptIdentifier POLICY_A = new ToscaConceptIdentifier("MyPolicyA", VERSION);
57 private static final ToscaConceptIdentifier POLICY_B = new ToscaConceptIdentifier("MyPolicyB", VERSION);
58 private static final ToscaConceptIdentifier POLICY_C = new ToscaConceptIdentifier("MyPolicyC", VERSION);
60 private PolicyStatusProvider prov;
64 public static void tearDownAfterClass() {
65 Registry.newRegistry();
69 * Configures mocks and objects.
71 * @throws Exception if an error occurs
75 public void setUp() throws Exception {
79 prov = new PolicyStatusProvider();
83 public void testGetStatus_testAccumulate() throws PfModelException {
85 buildPolicyStatusToReturn1();
87 List<PolicyStatus> result = new ArrayList<>(prov.getStatus());
88 Collections.sort(result, (rec1, rec2) -> rec1.getPolicy().compareTo(rec2.getPolicy()));
90 assertThat(result).hasSize(3);
92 Iterator<PolicyStatus> iter = result.iterator();
94 PolicyStatus status = iter.next();
95 assertThat(status.getPolicy()).isEqualTo(POLICY_A);
96 assertThat(status.getPolicyType()).isEqualTo(POLICY_TYPE);
97 assertThat(status.getIncompleteCount()).isEqualTo(2);
98 assertThat(status.getFailureCount()).isZero();
99 assertThat(status.getSuccessCount()).isZero();
101 status = iter.next();
102 assertThat(status.getPolicy()).isEqualTo(POLICY_B);
103 assertThat(status.getPolicyType()).isEqualTo(POLICY_TYPE);
104 assertThat(status.getIncompleteCount()).isZero();
105 assertThat(status.getFailureCount()).isZero();
106 assertThat(status.getSuccessCount()).isEqualTo(1);
108 status = iter.next();
109 assertThat(status.getPolicy()).isEqualTo(POLICY_C);
110 assertThat(status.getPolicyType()).isEqualTo(POLICY_TYPE);
111 assertThat(status.getIncompleteCount()).isEqualTo(1);
112 assertThat(status.getFailureCount()).isZero();
113 assertThat(status.getSuccessCount()).isZero();
117 public void testGetStatusToscaConceptIdentifierOptVersion() throws PfModelException {
119 ToscaConceptIdentifierOptVersion optIdent = buildPolicyStatusToReturn2();
121 List<PolicyStatus> result = new ArrayList<>(prov.getStatus(optIdent));
122 assertThat(result).hasSize(1);
124 Iterator<PolicyStatus> iter = result.iterator();
126 PolicyStatus status = iter.next();
127 assertThat(status.getPolicy()).isEqualTo(POLICY_A);
128 assertThat(status.getPolicyType()).isEqualTo(POLICY_TYPE);
129 assertThat(status.getIncompleteCount()).isEqualTo(2);
130 assertThat(status.getFailureCount()).isZero();
131 assertThat(status.getSuccessCount()).isZero();
135 public void testGetPolicyStatus() throws PfModelException {
137 buildPolicyStatusToReturn1();
139 List<PdpPolicyStatus> result = new ArrayList<>(prov.getPolicyStatus());
140 Collections.sort(result, (rec1, rec2) -> rec1.getPolicy().compareTo(rec2.getPolicy()));
142 assertThat(result).hasSize(5);
143 Iterator<PdpPolicyStatus> iter = result.iterator();
145 PdpPolicyStatus status = iter.next();
146 assertThat(status.getPolicy()).isEqualTo(POLICY_A);
147 assertThat(status.getPolicyType()).isEqualTo(POLICY_TYPE);
148 assertThat(status.getPdpId()).isEqualTo(PDP_A);
149 assertThat(status.getPdpType()).isEqualTo(MY_PDP_TYPE);
150 assertThat(status.getPdpGroup()).isEqualTo(MY_GROUP);
151 assertTrue(status.isDeploy());
152 assertThat(status.getState()).isEqualTo(State.WAITING);
154 status = iter.next();
155 assertThat(status.getPolicy()).isEqualTo(POLICY_A);
156 assertThat(status.getPdpId()).isEqualTo(PDP_B);
157 assertTrue(status.isDeploy());
158 assertThat(status.getState()).isEqualTo(State.WAITING);
160 status = iter.next();
161 assertThat(status.getPolicy()).isEqualTo(POLICY_B);
162 assertThat(status.getPdpId()).isEqualTo(PDP_A);
163 assertFalse(status.isDeploy());
164 assertThat(status.getState()).isEqualTo(State.WAITING);
166 status = iter.next();
167 assertThat(status.getPolicy()).isEqualTo(POLICY_B);
168 assertThat(status.getPdpId()).isEqualTo(PDP_B);
169 assertTrue(status.isDeploy());
170 assertThat(status.getState()).isEqualTo(State.SUCCESS);
174 public void testGetPolicyStatusByGroupAndPolicyIdVersion() throws PfModelException {
176 ToscaConceptIdentifierOptVersion optIdent = buildPolicyStatusToReturn2();
178 List<PdpPolicyStatus> result = new ArrayList<>(prov.getPolicyStatus(MY_GROUP, optIdent));
179 assertThat(result).hasSize(3);
181 Iterator<PdpPolicyStatus> iter = result.iterator();
183 PdpPolicyStatus status = iter.next();
184 assertThat(status.getPolicy()).isEqualTo(POLICY_A);
185 assertThat(status.getPolicyType()).isEqualTo(POLICY_TYPE);
186 assertThat(status.getPdpId()).isEqualTo(PDP_A);
187 assertThat(status.getPdpType()).isEqualTo(MY_PDP_TYPE);
188 assertThat(status.getPdpGroup()).isEqualTo(MY_GROUP);
189 assertTrue(status.isDeploy());
190 assertThat(status.getState()).isEqualTo(State.WAITING);
192 status = iter.next();
193 assertThat(status.getPolicy()).isEqualTo(POLICY_A);
194 assertThat(status.getPolicyType()).isEqualTo(POLICY_TYPE);
195 assertThat(status.getPdpId()).isEqualTo(PDP_B);
196 assertThat(status.getPdpType()).isEqualTo(MY_PDP_TYPE);
197 assertThat(status.getPdpGroup()).isEqualTo(MY_GROUP);
198 assertFalse(status.isDeploy());
199 assertThat(status.getState()).isEqualTo(State.FAILURE);
203 public void testGetPolicyStatusByRegexNoMatch() throws PfModelException {
204 buildPolicyStatusToReturn1();
205 final String pattern = "Hello";
207 final Collection<PolicyStatus> actual = prov.getByRegex(pattern);
208 assertThat(actual).isEmpty();
212 public void testGetPolicyStatusOneMatch() throws PfModelException {
213 buildPolicyStatusToReturn1();
214 final String pattern = "My(We|Po)[li]{0,3}c.A";
216 final Collection<PolicyStatus> actual = prov.getByRegex(pattern);
217 assertThat(actual).hasSize(1);
219 final String actualName = actual.iterator().next().getPolicy().getName();
220 assertThat(actualName).isEqualTo("MyPolicyA");
224 public void testGetPolicyStatusAllMatch() throws PfModelException {
225 buildPolicyStatusToReturn1();
226 final String pattern = "My(We|Po)[li]{0,3}c.{2}0*";
228 final Collection<PolicyStatus> actual = prov.getByRegex(pattern);
230 assertThat(actual).hasSize(3);
233 private void buildPolicyStatusToReturn1() throws PfModelException {
235 PdpPolicyStatusBuilder builder = PdpPolicyStatus.builder().pdpGroup(MY_GROUP).pdpType(MY_PDP_TYPE)
236 .policyType(POLICY_TYPE).state(State.WAITING);
238 PdpPolicyStatus notDeployed = builder.deploy(false).policy(POLICY_B).pdpId(PDP_A).build();
240 // remaining policies are deployed
241 builder.deploy(true);
244 when(dao.getAllPolicyStatus()).thenReturn(List.of(
245 builder.policy(POLICY_A).pdpId(PDP_A).build(),
246 builder.policy(POLICY_A).pdpId(PDP_B).build(),
248 builder.policy(POLICY_C).pdpId(PDP_A).build(),
249 builder.policy(POLICY_B).pdpId(PDP_B).state(State.SUCCESS).build()
254 private ToscaConceptIdentifierOptVersion buildPolicyStatusToReturn2() throws PfModelException {
255 PdpPolicyStatusBuilder builder =
256 PdpPolicyStatus.builder().pdpGroup(MY_GROUP).pdpType(MY_PDP_TYPE).policy(POLICY_A).policyType(POLICY_TYPE);
258 PdpPolicyStatus notDeployed = builder.deploy(false).pdpId(PDP_B).state(State.FAILURE).build();
260 // remaining policies are deployed
261 builder.deploy(true).state(State.WAITING);
263 ToscaConceptIdentifierOptVersion optIdent = new ToscaConceptIdentifierOptVersion(POLICY_A);
266 when(dao.getAllPolicyStatus(optIdent)).thenReturn(List.of(
267 builder.policy(POLICY_A).pdpId(PDP_A).build(),
269 builder.policy(POLICY_A).pdpId(PDP_C).build()