From b1e3abf27292895d8921398ebb9cf66072681f83 Mon Sep 17 00:00:00 2001 From: adetalhouet Date: Thu, 17 Dec 2015 11:31:07 -0500 Subject: [PATCH] Bug 4709 - Add keepalive response timeout to KeepaliveSalFacade of netconf connector. Change-Id: Ie6c7593eebd62c85430b2b219921fa7d28e63024 Signed-off-by: adetalhouet --- .../netconf/sal-netconf-connector/pom.xml | 14 +++--- .../netconf/sal/KeepaliveSalFacade.java | 7 ++- .../netconf/sal/KeepaliveSalFacadeTest.java | 46 +++++++++++++++---- 3 files changed, 51 insertions(+), 16 deletions(-) diff --git a/opendaylight/netconf/sal-netconf-connector/pom.xml b/opendaylight/netconf/sal-netconf-connector/pom.xml index 418cfc3de6..d53eee48b8 100644 --- a/opendaylight/netconf/sal-netconf-connector/pom.xml +++ b/opendaylight/netconf/sal-netconf-connector/pom.xml @@ -164,15 +164,15 @@ test - org.opendaylight.controller - sal-binding-broker-impl - test-jar - test + org.opendaylight.controller + sal-binding-broker-impl + test-jar + test - org.opendaylight.yangtools - mockito-configuration - test + org.mockito + mockito-core + test diff --git a/opendaylight/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/KeepaliveSalFacade.java b/opendaylight/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/KeepaliveSalFacade.java index 862b860eef..3677ba41e9 100644 --- a/opendaylight/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/KeepaliveSalFacade.java +++ b/opendaylight/netconf/sal-netconf-connector/src/main/java/org/opendaylight/netconf/sal/connect/netconf/sal/KeepaliveSalFacade.java @@ -173,7 +173,12 @@ public final class KeepaliveSalFacade implements RemoteDeviceHandler underlyingSalFacade; - private static java.util.concurrent.ScheduledExecutorService executorService; + private ScheduledExecutorService executorServiceSpy; @Mock private NetconfDeviceCommunicator listener; @@ -57,9 +64,12 @@ public class KeepaliveSalFacadeTest { private DOMRpcService proxyRpc; + @Mock + private ScheduledFuture currentKeepalive; + @Before public void setUp() throws Exception { - executorService = Executors.newScheduledThreadPool(1); + executorServiceSpy = Executors.newScheduledThreadPool(1); MockitoAnnotations.initMocks(this); @@ -67,11 +77,25 @@ public class KeepaliveSalFacadeTest { doReturn("mockedRpc").when(deviceRpc).toString(); doNothing().when(underlyingSalFacade).onDeviceConnected( any(SchemaContext.class), any(NetconfSessionPreferences.class), any(DOMRpcService.class)); + + ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1); + executorServiceSpy = Mockito.spy(executorService); + doAnswer(new Answer() { + @Override + public ScheduledFuture answer(InvocationOnMock invocationOnMock) + throws Throwable { + invocationOnMock.callRealMethod(); + return currentKeepalive; + } + }).when(executorServiceSpy).schedule(Mockito. any(), + Mockito.anyLong(), Matchers. any()); + + Mockito.when(currentKeepalive.isDone()).thenReturn(true); } @After public void tearDown() throws Exception { - executorService.shutdownNow(); + executorServiceSpy.shutdownNow(); } @Test @@ -82,7 +106,7 @@ public class KeepaliveSalFacadeTest { doReturn(Futures.immediateCheckedFuture(result)).when(deviceRpc).invokeRpc(any(SchemaPath.class), any(NormalizedNode.class)); final KeepaliveSalFacade keepaliveSalFacade = - new KeepaliveSalFacade(REMOTE_DEVICE_ID, underlyingSalFacade, executorService, 1L); + new KeepaliveSalFacade(REMOTE_DEVICE_ID, underlyingSalFacade, executorServiceSpy, 1L); keepaliveSalFacade.setListener(listener); keepaliveSalFacade.onDeviceConnected(null, null, deviceRpc); @@ -90,7 +114,7 @@ public class KeepaliveSalFacadeTest { verify(underlyingSalFacade).onDeviceConnected( any(SchemaContext.class), any(NetconfSessionPreferences.class), any(DOMRpcService.class)); - verify(deviceRpc, timeout(15000).times(5)).invokeRpc(any(SchemaPath.class), any(NormalizedNode.class)); + verify(deviceRpc, timeout(15000).atLeast(5)).invokeRpc(any(SchemaPath.class), any(NormalizedNode.class)); } @Test @@ -109,7 +133,7 @@ public class KeepaliveSalFacadeTest { .when(deviceRpc).invokeRpc(any(SchemaPath.class), any(NormalizedNode.class)); final KeepaliveSalFacade keepaliveSalFacade = - new KeepaliveSalFacade(REMOTE_DEVICE_ID, underlyingSalFacade, executorService, 1L); + new KeepaliveSalFacade(REMOTE_DEVICE_ID, underlyingSalFacade, executorServiceSpy, 1L); keepaliveSalFacade.setListener(listener); keepaliveSalFacade.onDeviceConnected(null, null, deviceRpc); @@ -144,6 +168,12 @@ public class KeepaliveSalFacadeTest { // 1 failed that results in disconnect, 3 total with previous fail verify(listener, timeout(15000).times(3)).disconnect(); + + + Mockito.when(currentKeepalive.isDone()).thenReturn(false); + keepaliveSalFacade.onDeviceConnected(null, null, deviceRpc); + // 1 failed that results in disconnect, 4 total with previous fail + verify(listener, timeout(15000).times(4)).disconnect(); } @Test @@ -160,7 +190,7 @@ public class KeepaliveSalFacadeTest { .when(deviceRpc).invokeRpc(any(SchemaPath.class), any(NormalizedNode.class)); final KeepaliveSalFacade keepaliveSalFacade = - new KeepaliveSalFacade(REMOTE_DEVICE_ID, underlyingSalFacade, executorService, 100L); + new KeepaliveSalFacade(REMOTE_DEVICE_ID, underlyingSalFacade, executorServiceSpy, 100L); keepaliveSalFacade.setListener(listener); keepaliveSalFacade.onDeviceConnected(null, null, deviceRpc); -- 2.36.6