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 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
22 package org.onap.policy.pap.main.rest;
24 import static org.assertj.core.api.Assertions.assertThat;
25 import static org.junit.Assert.assertFalse;
26 import static org.junit.Assert.assertTrue;
27 import static org.mockito.Mockito.when;
29 import java.util.ArrayList;
30 import java.util.Collections;
31 import java.util.Iterator;
32 import java.util.List;
33 import lombok.NonNull;
34 import org.junit.AfterClass;
35 import org.junit.Before;
36 import org.junit.Test;
37 import org.onap.policy.common.utils.services.Registry;
38 import org.onap.policy.models.base.PfModelException;
39 import org.onap.policy.models.pap.concepts.PolicyStatus;
40 import org.onap.policy.models.pdp.concepts.PdpPolicyStatus;
41 import org.onap.policy.models.pdp.concepts.PdpPolicyStatus.PdpPolicyStatusBuilder;
42 import org.onap.policy.models.pdp.concepts.PdpPolicyStatus.State;
43 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
44 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifierOptVersion;
46 public class TestPolicyStatusProvider extends ProviderSuper {
47 private static final String MY_GROUP = "MyGroup";
48 private static final String MY_PDP_TYPE = "MySubGroup";
49 private static final @NonNull String VERSION = "1.2.3";
50 private static final String PDP_A = "pdpA";
51 private static final String PDP_B = "pdpB";
52 private static final String PDP_C = "pdpC";
53 private static final ToscaConceptIdentifier POLICY_TYPE = new ToscaConceptIdentifier("MyPolicyType", VERSION);
54 private static final ToscaConceptIdentifier POLICY_A = new ToscaConceptIdentifier("MyPolicyA", VERSION);
55 private static final ToscaConceptIdentifier POLICY_B = new ToscaConceptIdentifier("MyPolicyB", VERSION);
56 private static final ToscaConceptIdentifier POLICY_C = new ToscaConceptIdentifier("MyPolicyC", VERSION);
58 private PolicyStatusProvider prov;
62 public static void tearDownAfterClass() {
63 Registry.newRegistry();
67 * Configures mocks and objects.
69 * @throws Exception if an error occurs
73 public void setUp() throws Exception {
77 prov = new PolicyStatusProvider();
81 public void testGetStatus_testAccumulate() throws PfModelException {
83 buildPolicyStatusToReturn1();
85 List<PolicyStatus> result = new ArrayList<>(prov.getStatus());
86 Collections.sort(result, (rec1, rec2) -> rec1.getPolicy().compareTo(rec2.getPolicy()));
88 assertThat(result).hasSize(3);
90 Iterator<PolicyStatus> iter = result.iterator();
92 PolicyStatus status = iter.next();
93 assertThat(status.getPolicy()).isEqualTo(POLICY_A);
94 assertThat(status.getPolicyType()).isEqualTo(POLICY_TYPE);
95 assertThat(status.getIncompleteCount()).isEqualTo(2);
96 assertThat(status.getFailureCount()).isZero();
97 assertThat(status.getSuccessCount()).isZero();
100 assertThat(status.getPolicy()).isEqualTo(POLICY_B);
101 assertThat(status.getPolicyType()).isEqualTo(POLICY_TYPE);
102 assertThat(status.getIncompleteCount()).isZero();
103 assertThat(status.getFailureCount()).isZero();
104 assertThat(status.getSuccessCount()).isEqualTo(1);
106 status = iter.next();
107 assertThat(status.getPolicy()).isEqualTo(POLICY_C);
108 assertThat(status.getPolicyType()).isEqualTo(POLICY_TYPE);
109 assertThat(status.getIncompleteCount()).isEqualTo(1);
110 assertThat(status.getFailureCount()).isZero();
111 assertThat(status.getSuccessCount()).isZero();
115 public void testGetStatusToscaConceptIdentifierOptVersion() throws PfModelException {
117 ToscaConceptIdentifierOptVersion optIdent = buildPolicyStatusToReturn2();
119 List<PolicyStatus> result = new ArrayList<>(prov.getStatus(optIdent));
120 assertThat(result).hasSize(1);
122 Iterator<PolicyStatus> iter = result.iterator();
124 PolicyStatus status = iter.next();
125 assertThat(status.getPolicy()).isEqualTo(POLICY_A);
126 assertThat(status.getPolicyType()).isEqualTo(POLICY_TYPE);
127 assertThat(status.getIncompleteCount()).isEqualTo(2);
128 assertThat(status.getFailureCount()).isZero();
129 assertThat(status.getSuccessCount()).isZero();
133 public void testGetPolicyStatus() throws PfModelException {
135 buildPolicyStatusToReturn1();
137 List<PdpPolicyStatus> result = new ArrayList<>(prov.getPolicyStatus());
138 Collections.sort(result, (rec1, rec2) -> rec1.getPolicy().compareTo(rec2.getPolicy()));
140 assertThat(result).hasSize(5);
141 Iterator<PdpPolicyStatus> iter = result.iterator();
143 PdpPolicyStatus status = iter.next();
144 assertThat(status.getPolicy()).isEqualTo(POLICY_A);
145 assertThat(status.getPolicyType()).isEqualTo(POLICY_TYPE);
146 assertThat(status.getPdpId()).isEqualTo(PDP_A);
147 assertThat(status.getPdpType()).isEqualTo(MY_PDP_TYPE);
148 assertThat(status.getPdpGroup()).isEqualTo(MY_GROUP);
149 assertTrue(status.isDeploy());
150 assertThat(status.getState()).isEqualTo(State.WAITING);
152 status = iter.next();
153 assertThat(status.getPolicy()).isEqualTo(POLICY_A);
154 assertThat(status.getPdpId()).isEqualTo(PDP_B);
155 assertTrue(status.isDeploy());
156 assertThat(status.getState()).isEqualTo(State.WAITING);
158 status = iter.next();
159 assertThat(status.getPolicy()).isEqualTo(POLICY_B);
160 assertThat(status.getPdpId()).isEqualTo(PDP_A);
161 assertFalse(status.isDeploy());
162 assertThat(status.getState()).isEqualTo(State.WAITING);
164 status = iter.next();
165 assertThat(status.getPolicy()).isEqualTo(POLICY_B);
166 assertThat(status.getPdpId()).isEqualTo(PDP_B);
167 assertTrue(status.isDeploy());
168 assertThat(status.getState()).isEqualTo(State.SUCCESS);
172 public void testGetPolicyStatusByGroupAndPolicyIdVersion() throws PfModelException {
174 ToscaConceptIdentifierOptVersion optIdent = buildPolicyStatusToReturn2();
176 List<PdpPolicyStatus> result = new ArrayList<>(prov.getPolicyStatus(MY_GROUP, optIdent));
177 assertThat(result).hasSize(3);
179 Iterator<PdpPolicyStatus> iter = result.iterator();
181 PdpPolicyStatus status = iter.next();
182 assertThat(status.getPolicy()).isEqualTo(POLICY_A);
183 assertThat(status.getPolicyType()).isEqualTo(POLICY_TYPE);
184 assertThat(status.getPdpId()).isEqualTo(PDP_A);
185 assertThat(status.getPdpType()).isEqualTo(MY_PDP_TYPE);
186 assertThat(status.getPdpGroup()).isEqualTo(MY_GROUP);
187 assertTrue(status.isDeploy());
188 assertThat(status.getState()).isEqualTo(State.WAITING);
190 status = iter.next();
191 assertThat(status.getPolicy()).isEqualTo(POLICY_A);
192 assertThat(status.getPolicyType()).isEqualTo(POLICY_TYPE);
193 assertThat(status.getPdpId()).isEqualTo(PDP_B);
194 assertThat(status.getPdpType()).isEqualTo(MY_PDP_TYPE);
195 assertThat(status.getPdpGroup()).isEqualTo(MY_GROUP);
196 assertFalse(status.isDeploy());
197 assertThat(status.getState()).isEqualTo(State.FAILURE);
200 private void buildPolicyStatusToReturn1() throws PfModelException {
202 PdpPolicyStatusBuilder builder = PdpPolicyStatus.builder().pdpGroup(MY_GROUP).pdpType(MY_PDP_TYPE)
203 .policyType(POLICY_TYPE).state(State.WAITING);
205 PdpPolicyStatus notDeployed = builder.deploy(false).policy(POLICY_B).pdpId(PDP_A).build();
207 // remaining policies are deployed
208 builder.deploy(true);
211 when(dao.getAllPolicyStatus()).thenReturn(List.of(
212 builder.policy(POLICY_A).pdpId(PDP_A).build(),
213 builder.policy(POLICY_A).pdpId(PDP_B).build(),
215 builder.policy(POLICY_C).pdpId(PDP_A).build(),
216 builder.policy(POLICY_B).pdpId(PDP_B).state(State.SUCCESS).build()
221 private ToscaConceptIdentifierOptVersion buildPolicyStatusToReturn2() throws PfModelException {
222 PdpPolicyStatusBuilder builder =
223 PdpPolicyStatus.builder().pdpGroup(MY_GROUP).pdpType(MY_PDP_TYPE).policy(POLICY_A).policyType(POLICY_TYPE);
225 PdpPolicyStatus notDeployed = builder.deploy(false).pdpId(PDP_B).state(State.FAILURE).build();
227 // remaining policies are deployed
228 builder.deploy(true).state(State.WAITING);
230 ToscaConceptIdentifierOptVersion optIdent = new ToscaConceptIdentifierOptVersion(POLICY_A);
233 when(dao.getAllPolicyStatus(optIdent)).thenReturn(List.of(
234 builder.policy(POLICY_A).pdpId(PDP_A).build(),
236 builder.policy(POLICY_A).pdpId(PDP_C).build()