Migrate pap startup & controllers to spring boot
[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         prov.initialize();
81     }
82
83     @Test
84     public void testGetStatus_testAccumulate() throws PfModelException {
85
86         buildPolicyStatusToReturn1();
87
88         List<PolicyStatus> result = new ArrayList<>(prov.getStatus());
89         Collections.sort(result, (rec1, rec2) -> rec1.getPolicy().compareTo(rec2.getPolicy()));
90
91         assertThat(result).hasSize(3);
92
93         Iterator<PolicyStatus> iter = result.iterator();
94
95         PolicyStatus status = iter.next();
96         assertThat(status.getPolicy()).isEqualTo(POLICY_A);
97         assertThat(status.getPolicyType()).isEqualTo(POLICY_TYPE);
98         assertThat(status.getIncompleteCount()).isEqualTo(2);
99         assertThat(status.getFailureCount()).isZero();
100         assertThat(status.getSuccessCount()).isZero();
101
102         status = iter.next();
103         assertThat(status.getPolicy()).isEqualTo(POLICY_B);
104         assertThat(status.getPolicyType()).isEqualTo(POLICY_TYPE);
105         assertThat(status.getIncompleteCount()).isZero();
106         assertThat(status.getFailureCount()).isZero();
107         assertThat(status.getSuccessCount()).isEqualTo(1);
108
109         status = iter.next();
110         assertThat(status.getPolicy()).isEqualTo(POLICY_C);
111         assertThat(status.getPolicyType()).isEqualTo(POLICY_TYPE);
112         assertThat(status.getIncompleteCount()).isEqualTo(1);
113         assertThat(status.getFailureCount()).isZero();
114         assertThat(status.getSuccessCount()).isZero();
115     }
116
117     @Test
118     public void testGetStatusToscaConceptIdentifierOptVersion() throws PfModelException {
119
120         ToscaConceptIdentifierOptVersion optIdent = buildPolicyStatusToReturn2();
121
122         List<PolicyStatus> result = new ArrayList<>(prov.getStatus(optIdent));
123         assertThat(result).hasSize(1);
124
125         Iterator<PolicyStatus> iter = result.iterator();
126
127         PolicyStatus status = iter.next();
128         assertThat(status.getPolicy()).isEqualTo(POLICY_A);
129         assertThat(status.getPolicyType()).isEqualTo(POLICY_TYPE);
130         assertThat(status.getIncompleteCount()).isEqualTo(2);
131         assertThat(status.getFailureCount()).isZero();
132         assertThat(status.getSuccessCount()).isZero();
133     }
134
135     @Test
136     public void testGetPolicyStatus() throws PfModelException {
137
138         buildPolicyStatusToReturn1();
139
140         List<PdpPolicyStatus> result = new ArrayList<>(prov.getPolicyStatus());
141         Collections.sort(result, (rec1, rec2) -> rec1.getPolicy().compareTo(rec2.getPolicy()));
142
143         assertThat(result).hasSize(5);
144         Iterator<PdpPolicyStatus> iter = result.iterator();
145
146         PdpPolicyStatus status = iter.next();
147         assertThat(status.getPolicy()).isEqualTo(POLICY_A);
148         assertThat(status.getPolicyType()).isEqualTo(POLICY_TYPE);
149         assertThat(status.getPdpId()).isEqualTo(PDP_A);
150         assertThat(status.getPdpType()).isEqualTo(MY_PDP_TYPE);
151         assertThat(status.getPdpGroup()).isEqualTo(MY_GROUP);
152         assertTrue(status.isDeploy());
153         assertThat(status.getState()).isEqualTo(State.WAITING);
154
155         status = iter.next();
156         assertThat(status.getPolicy()).isEqualTo(POLICY_A);
157         assertThat(status.getPdpId()).isEqualTo(PDP_B);
158         assertTrue(status.isDeploy());
159         assertThat(status.getState()).isEqualTo(State.WAITING);
160
161         status = iter.next();
162         assertThat(status.getPolicy()).isEqualTo(POLICY_B);
163         assertThat(status.getPdpId()).isEqualTo(PDP_A);
164         assertFalse(status.isDeploy());
165         assertThat(status.getState()).isEqualTo(State.WAITING);
166
167         status = iter.next();
168         assertThat(status.getPolicy()).isEqualTo(POLICY_B);
169         assertThat(status.getPdpId()).isEqualTo(PDP_B);
170         assertTrue(status.isDeploy());
171         assertThat(status.getState()).isEqualTo(State.SUCCESS);
172     }
173
174     @Test
175     public void testGetPolicyStatusByGroupAndPolicyIdVersion() throws PfModelException {
176
177         ToscaConceptIdentifierOptVersion optIdent = buildPolicyStatusToReturn2();
178
179         List<PdpPolicyStatus> result = new ArrayList<>(prov.getPolicyStatus(MY_GROUP, optIdent));
180         assertThat(result).hasSize(3);
181
182         Iterator<PdpPolicyStatus> iter = result.iterator();
183
184         PdpPolicyStatus status = iter.next();
185         assertThat(status.getPolicy()).isEqualTo(POLICY_A);
186         assertThat(status.getPolicyType()).isEqualTo(POLICY_TYPE);
187         assertThat(status.getPdpId()).isEqualTo(PDP_A);
188         assertThat(status.getPdpType()).isEqualTo(MY_PDP_TYPE);
189         assertThat(status.getPdpGroup()).isEqualTo(MY_GROUP);
190         assertTrue(status.isDeploy());
191         assertThat(status.getState()).isEqualTo(State.WAITING);
192
193         status = iter.next();
194         assertThat(status.getPolicy()).isEqualTo(POLICY_A);
195         assertThat(status.getPolicyType()).isEqualTo(POLICY_TYPE);
196         assertThat(status.getPdpId()).isEqualTo(PDP_B);
197         assertThat(status.getPdpType()).isEqualTo(MY_PDP_TYPE);
198         assertThat(status.getPdpGroup()).isEqualTo(MY_GROUP);
199         assertFalse(status.isDeploy());
200         assertThat(status.getState()).isEqualTo(State.FAILURE);
201     }
202
203     @Test
204     public void testGetPolicyStatusByRegexNoMatch() throws PfModelException {
205         buildPolicyStatusToReturn1();
206         final String pattern = "Hello";
207
208         final Collection<PolicyStatus> actual = prov.getByRegex(pattern);
209         assertThat(actual).isEmpty();
210     }
211
212     @Test
213     public void testGetPolicyStatusOneMatch() throws PfModelException {
214         buildPolicyStatusToReturn1();
215         final String pattern = "My(We|Po)[li]{0,3}c.A";
216
217         final Collection<PolicyStatus> actual = prov.getByRegex(pattern);
218         assertThat(actual).hasSize(1);
219
220         final String actualName = actual.iterator().next().getPolicy().getName();
221         assertThat(actualName).isEqualTo("MyPolicyA");
222     }
223
224     @Test
225     public void testGetPolicyStatusAllMatch() throws PfModelException {
226         buildPolicyStatusToReturn1();
227         final String pattern = "My(We|Po)[li]{0,3}c.{2}0*";
228
229         final Collection<PolicyStatus> actual = prov.getByRegex(pattern);
230
231         assertThat(actual).hasSize(3);
232     }
233
234     private void buildPolicyStatusToReturn1() throws PfModelException {
235
236         PdpPolicyStatusBuilder builder = PdpPolicyStatus.builder().pdpGroup(MY_GROUP).pdpType(MY_PDP_TYPE)
237             .policyType(POLICY_TYPE).state(State.WAITING);
238
239         PdpPolicyStatus notDeployed = builder.deploy(false).policy(POLICY_B).pdpId(PDP_A).build();
240
241         // remaining policies are deployed
242         builder.deploy(true);
243
244         // @formatter:off
245         when(dao.getAllPolicyStatus()).thenReturn(List.of(
246                         builder.policy(POLICY_A).pdpId(PDP_A).build(),
247                         builder.policy(POLICY_A).pdpId(PDP_B).build(),
248                         notDeployed,
249                         builder.policy(POLICY_C).pdpId(PDP_A).build(),
250                         builder.policy(POLICY_B).pdpId(PDP_B).state(State.SUCCESS).build()
251                     ));
252         // @formatter:on
253     }
254
255     private ToscaConceptIdentifierOptVersion buildPolicyStatusToReturn2() throws PfModelException {
256         PdpPolicyStatusBuilder builder =
257             PdpPolicyStatus.builder().pdpGroup(MY_GROUP).pdpType(MY_PDP_TYPE).policy(POLICY_A).policyType(POLICY_TYPE);
258
259         PdpPolicyStatus notDeployed = builder.deploy(false).pdpId(PDP_B).state(State.FAILURE).build();
260
261         // remaining policies are deployed
262         builder.deploy(true).state(State.WAITING);
263
264         ToscaConceptIdentifierOptVersion optIdent = new ToscaConceptIdentifierOptVersion(POLICY_A);
265
266         // @formatter:off
267         when(dao.getAllPolicyStatus(optIdent)).thenReturn(List.of(
268                         builder.policy(POLICY_A).pdpId(PDP_A).build(),
269                         notDeployed,
270                         builder.policy(POLICY_A).pdpId(PDP_C).build()
271                         ));
272         // @formatter:on
273         return optIdent;
274     }
275 }