Merge "Query deployed policies by regex"
[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 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
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.Assert.assertFalse;
27 import static org.junit.Assert.assertTrue;
28 import static org.mockito.Mockito.when;
29
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;
47
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);
59
60     private PolicyStatusProvider prov;
61
62
63     @AfterClass
64     public static void tearDownAfterClass() {
65         Registry.newRegistry();
66     }
67
68     /**
69      * Configures mocks and objects.
70      *
71      * @throws Exception if an error occurs
72      */
73     @Override
74     @Before
75     public void setUp() throws Exception {
76
77         super.setUp();
78
79         prov = new PolicyStatusProvider();
80     }
81
82     @Test
83     public void testGetStatus_testAccumulate() throws PfModelException {
84
85         buildPolicyStatusToReturn1();
86
87         List<PolicyStatus> result = new ArrayList<>(prov.getStatus());
88         Collections.sort(result, (rec1, rec2) -> rec1.getPolicy().compareTo(rec2.getPolicy()));
89
90         assertThat(result).hasSize(3);
91
92         Iterator<PolicyStatus> iter = result.iterator();
93
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();
100
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);
107
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();
114     }
115
116     @Test
117     public void testGetStatusToscaConceptIdentifierOptVersion() throws PfModelException {
118
119         ToscaConceptIdentifierOptVersion optIdent = buildPolicyStatusToReturn2();
120
121         List<PolicyStatus> result = new ArrayList<>(prov.getStatus(optIdent));
122         assertThat(result).hasSize(1);
123
124         Iterator<PolicyStatus> iter = result.iterator();
125
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();
132     }
133
134     @Test
135     public void testGetPolicyStatus() throws PfModelException {
136
137         buildPolicyStatusToReturn1();
138
139         List<PdpPolicyStatus> result = new ArrayList<>(prov.getPolicyStatus());
140         Collections.sort(result, (rec1, rec2) -> rec1.getPolicy().compareTo(rec2.getPolicy()));
141
142         assertThat(result).hasSize(5);
143         Iterator<PdpPolicyStatus> iter = result.iterator();
144
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);
153
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);
159
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);
165
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);
171     }
172
173     @Test
174     public void testGetPolicyStatusByGroupAndPolicyIdVersion() throws PfModelException {
175
176         ToscaConceptIdentifierOptVersion optIdent = buildPolicyStatusToReturn2();
177
178         List<PdpPolicyStatus> result = new ArrayList<>(prov.getPolicyStatus(MY_GROUP, optIdent));
179         assertThat(result).hasSize(3);
180
181         Iterator<PdpPolicyStatus> iter = result.iterator();
182
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);
191
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);
200     }
201
202     @Test
203     public void testGetPolicyStatusByRegexNoMatch() throws PfModelException {
204         buildPolicyStatusToReturn1();
205         final String pattern = "Hello";
206
207         final Collection<PolicyStatus> actual = prov.getByRegex(pattern);
208         assertThat(actual).isEmpty();
209     }
210
211     @Test
212     public void testGetPolicyStatusOneMatch() throws PfModelException {
213         buildPolicyStatusToReturn1();
214         final String pattern = "My(We|Po)[li]{0,3}c.A";
215
216         final Collection<PolicyStatus> actual = prov.getByRegex(pattern);
217         assertThat(actual).hasSize(1);
218
219         final String actualName = actual.iterator().next().getPolicy().getName();
220         assertThat(actualName).isEqualTo("MyPolicyA");
221     }
222
223     @Test
224     public void testGetPolicyStatusAllMatch() throws PfModelException {
225         buildPolicyStatusToReturn1();
226         final String pattern = "My(We|Po)[li]{0,3}c.{2}0*";
227
228         final Collection<PolicyStatus> actual = prov.getByRegex(pattern);
229
230         assertThat(actual).hasSize(3);
231     }
232
233     private void buildPolicyStatusToReturn1() throws PfModelException {
234
235         PdpPolicyStatusBuilder builder = PdpPolicyStatus.builder().pdpGroup(MY_GROUP).pdpType(MY_PDP_TYPE)
236             .policyType(POLICY_TYPE).state(State.WAITING);
237
238         PdpPolicyStatus notDeployed = builder.deploy(false).policy(POLICY_B).pdpId(PDP_A).build();
239
240         // remaining policies are deployed
241         builder.deploy(true);
242
243         // @formatter:off
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(),
247                         notDeployed,
248                         builder.policy(POLICY_C).pdpId(PDP_A).build(),
249                         builder.policy(POLICY_B).pdpId(PDP_B).state(State.SUCCESS).build()
250                     ));
251         // @formatter:on
252     }
253
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);
257
258         PdpPolicyStatus notDeployed = builder.deploy(false).pdpId(PDP_B).state(State.FAILURE).build();
259
260         // remaining policies are deployed
261         builder.deploy(true).state(State.WAITING);
262
263         ToscaConceptIdentifierOptVersion optIdent = new ToscaConceptIdentifierOptVersion(POLICY_A);
264
265         // @formatter:off
266         when(dao.getAllPolicyStatus(optIdent)).thenReturn(List.of(
267                         builder.policy(POLICY_A).pdpId(PDP_A).build(),
268                         notDeployed,
269                         builder.policy(POLICY_A).pdpId(PDP_C).build()
270                         ));
271         // @formatter:on
272         return optIdent;
273     }
274 }