Make PAP stateless
[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  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.pap.main.rest;
22
23 import static org.assertj.core.api.Assertions.assertThat;
24 import static org.mockito.Mockito.when;
25
26 import java.util.ArrayList;
27 import java.util.Collections;
28 import java.util.Iterator;
29 import java.util.List;
30 import lombok.NonNull;
31 import org.junit.AfterClass;
32 import org.junit.Before;
33 import org.junit.Test;
34 import org.onap.policy.common.utils.services.Registry;
35 import org.onap.policy.models.base.PfModelException;
36 import org.onap.policy.models.pap.concepts.PolicyStatus;
37 import org.onap.policy.models.pdp.concepts.PdpPolicyStatus;
38 import org.onap.policy.models.pdp.concepts.PdpPolicyStatus.PdpPolicyStatusBuilder;
39 import org.onap.policy.models.pdp.concepts.PdpPolicyStatus.State;
40 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
41 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifierOptVersion;
42
43 public class TestPolicyStatusProvider extends ProviderSuper {
44     private static final String MY_GROUP = "MyGroup";
45     private static final String MY_PDP_TYPE = "MySubGroup";
46     private static final @NonNull String VERSION = "1.2.3";
47     private static final String PDP_A = "pdpA";
48     private static final String PDP_B = "pdpB";
49     private static final String PDP_C = "pdpC";
50     private static final ToscaConceptIdentifier POLICY_TYPE = new ToscaConceptIdentifier("MyPolicyType", VERSION);
51     private static final ToscaConceptIdentifier POLICY_A = new ToscaConceptIdentifier("MyPolicyA", VERSION);
52     private static final ToscaConceptIdentifier POLICY_B = new ToscaConceptIdentifier("MyPolicyB", VERSION);
53     private static final ToscaConceptIdentifier POLICY_C = new ToscaConceptIdentifier("MyPolicyC", VERSION);
54
55     private PolicyStatusProvider prov;
56
57
58     @AfterClass
59     public static void tearDownAfterClass() {
60         Registry.newRegistry();
61     }
62
63     /**
64      * Configures mocks and objects.
65      *
66      * @throws Exception if an error occurs
67      */
68     @Override
69     @Before
70     public void setUp() throws Exception {
71
72         super.setUp();
73
74         prov = new PolicyStatusProvider();
75     }
76
77     @Test
78     public void testGetStatus_testAccumulate() throws PfModelException {
79
80         PdpPolicyStatusBuilder builder = PdpPolicyStatus.builder().pdpGroup(MY_GROUP).pdpType(MY_PDP_TYPE)
81                         .policyType(POLICY_TYPE).state(State.WAITING);
82
83         PdpPolicyStatus notDeployed = builder.deploy(false).policy(POLICY_B).pdpId(PDP_A).build();
84
85         // remaining policies are deployed
86         builder.deploy(true);
87
88         // @formatter:off
89         when(dao.getAllPolicyStatus()).thenReturn(List.of(
90                         builder.policy(POLICY_A).pdpId(PDP_A).build(),
91                         builder.policy(POLICY_A).pdpId(PDP_B).build(),
92                         notDeployed,
93                         builder.policy(POLICY_C).pdpId(PDP_A).build()
94                         ));
95         // @formatter:on
96
97         List<PolicyStatus> result = new ArrayList<>(prov.getStatus());
98         Collections.sort(result, (rec1, rec2) -> rec1.getPolicy().compareTo(rec2.getPolicy()));
99
100         assertThat(result).hasSize(2);
101
102         Iterator<PolicyStatus> iter = result.iterator();
103
104         PolicyStatus status = iter.next();
105         assertThat(status.getPolicy()).isEqualTo(POLICY_A);
106         assertThat(status.getPolicyType()).isEqualTo(POLICY_TYPE);
107         assertThat(status.getIncompleteCount()).isEqualTo(2);
108         assertThat(status.getFailureCount()).isZero();
109         assertThat(status.getSuccessCount()).isZero();
110
111         status = iter.next();
112         assertThat(status.getPolicy()).isEqualTo(POLICY_C);
113         assertThat(status.getPolicyType()).isEqualTo(POLICY_TYPE);
114         assertThat(status.getIncompleteCount()).isEqualTo(1);
115         assertThat(status.getFailureCount()).isZero();
116         assertThat(status.getSuccessCount()).isZero();
117     }
118
119     @Test
120     public void testGetStatusToscaConceptIdentifierOptVersion() throws PfModelException {
121
122         PdpPolicyStatusBuilder builder = PdpPolicyStatus.builder().pdpGroup(MY_GROUP).pdpType(MY_PDP_TYPE)
123                         .policy(POLICY_A).policyType(POLICY_TYPE);
124
125         PdpPolicyStatus notDeployed = builder.deploy(false).pdpId(PDP_B).state(State.FAILURE).build();
126
127         // remaining policies are deployed
128         builder.deploy(true).state(State.WAITING);
129
130         ToscaConceptIdentifierOptVersion optIdent = new ToscaConceptIdentifierOptVersion(POLICY_A);
131
132         // @formatter:off
133         when(dao.getAllPolicyStatus(optIdent)).thenReturn(List.of(
134                         builder.policy(POLICY_A).pdpId(PDP_A).build(),
135                         notDeployed,
136                         builder.policy(POLICY_A).pdpId(PDP_C).build()
137                         ));
138         // @formatter:on
139
140         List<PolicyStatus> result = new ArrayList<>(prov.getStatus(optIdent));
141         assertThat(result).hasSize(1);
142
143         Iterator<PolicyStatus> iter = result.iterator();
144
145         PolicyStatus status = iter.next();
146         assertThat(status.getPolicy()).isEqualTo(POLICY_A);
147         assertThat(status.getPolicyType()).isEqualTo(POLICY_TYPE);
148         assertThat(status.getIncompleteCount()).isEqualTo(2);
149         assertThat(status.getFailureCount()).isZero();
150         assertThat(status.getSuccessCount()).isZero();
151     }
152 }