Remove policies from repository when Ric is removed from configuration 74/2674/1
authorelinuxhenrik <henrik.b.andersson@est.tech>
Wed, 4 Mar 2020 15:53:19 +0000 (16:53 +0100)
committerelinuxhenrik <henrik.b.andersson@est.tech>
Wed, 4 Mar 2020 15:53:26 +0000 (16:53 +0100)
When a Ric is removed from the configuration, all policies created for
that Ric must be removed from the repository to keep the consistency of
the repository.

Change-Id: I7f400de008a16e02457bb055f2fdb67b978d5658
Signed-off-by: elinuxhenrik <henrik.b.andersson@est.tech>
policy-agent/src/main/java/org/oransc/policyagent/repository/Policies.java
policy-agent/src/main/java/org/oransc/policyagent/tasks/StartupService.java
policy-agent/src/test/java/org/oransc/policyagent/tasks/StartupServiceTest.java

index 54f876a..62dd140 100644 (file)
@@ -110,6 +110,13 @@ public class Policies {
         multiMapRemove(policiesType, policy.type().name(), policy);
     }
 
+    public synchronized void removePoliciesForRic(String ricName) {
+        Collection<Policy> policiesForRic = getForRic(ricName);
+        for (Policy policy : policiesForRic) {
+            remove(policy);
+        }
+    }
+
     public synchronized int size() {
         return policiesId.size();
     }
index 7068da4..590b010 100644 (file)
@@ -92,6 +92,7 @@ public class StartupService implements ApplicationConfig.Observer {
 
                 case REMOVED:
                     rics.remove(ricConfig.name());
+                    policies.removePoliciesForRic(ricConfig.name());
                     break;
 
                 default:
index 5590c5e..ed4b7ee 100644 (file)
@@ -23,9 +23,11 @@ package org.oransc.policyagent.tasks;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
 import java.util.Collections;
 import java.util.List;
@@ -37,6 +39,9 @@ import org.mockito.junit.jupiter.MockitoExtension;
 import org.oransc.policyagent.configuration.ApplicationConfig;
 import org.oransc.policyagent.configuration.ImmutableRicConfig;
 import org.oransc.policyagent.configuration.RicConfig;
+import org.oransc.policyagent.repository.Policies;
+import org.oransc.policyagent.repository.Policy;
+import org.oransc.policyagent.repository.PolicyType;
 import org.oransc.policyagent.repository.Ric;
 import org.oransc.policyagent.repository.Rics;
 
@@ -106,17 +111,33 @@ public class StartupServiceTest {
     }
 
     @Test
-    public void oneRicIsRemoved_thenNoSynchronizationIsStartedAndRicIsDeletedFromRepository() {
+    public void oneRicIsRemoved_thenNoSynchronizationIsStartedAndRicAndItsPoliciesAreDeletedFromRepository() {
         Rics rics = new Rics();
         RicConfig ricConfig = getRicConfig(FIRST_RIC_NAME);
-        rics.put(new Ric(ricConfig));
+        Ric ric = new Ric(ricConfig);
+        rics.put(ric);
+
+        Policies policies = addPolicyForRic(ric);
 
         StartupService serviceUnderTest =
-            new StartupService(appConfigMock, refreshTaskMock, rics, null, null, null, null);
+            new StartupService(appConfigMock, refreshTaskMock, rics, null, null, policies, null);
 
         serviceUnderTest.onRicConfigUpdate(ricConfig, ApplicationConfig.RicConfigUpdate.REMOVED);
 
         assertEquals(0, rics.size(), "Ric not deleted");
+        assertEquals(0, policies.size(), "Ric's policies not deleted");
+    }
+
+    private Policies addPolicyForRic(Ric ric) {
+        Policies policies = new Policies();
+        Policy policyMock = mock(Policy.class);
+        when(policyMock.id()).thenReturn("policyId");
+        when(policyMock.ric()).thenReturn(ric);
+        PolicyType policyTypeMock = mock(PolicyType.class);
+        when(policyTypeMock.name()).thenReturn("typeName");
+        when(policyMock.type()).thenReturn(policyTypeMock);
+        policies.put(policyMock);
+        return policies;
     }
 
     private RicConfig getRicConfig(String name) {