+ @Test
+ void testOnDataTreeChangedWhenServiceDegradedShouldBeRerouted() {
+ @SuppressWarnings("unchecked") final DataObjectModification<Services> service =
+ mock(DataObjectModification.class);
+ final List<DataTreeModification<Services>> changes = new ArrayList<>();
+ @SuppressWarnings("unchecked") final DataTreeModification<Services> ch = mock(DataTreeModification.class);
+ changes.add(ch);
+ when(ch.getRootNode()).thenReturn(service);
+
+ ServiceResiliency serviceResiliency = new ServiceResiliencyBuilder().setResiliency(Restorable.VALUE).build();
+ Services serviceAfter = new ServicesBuilder(buildService(State.OutOfService, AdminStates.InService))
+ .setServiceResiliency(serviceResiliency)
+ .build();
+ when(service.modificationType()).thenReturn(DataObjectModification.ModificationType.WRITE);
+ when(service.dataBefore())
+ .thenReturn(new ServicesBuilder(buildService(State.InService, AdminStates.InService))
+ .setServiceResiliency(serviceResiliency)
+ .build());
+ when(service.dataAfter()).thenReturn(serviceAfter);
+ when(serviceDataStoreOperations.getService(anyString())).thenReturn(Optional.of(serviceAfter));
+ when(rpcService.getRpc(ServiceDelete.class)).thenReturn(serviceDelete);
+ when(serviceDelete.invoke(any()))
+ .thenReturn(RpcResultBuilder.success(new ServiceDeleteOutputBuilder()
+ .setConfigurationResponseCommon(new ConfigurationResponseCommonBuilder()
+ .setResponseCode(ResponseCodes.RESPONSE_OK)
+ .build())
+ .build())
+ .buildFuture());
+ when(rpcService.getRpc(ServiceReroute.class)).thenReturn(serviceReroute);
+ when(serviceReroute.invoke(any()))
+ .thenReturn(RpcResultBuilder.success(new ServiceRerouteOutputBuilder()
+ .setConfigurationResponseCommon(new ConfigurationResponseCommonBuilder()
+ .setResponseCode(ResponseCodes.RESPONSE_OK)
+ .build())
+ .build())
+ .buildFuture());
+ when(rpcService.getRpc(ServiceCreate.class)).thenReturn(serviceCreate);
+ when(serviceCreate.invoke(any()))
+ .thenReturn(RpcResultBuilder.success(new ServiceCreateOutputBuilder()
+ .setConfigurationResponseCommon(new ConfigurationResponseCommonBuilder()
+ .setResponseCode(ResponseCodes.RESPONSE_OK)
+ .build())
+ .build())
+ .buildFuture());
+ ServiceListener listener = new ServiceListener(rpcService, serviceDataStoreOperations,
+ notificationPublishService);
+ listener.onDataTreeChanged(changes);
+ verify(ch, times(1)).getRootNode();
+ verify(service, times(1)).modificationType();
+ verify(service, times(3)).dataBefore();
+ verify(service, times(1)).dataAfter();
+// verify(servicehandler, times(1)).serviceDelete(any());
+
+ when(service.modificationType()).thenReturn(DataObjectModification.ModificationType.DELETE);
+ listener.onDataTreeChanged(changes);
+// verify(servicehandler, times(1)).serviceCreate(any());
+ }
+
+ @Test
+ void testOnDataTreeChangedWhenServiceDegradedShouldNotBeRerouted() {
+ @SuppressWarnings("unchecked") final DataObjectModification<Services> service =
+ mock(DataObjectModification.class);
+ final List<DataTreeModification<Services>> changes = new ArrayList<>();
+ @SuppressWarnings("unchecked") final DataTreeModification<Services> ch = mock(DataTreeModification.class);
+ changes.add(ch);
+ when(ch.getRootNode()).thenReturn(service);
+
+ Services serviceAfter = buildService(State.OutOfService, AdminStates.InService);
+ when(service.modificationType()).thenReturn(DataObjectModification.ModificationType.WRITE);
+ when(service.dataBefore()).thenReturn(buildService(State.InService, AdminStates.InService));
+ when(service.dataAfter()).thenReturn(serviceAfter);
+ ServiceListener listener = new ServiceListener(rpcService, serviceDataStoreOperations,
+ notificationPublishService);
+ listener.onDataTreeChanged(changes);
+ verify(ch, times(1)).getRootNode();
+ verify(service, times(1)).modificationType();
+ verify(service, times(3)).dataBefore();
+ verify(service, times(1)).dataAfter();
+// verify(servicehandler, times(0)).serviceDelete(any());
+
+ when(service.modificationType()).thenReturn(DataObjectModification.ModificationType.DELETE);
+ listener.onDataTreeChanged(changes);
+// verify(servicehandler, times(0)).serviceCreate(any());
+ }
+