9b80909561fc9da8561ae45f18df23c2bf34ef28
[policy/pap.git] / main / src / test / java / org / onap / policy / pap / main / rest / TestPolicyStatusProvider.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP
4  * ================================================================================
5  * Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
6  * Modifications Copyright (C) 2021-2022 Bell Canada. All rights reserved.
7  * Modifications Copyright (C) 2021, 2023 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
12  *
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  *
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=========================================================
21  */
22
23 package org.onap.policy.pap.main.rest;
24
25 import static org.assertj.core.api.Assertions.assertThat;
26 import static org.junit.jupiter.api.Assertions.assertFalse;
27 import static org.junit.jupiter.api.Assertions.assertTrue;
28 import static org.mockito.Mockito.when;
29
30 import java.util.ArrayList;
31 import java.util.Collection;
32 import java.util.Comparator;
33 import java.util.Iterator;
34 import java.util.List;
35 import lombok.NonNull;
36 import org.junit.jupiter.api.AfterAll;
37 import org.junit.jupiter.api.BeforeEach;
38 import org.junit.jupiter.api.Test;
39 import org.onap.policy.common.utils.services.Registry;
40 import org.onap.policy.models.pap.concepts.PolicyStatus;
41 import org.onap.policy.models.pdp.concepts.PdpPolicyStatus;
42 import org.onap.policy.models.pdp.concepts.PdpPolicyStatus.PdpPolicyStatusBuilder;
43 import org.onap.policy.models.pdp.concepts.PdpPolicyStatus.State;
44 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
45 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifierOptVersion;
46
47 public class TestPolicyStatusProvider extends ProviderSuper {
48     private static final String MY_GROUP = "MyGroup";
49     private static final String MY_PDP_TYPE = "MySubGroup";
50     private static final @NonNull String VERSION = "1.2.3";
51     private static final String PDP_A = "pdpA";
52     private static final String PDP_B = "pdpB";
53     private static final String PDP_C = "pdpC";
54     private static final ToscaConceptIdentifier POLICY_TYPE = new ToscaConceptIdentifier("MyPolicyType", VERSION);
55     private static final ToscaConceptIdentifier POLICY_A = new ToscaConceptIdentifier("MyPolicyA", VERSION);
56     private static final ToscaConceptIdentifier POLICY_B = new ToscaConceptIdentifier("MyPolicyB", VERSION);
57     private static final ToscaConceptIdentifier POLICY_C = new ToscaConceptIdentifier("MyPolicyC", VERSION);
58
59     private PolicyStatusProvider prov;
60
61     @AfterAll
62     public static void tearDownAfterClass() {
63         Registry.newRegistry();
64     }
65
66     /**
67      * Configures mocks and objects.
68      *
69      * @throws Exception if an error occurs
70      */
71     @Override
72     @BeforeEach
73     public void setUp() throws Exception {
74
75         super.setUp();
76
77         prov = new PolicyStatusProvider(policyStatusService);
78     }
79
80     @Test
81     void testGetStatus_testAccumulate() {
82
83         buildPolicyStatusToReturn1();
84
85         List<PolicyStatus> result = new ArrayList<>(prov.getStatus());
86         result.sort(Comparator.comparing(PolicyStatus::getPolicy));
87
88         assertThat(result).hasSize(3);
89
90         Iterator<PolicyStatus> iter = result.iterator();
91
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();
98
99         status = iter.next();
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);
105
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();
112     }
113
114     @Test
115     void testGetStatusToscaConceptIdentifierOptVersion() {
116
117         ToscaConceptIdentifierOptVersion optIdent = buildPolicyStatusToReturn2();
118
119         List<PolicyStatus> result = new ArrayList<>(prov.getStatus(optIdent));
120         assertThat(result).hasSize(1);
121
122         Iterator<PolicyStatus> iter = result.iterator();
123
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();
130     }
131
132     @Test
133     void testGetPolicyStatus() {
134
135         buildPolicyStatusToReturn1();
136
137         List<PdpPolicyStatus> result = new ArrayList<>(prov.getPolicyStatus());
138         result.sort(Comparator.comparing(PdpPolicyStatus::getPolicy));
139
140         assertThat(result).hasSize(5);
141         Iterator<PdpPolicyStatus> iter = result.iterator();
142
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);
151
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);
157
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);
163
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);
169     }
170
171     @Test
172     void testGetPolicyStatusByGroupAndPolicyIdVersion() {
173
174         ToscaConceptIdentifierOptVersion optIdent = buildPolicyStatusToReturn2();
175
176         List<PdpPolicyStatus> result = new ArrayList<>(prov.getPolicyStatus(MY_GROUP, optIdent));
177         assertThat(result).hasSize(3);
178
179         Iterator<PdpPolicyStatus> iter = result.iterator();
180
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);
189
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);
198     }
199
200     @Test
201     void testGetPolicyStatusByRegexNoMatch() {
202         buildPolicyStatusToReturn1();
203         final String pattern = "Hello";
204
205         final Collection<PolicyStatus> actual = prov.getByRegex(pattern);
206         assertThat(actual).isEmpty();
207     }
208
209     @Test
210     void testGetPolicyStatusOneMatch() {
211         buildPolicyStatusToReturn1();
212         final String pattern = "My(We|Po)[li]{0,3}c.A";
213
214         final Collection<PolicyStatus> actual = prov.getByRegex(pattern);
215         assertThat(actual).hasSize(1);
216
217         final String actualName = actual.iterator().next().getPolicy().getName();
218         assertThat(actualName).isEqualTo("MyPolicyA");
219     }
220
221     @Test
222     void testGetPolicyStatusAllMatch() {
223         buildPolicyStatusToReturn1();
224         final String pattern = "My(We|Po)[li]{0,3}c.{2}0*";
225
226         final Collection<PolicyStatus> actual = prov.getByRegex(pattern);
227
228         assertThat(actual).hasSize(3);
229     }
230
231     private void buildPolicyStatusToReturn1() {
232
233         PdpPolicyStatusBuilder builder = PdpPolicyStatus.builder().pdpGroup(MY_GROUP).pdpType(MY_PDP_TYPE)
234             .policyType(POLICY_TYPE).state(State.WAITING);
235
236         PdpPolicyStatus notDeployed = builder.deploy(false).policy(POLICY_B).pdpId(PDP_A).build();
237
238         // remaining policies are deployed
239         builder.deploy(true);
240
241         // @formatter:off
242         when(policyStatusService.getAllPolicyStatus()).thenReturn(List.of(
243                         builder.policy(POLICY_A).pdpId(PDP_A).build(),
244                         builder.policy(POLICY_A).pdpId(PDP_B).build(),
245                         notDeployed,
246                         builder.policy(POLICY_C).pdpId(PDP_A).build(),
247                         builder.policy(POLICY_B).pdpId(PDP_B).state(State.SUCCESS).build()
248                     ));
249         // @formatter:on
250     }
251
252     private ToscaConceptIdentifierOptVersion buildPolicyStatusToReturn2() {
253         PdpPolicyStatusBuilder builder =
254             PdpPolicyStatus.builder().pdpGroup(MY_GROUP).pdpType(MY_PDP_TYPE).policy(POLICY_A).policyType(POLICY_TYPE);
255
256         PdpPolicyStatus notDeployed = builder.deploy(false).pdpId(PDP_B).state(State.FAILURE).build();
257
258         // remaining policies are deployed
259         builder.deploy(true).state(State.WAITING);
260
261         ToscaConceptIdentifierOptVersion optIdent = new ToscaConceptIdentifierOptVersion(POLICY_A);
262
263         // @formatter:off
264         when(policyStatusService.getAllPolicyStatus(optIdent)).thenReturn(List.of(
265                         builder.policy(POLICY_A).pdpId(PDP_A).build(),
266                         notDeployed,
267                         builder.policy(POLICY_A).pdpId(PDP_C).build()
268                         ));
269         // @formatter:on
270         return optIdent;
271     }
272 }