Remove policies from repository when Ric is removed from configuration
[nonrtric.git] / policy-agent / src / test / java / org / oransc / policyagent / tasks / StartupServiceTest.java
1 /*-
2  * ========================LICENSE_START=================================
3  * O-RAN-SC
4  * %%
5  * Copyright (C) 2019 Nordix Foundation
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.oransc.policyagent.tasks;
22
23 import static org.junit.jupiter.api.Assertions.assertEquals;
24 import static org.junit.jupiter.api.Assertions.assertTrue;
25 import static org.mockito.Mockito.doReturn;
26 import static org.mockito.Mockito.mock;
27 import static org.mockito.Mockito.spy;
28 import static org.mockito.Mockito.times;
29 import static org.mockito.Mockito.verify;
30 import static org.mockito.Mockito.when;
31
32 import java.util.Collections;
33 import java.util.List;
34
35 import org.junit.jupiter.api.Test;
36 import org.junit.jupiter.api.extension.ExtendWith;
37 import org.mockito.Mock;
38 import org.mockito.junit.jupiter.MockitoExtension;
39 import org.oransc.policyagent.configuration.ApplicationConfig;
40 import org.oransc.policyagent.configuration.ImmutableRicConfig;
41 import org.oransc.policyagent.configuration.RicConfig;
42 import org.oransc.policyagent.repository.Policies;
43 import org.oransc.policyagent.repository.Policy;
44 import org.oransc.policyagent.repository.PolicyType;
45 import org.oransc.policyagent.repository.Ric;
46 import org.oransc.policyagent.repository.Rics;
47
48 @ExtendWith(MockitoExtension.class)
49 public class StartupServiceTest {
50     private static final String FIRST_RIC_NAME = "first";
51     private static final String SECOND_RIC_NAME = "second";
52
53     @Mock
54     ApplicationConfig appConfigMock;
55     @Mock
56     RefreshConfigTask refreshTaskMock;
57     @Mock
58     RicSynchronizationTask synchronizationTaskMock;
59
60     @Test
61     public void startup_thenServiceIsAddedAsObeserverAndRefreshIsStarted() {
62         StartupService serviceUnderTest =
63             new StartupService(appConfigMock, refreshTaskMock, null, null, null, null, null);
64
65         serviceUnderTest.startup();
66
67         verify(appConfigMock).addObserver(serviceUnderTest);
68         verify(refreshTaskMock).start();
69     }
70
71     @Test
72     public void twoNewRicsAddedToConfiguration_thenSynchronizationIsStartedAndTwoRicsAreAddedInRepository() {
73
74         Rics rics = new Rics();
75         StartupService serviceUnderTest =
76             spy(new StartupService(appConfigMock, refreshTaskMock, rics, null, null, null, null));
77
78         doReturn(synchronizationTaskMock).when(serviceUnderTest).createSynchronizationTask();
79
80         serviceUnderTest.onRicConfigUpdate(getRicConfig(FIRST_RIC_NAME), ApplicationConfig.RicConfigUpdate.ADDED);
81         serviceUnderTest.onRicConfigUpdate(getRicConfig(SECOND_RIC_NAME), ApplicationConfig.RicConfigUpdate.ADDED);
82
83         Ric firstRic = rics.get(FIRST_RIC_NAME);
84         assertEquals(FIRST_RIC_NAME, firstRic.name(), FIRST_RIC_NAME + " not added to Rics");
85         verify(synchronizationTaskMock, times(1)).run(firstRic);
86
87         Ric secondRic = rics.get(SECOND_RIC_NAME);
88         assertEquals(SECOND_RIC_NAME, secondRic.name(), SECOND_RIC_NAME + " not added to Rics");
89         verify(synchronizationTaskMock).run(secondRic);
90     }
91
92     @Test
93     public void oneRicIsChanged_thenSynchronizationIsStartedAndRicIsUpdatedInRepository() {
94         Rics rics = new Rics();
95         Ric originalRic = new Ric(getRicConfig(FIRST_RIC_NAME, "managedElement1"));
96         rics.put(originalRic);
97
98         StartupService serviceUnderTest =
99             spy(new StartupService(appConfigMock, refreshTaskMock, rics, null, null, null, null));
100
101         doReturn(synchronizationTaskMock).when(serviceUnderTest).createSynchronizationTask();
102
103         String updatedManagedElementName = "managedElement2";
104         serviceUnderTest.onRicConfigUpdate(getRicConfig(FIRST_RIC_NAME, updatedManagedElementName),
105             ApplicationConfig.RicConfigUpdate.CHANGED);
106
107         Ric firstRic = rics.get(FIRST_RIC_NAME);
108         assertEquals(FIRST_RIC_NAME, firstRic.name(), FIRST_RIC_NAME + " not added to Rics");
109         assertTrue(firstRic.getManagedElementIds().contains(updatedManagedElementName), "Ric not updated");
110         verify(synchronizationTaskMock).run(firstRic);
111     }
112
113     @Test
114     public void oneRicIsRemoved_thenNoSynchronizationIsStartedAndRicAndItsPoliciesAreDeletedFromRepository() {
115         Rics rics = new Rics();
116         RicConfig ricConfig = getRicConfig(FIRST_RIC_NAME);
117         Ric ric = new Ric(ricConfig);
118         rics.put(ric);
119
120         Policies policies = addPolicyForRic(ric);
121
122         StartupService serviceUnderTest =
123             new StartupService(appConfigMock, refreshTaskMock, rics, null, null, policies, null);
124
125         serviceUnderTest.onRicConfigUpdate(ricConfig, ApplicationConfig.RicConfigUpdate.REMOVED);
126
127         assertEquals(0, rics.size(), "Ric not deleted");
128         assertEquals(0, policies.size(), "Ric's policies not deleted");
129     }
130
131     private Policies addPolicyForRic(Ric ric) {
132         Policies policies = new Policies();
133         Policy policyMock = mock(Policy.class);
134         when(policyMock.id()).thenReturn("policyId");
135         when(policyMock.ric()).thenReturn(ric);
136         PolicyType policyTypeMock = mock(PolicyType.class);
137         when(policyTypeMock.name()).thenReturn("typeName");
138         when(policyMock.type()).thenReturn(policyTypeMock);
139         policies.put(policyMock);
140         return policies;
141     }
142
143     private RicConfig getRicConfig(String name) {
144         return getRicConfig(name, null);
145     }
146
147     private RicConfig getRicConfig(String name, String managedElementName) {
148         List<String> managedElements = Collections.emptyList();
149         if (managedElementName != null) {
150             managedElements = Collections.singletonList(managedElementName);
151         }
152         ImmutableRicConfig ricConfig = ImmutableRicConfig.builder() //
153             .name(name) //
154             .managedElementIds(managedElements) //
155             .baseUrl("baseUrl") //
156             .build();
157         return ricConfig;
158     }
159 }