+ public void whenRicUndefined_thenRecovery() {
+ RIC_1.setState(RicState.UNDEFINED);
+ rics.put(RIC_1);
+
+ RepositorySupervision supervisorUnderTest =
+ spy(new RepositorySupervision(rics, policies, a1ClientFactory, types, null));
+
+ doReturn(recoveryTaskMock).when(supervisorUnderTest).createSynchronizationTask();
+
+ supervisorUnderTest.checkAllRics();
+
+ verify(supervisorUnderTest).checkAllRics();
+ verify(supervisorUnderTest).createSynchronizationTask();
+ verify(recoveryTaskMock).run(RIC_1);
+ verifyNoMoreInteractions(supervisorUnderTest);
+ }
+
+ @Test
+ public void whenRicRecovering_thenNoRecovery() {
+ RIC_1.setState(RicState.SYNCHRONIZING);
+ rics.put(RIC_1);
+
+ RepositorySupervision supervisorUnderTest =
+ spy(new RepositorySupervision(rics, policies, a1ClientFactory, types, null));
+
+ supervisorUnderTest.checkAllRics();
+
+ verify(supervisorUnderTest).checkAllRics();
+ verifyNoMoreInteractions(supervisorUnderTest);
+ }
+
+ @Test
+ public void whenRicIdleAndErrorGettingPolicyIdentities_thenNoRecovery() {
+ RIC_1.setState(RicState.IDLE);
+ RIC_1.addSupportedPolicyType(POLICY_TYPE_1);
+ rics.put(RIC_1);
+
+ setUpGetPolicyIdentitiesToReturn(new Exception("Failed"));
+
+ RepositorySupervision supervisorUnderTest =
+ spy(new RepositorySupervision(rics, policies, a1ClientFactory, types, null));
+ supervisorUnderTest.checkAllRics();
+
+ verify(supervisorUnderTest).checkAllRics();
+ verifyNoMoreInteractions(supervisorUnderTest);
+ }
+
+ @Test
+ public void whenRicIdleAndNotSameAmountOfPolicies_thenRecovery() {
+ RIC_1.setState(RicState.IDLE);
+ rics.put(RIC_1);
+
+ policies.put(POLICY_1);
+ policies.put(POLICY_2);
+
+ setUpGetPolicyIdentitiesToReturn(new ArrayList<>(Arrays.asList(POLICY_1_ID)));
+
+ RepositorySupervision supervisorUnderTest =
+ spy(new RepositorySupervision(rics, policies, a1ClientFactory, types, null));
+
+ doReturn(recoveryTaskMock).when(supervisorUnderTest).createSynchronizationTask();
+
+ supervisorUnderTest.checkAllRics();
+
+ verify(supervisorUnderTest).checkAllRics();
+ verify(supervisorUnderTest).createSynchronizationTask();
+ verify(recoveryTaskMock).run(RIC_1);
+ verifyNoMoreInteractions(supervisorUnderTest);
+ }
+
+ @Test
+ public void whenRicIdleAndSameAmountOfPoliciesButNotSamePolicies_thenRecovery() {
+ RIC_1.setState(RicState.IDLE);
+ rics.put(RIC_1);
+
+ policies.put(POLICY_1);
+ policies.put(POLICY_2);
+
+ setUpGetPolicyIdentitiesToReturn(new ArrayList<>(Arrays.asList(POLICY_1_ID, "Another_policy")));
+
+ RepositorySupervision supervisorUnderTest =
+ spy(new RepositorySupervision(rics, policies, a1ClientFactory, types, null));
+
+ doReturn(recoveryTaskMock).when(supervisorUnderTest).createSynchronizationTask();
+
+ supervisorUnderTest.checkAllRics();
+
+ verify(supervisorUnderTest).checkAllRics();
+ verify(supervisorUnderTest).createSynchronizationTask();
+ verify(recoveryTaskMock).run(RIC_1);
+ verifyNoMoreInteractions(supervisorUnderTest);
+ }
+
+ @Test
+ public void whenRicIdleAndErrorGettingPolicyTypes_thenNoRecovery() {
+ RIC_1.setState(RicState.IDLE);
+ RIC_1.addSupportedPolicyType(POLICY_TYPE_1);
+ rics.put(RIC_1);
+
+ setUpGetPolicyIdentitiesToReturn(Collections.emptyList());
+ setUpGetPolicyTypeIdentitiesToReturn(new Exception("Failed"));
+
+ RepositorySupervision supervisorUnderTest =
+ spy(new RepositorySupervision(rics, policies, a1ClientFactory, types, null));
+ supervisorUnderTest.checkAllRics();
+
+ verify(supervisorUnderTest).checkAllRics();
+ verifyNoMoreInteractions(supervisorUnderTest);
+ }
+
+ @Test
+ public void whenRicIdleAndNotSameAmountOfPolicyTypes_thenRecovery() {
+ RIC_1.setState(RicState.IDLE);
+ RIC_1.addSupportedPolicyType(POLICY_TYPE_1);
+ rics.put(RIC_1);
+
+ types.put(POLICY_TYPE_1);
+
+ setUpGetPolicyIdentitiesToReturn(Collections.emptyList());
+ setUpGetPolicyTypeIdentitiesToReturn(new ArrayList<>(Arrays.asList(POLICY_TYPE_1_NAME, "another_policy_type")));
+
+ RepositorySupervision supervisorUnderTest =
+ spy(new RepositorySupervision(rics, policies, a1ClientFactory, types, null));
+
+ doReturn(recoveryTaskMock).when(supervisorUnderTest).createSynchronizationTask();
+
+ supervisorUnderTest.checkAllRics();
+
+ verify(supervisorUnderTest).checkAllRics();
+ verify(supervisorUnderTest).createSynchronizationTask();
+ verify(recoveryTaskMock).run(RIC_1);
+ verifyNoMoreInteractions(supervisorUnderTest);
+ }
+
+ @Test
+ public void whenRicIdleAndSameAmountOfPolicyTypesButNotSameTypes_thenRecovery() {
+ PolicyType policyType2 = ImmutablePolicyType.builder() //
+ .name("policyType2") //