X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=netconf%2Fsal-netconf-connector%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fnetconf%2Fsal%2Fconnect%2Fnetconf%2FNetconfDeviceTest.java;h=00a0c9b4cea7f9caba9bb58b5b44fbdb126caf31;hb=b8f5ebd2f817de1d613d84cf41f3516728767eba;hp=2f58669f7e629ef9361c3412766440edfee1676d;hpb=741e94d72133150cac203bb5ecedf787203ef795;p=netconf.git diff --git a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDeviceTest.java b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDeviceTest.java index 2f58669f7e..00a0c9b4ce 100644 --- a/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDeviceTest.java +++ b/netconf/sal-netconf-connector/src/test/java/org/opendaylight/netconf/sal/connect/netconf/NetconfDeviceTest.java @@ -5,13 +5,14 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ - package org.opendaylight.netconf.sal.connect.netconf; import static org.junit.Assert.assertEquals; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyCollectionOf; -import static org.mockito.Matchers.eq; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyCollectionOf; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.ArgumentMatchers.isNull; +import static org.mockito.Mockito.after; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; @@ -20,32 +21,33 @@ import static org.mockito.Mockito.timeout; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -import com.google.common.base.Optional; import com.google.common.collect.HashMultimap; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.google.common.util.concurrent.Futures; -import java.io.InputStream; +import com.google.common.util.concurrent.ListeningExecutorService; +import com.google.common.util.concurrent.MoreExecutors; +import com.google.common.util.concurrent.SettableFuture; +import java.io.IOException; import java.net.InetSocketAddress; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; -import java.util.List; import java.util.Map; -import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; -import org.opendaylight.controller.config.util.xml.XmlUtil; -import org.opendaylight.controller.md.sal.dom.api.DOMNotification; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcResult; -import org.opendaylight.controller.md.sal.dom.api.DOMRpcService; -import org.opendaylight.controller.md.sal.dom.spi.DefaultDOMRpcResult; +import org.opendaylight.mdsal.dom.api.DOMActionService; +import org.opendaylight.mdsal.dom.api.DOMNotification; +import org.opendaylight.mdsal.dom.api.DOMRpcResult; +import org.opendaylight.mdsal.dom.api.DOMRpcService; +import org.opendaylight.mdsal.dom.spi.DefaultDOMRpcResult; import org.opendaylight.netconf.api.NetconfMessage; import org.opendaylight.netconf.api.xml.XmlNetconfConstants; +import org.opendaylight.netconf.api.xml.XmlUtil; import org.opendaylight.netconf.sal.connect.api.MessageTransformer; import org.opendaylight.netconf.sal.connect.api.NetconfDeviceSchemasResolver; import org.opendaylight.netconf.sal.connect.api.RemoteDeviceHandler; @@ -57,10 +59,10 @@ import org.opendaylight.netconf.sal.connect.netconf.util.NetconfMessageTransform import org.opendaylight.netconf.sal.connect.util.RemoteDeviceId; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.available.capabilities.AvailableCapability; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.model.api.Module; -import org.opendaylight.yangtools.yang.model.api.ModuleImport; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaPath; import org.opendaylight.yangtools.yang.model.repo.api.MissingSchemaSourceException; @@ -70,45 +72,51 @@ import org.opendaylight.yangtools.yang.model.repo.api.SchemaRepository; import org.opendaylight.yangtools.yang.model.repo.api.SchemaResolutionException; import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; +import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; import org.opendaylight.yangtools.yang.model.repo.spi.PotentialSchemaSource; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceRegistration; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceRegistry; -import org.opendaylight.yangtools.yang.parser.util.ASTSchemaSource; import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils; +import org.xml.sax.SAXException; +@SuppressWarnings("checkstyle:IllegalCatch") public class NetconfDeviceTest { - private static final NetconfMessage notification; + private static final NetconfMessage NOTIFICATION; - private static final ContainerNode compositeNode; + private static final ContainerNode COMPOSITE_NODE; static { try { - compositeNode = mockClass(ContainerNode.class); + COMPOSITE_NODE = mockClass(ContainerNode.class); } catch (final Exception e) { throw new RuntimeException(e); } try { - notification = new NetconfMessage(XmlUtil.readXmlToDocument(NetconfDeviceTest.class.getResourceAsStream("/notification-payload.xml"))); - } catch (Exception e) { + NOTIFICATION = new NetconfMessage(XmlUtil + .readXmlToDocument(NetconfDeviceTest.class.getResourceAsStream("/notification-payload.xml"))); + } catch (SAXException | IOException e) { throw new ExceptionInInitializerError(e); } } - private static final DOMRpcResult rpcResultC = new DefaultDOMRpcResult(compositeNode); + private static final DOMRpcResult RPC_RESULT = new DefaultDOMRpcResult(COMPOSITE_NODE); public static final String TEST_NAMESPACE = "test:namespace"; public static final String TEST_MODULE = "test-module"; public static final String TEST_REVISION = "2013-07-22"; public static final SourceIdentifier TEST_SID = - RevisionSourceIdentifier.create(TEST_MODULE, Optional.of(TEST_REVISION)); - public static final String TEST_CAPABILITY = TEST_NAMESPACE + "?module=" + TEST_MODULE + "&revision=" + TEST_REVISION; + RevisionSourceIdentifier.create(TEST_MODULE, Revision.of(TEST_REVISION)); + public static final String TEST_CAPABILITY = + TEST_NAMESPACE + "?module=" + TEST_MODULE + "&revision=" + TEST_REVISION; public static final SourceIdentifier TEST_SID2 = - RevisionSourceIdentifier.create(TEST_MODULE + "2", Optional.of(TEST_REVISION)); - public static final String TEST_CAPABILITY2 = TEST_NAMESPACE + "?module=" + TEST_MODULE + "2" + "&revision=" + TEST_REVISION; + RevisionSourceIdentifier.create(TEST_MODULE + "2", Revision.of(TEST_REVISION)); + public static final String TEST_CAPABILITY2 = + TEST_NAMESPACE + "?module=" + TEST_MODULE + "2" + "&revision=" + TEST_REVISION; - private static final NetconfDeviceSchemasResolver stateSchemasResolver = (deviceRpc, remoteSessionCapabilities, id) -> NetconfStateSchemas.EMPTY; + private static final NetconfDeviceSchemasResolver STATE_SCHEMAS_RESOLVER = + (deviceRpc, remoteSessionCapabilities, id, schemaContext) -> NetconfStateSchemas.EMPTY; @Test public void testNetconfDeviceFlawedModelFailedResolution() throws Exception { @@ -123,22 +131,24 @@ public class NetconfDeviceTest { new SchemaResolutionException("fail first", TEST_SID, new Throwable("YangTools parser fail")); doAnswer(invocation -> { if (((Collection) invocation.getArguments()[0]).size() == 2) { - return Futures.immediateFailedCheckedFuture(schemaResolutionException); + return Futures.immediateFailedFuture(schemaResolutionException); } else { - return Futures.immediateCheckedFuture(schema); + return Futures.immediateFuture(schema); } }).when(schemaFactory).createSchemaContext(anyCollectionOf(SourceIdentifier.class)); - final NetconfDeviceSchemasResolver stateSchemasResolver = (deviceRpc, remoteSessionCapabilities, id) -> { + final NetconfDeviceSchemasResolver stateSchemasResolver = (deviceRpc, remoteSessionCapabilities, id, + schemaContext) -> { final Module first = Iterables.getFirst(schema.getModules(), null); final QName qName = QName.create(first.getQNameModule(), first.getName()); final NetconfStateSchemas.RemoteYangSchema source1 = new NetconfStateSchemas.RemoteYangSchema(qName); - final NetconfStateSchemas.RemoteYangSchema source2 = new NetconfStateSchemas.RemoteYangSchema(QName.create(first.getQNameModule(), "test-module2")); + final NetconfStateSchemas.RemoteYangSchema source2 = + new NetconfStateSchemas.RemoteYangSchema(QName.create(first.getQNameModule(), "test-module2")); return new NetconfStateSchemas(Sets.newHashSet(source1, source2)); }; - final NetconfDevice.SchemaResourcesDTO schemaResourcesDTO - = new NetconfDevice.SchemaResourcesDTO(getSchemaRegistry(), schemaRepository, schemaFactory, stateSchemasResolver); + final NetconfDevice.SchemaResourcesDTO schemaResourcesDTO = new NetconfDevice + .SchemaResourcesDTO(getSchemaRegistry(), schemaRepository, schemaFactory, stateSchemasResolver); final NetconfDevice device = new NetconfDeviceBuilder() .setReconnectOnSchemasChange(true) @@ -148,10 +158,12 @@ public class NetconfDeviceTest { .setSalFacade(facade) .build(); // Monitoring supported - final NetconfSessionPreferences sessionCaps = getSessionCaps(true, Lists.newArrayList(TEST_CAPABILITY, TEST_CAPABILITY2)); + final NetconfSessionPreferences sessionCaps = + getSessionCaps(true, Lists.newArrayList(TEST_CAPABILITY, TEST_CAPABILITY2)); device.onRemoteSessionUp(sessionCaps, listener); - Mockito.verify(facade, Mockito.timeout(5000)).onDeviceConnected(any(SchemaContext.class), any(NetconfSessionPreferences.class), any(NetconfDeviceRpc.class)); + Mockito.verify(facade, Mockito.timeout(5000)).onDeviceConnected( + any(SchemaContext.class), any(NetconfSessionPreferences.class), any(NetconfDeviceRpc.class), isNull()); Mockito.verify(schemaFactory, times(2)).createSchemaContext(anyCollectionOf(SourceIdentifier.class)); } @@ -168,13 +180,12 @@ public class NetconfDeviceTest { // Make fallback attempt to fail due to empty resolved sources final SchemaResolutionException schemaResolutionException = new SchemaResolutionException("fail first", - Collections.emptyList(), HashMultimap.create()); - doReturn(Futures.immediateFailedCheckedFuture( - schemaResolutionException)) + Collections.emptyList(), HashMultimap.create()); + doReturn(Futures.immediateFailedFuture(schemaResolutionException)) .when(schemaFactory).createSchemaContext(anyCollectionOf(SourceIdentifier.class)); - final NetconfDevice.SchemaResourcesDTO schemaResourcesDTO - = new NetconfDevice.SchemaResourcesDTO(getSchemaRegistry(), schemaRepository, schemaFactory, stateSchemasResolver); + final NetconfDevice.SchemaResourcesDTO schemaResourcesDTO = new NetconfDevice + .SchemaResourcesDTO(getSchemaRegistry(), schemaRepository, schemaFactory, STATE_SCHEMAS_RESOLVER); final NetconfDevice device = new NetconfDeviceBuilder() .setReconnectOnSchemasChange(true) .setSchemaResourcesDTO(schemaResourcesDTO) @@ -202,26 +213,30 @@ public class NetconfDeviceTest { final SchemaRepository schemaRepository = getSchemaRepository(); // Make fallback attempt to fail due to empty resolved sources - final MissingSchemaSourceException schemaResolutionException = new MissingSchemaSourceException("fail first", TEST_SID); - doReturn(Futures.immediateFailedCheckedFuture(schemaResolutionException)).when(schemaRepository).getSchemaSource(eq(TEST_SID), eq(ASTSchemaSource.class)); + final MissingSchemaSourceException schemaResolutionException = + new MissingSchemaSourceException("fail first", TEST_SID); + doReturn(Futures.immediateFailedFuture(schemaResolutionException)) + .when(schemaRepository).getSchemaSource(eq(TEST_SID), eq(YangTextSchemaSource.class)); doAnswer(invocation -> { if (((Collection) invocation.getArguments()[0]).size() == 2) { - return Futures.immediateFailedCheckedFuture(schemaResolutionException); + return Futures.immediateFailedFuture(schemaResolutionException); } else { - return Futures.immediateCheckedFuture(schema); + return Futures.immediateFuture(schema); } }).when(schemaFactory).createSchemaContext(anyCollectionOf(SourceIdentifier.class)); - final NetconfDeviceSchemasResolver stateSchemasResolver = (deviceRpc, remoteSessionCapabilities, id) -> { + final NetconfDeviceSchemasResolver stateSchemasResolver = (deviceRpc, remoteSessionCapabilities, id, + schemaContext) -> { final Module first = Iterables.getFirst(schema.getModules(), null); final QName qName = QName.create(first.getQNameModule(), first.getName()); final NetconfStateSchemas.RemoteYangSchema source1 = new NetconfStateSchemas.RemoteYangSchema(qName); - final NetconfStateSchemas.RemoteYangSchema source2 = new NetconfStateSchemas.RemoteYangSchema(QName.create(first.getQNameModule(), "test-module2")); + final NetconfStateSchemas.RemoteYangSchema source2 = + new NetconfStateSchemas.RemoteYangSchema(QName.create(first.getQNameModule(), "test-module2")); return new NetconfStateSchemas(Sets.newHashSet(source1, source2)); }; - final NetconfDevice.SchemaResourcesDTO schemaResourcesDTO - = new NetconfDevice.SchemaResourcesDTO(getSchemaRegistry(), schemaRepository, schemaFactory, stateSchemasResolver); + final NetconfDevice.SchemaResourcesDTO schemaResourcesDTO = new NetconfDevice + .SchemaResourcesDTO(getSchemaRegistry(), schemaRepository, schemaFactory, stateSchemasResolver); final NetconfDevice device = new NetconfDeviceBuilder() .setReconnectOnSchemasChange(true) @@ -231,10 +246,12 @@ public class NetconfDeviceTest { .setSalFacade(facade) .build(); // Monitoring supported - final NetconfSessionPreferences sessionCaps = getSessionCaps(true, Lists.newArrayList(TEST_CAPABILITY, TEST_CAPABILITY2)); + final NetconfSessionPreferences sessionCaps = + getSessionCaps(true, Lists.newArrayList(TEST_CAPABILITY, TEST_CAPABILITY2)); device.onRemoteSessionUp(sessionCaps, listener); - Mockito.verify(facade, Mockito.timeout(5000)).onDeviceConnected(any(SchemaContext.class), any(NetconfSessionPreferences.class), any(NetconfDeviceRpc.class)); + Mockito.verify(facade, Mockito.timeout(5000)).onDeviceConnected( + any(SchemaContext.class), any(NetconfSessionPreferences.class), any(NetconfDeviceRpc.class), isNull()); Mockito.verify(schemaFactory, times(1)).createSchemaContext(anyCollectionOf(SourceIdentifier.class)); } @@ -242,14 +259,17 @@ public class NetconfDeviceTest { final SchemaSourceRegistry mock = mock(SchemaSourceRegistry.class); final SchemaSourceRegistration mockReg = mock(SchemaSourceRegistration.class); doNothing().when(mockReg).close(); - doReturn(mockReg).when(mock).registerSchemaSource(any(org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceProvider.class), any(PotentialSchemaSource.class)); + doReturn(mockReg).when(mock).registerSchemaSource( + any(org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceProvider.class), + any(PotentialSchemaSource.class)); return mock; } private static SchemaRepository getSchemaRepository() { final SchemaRepository mock = mock(SchemaRepository.class); final SchemaSourceRepresentation mockRep = mock(SchemaSourceRepresentation.class); - doReturn(Futures.immediateCheckedFuture(mockRep)).when(mock).getSchemaSource(any(SourceIdentifier.class), eq(ASTSchemaSource.class)); + doReturn(Futures.immediateFuture(mockRep)) + .when(mock).getSchemaSource(any(SourceIdentifier.class), eq(YangTextSchemaSource.class)); return mock; } @@ -257,9 +277,12 @@ public class NetconfDeviceTest { public void testNotificationBeforeSchema() throws Exception { final RemoteDeviceHandler facade = getFacade(); final NetconfDeviceCommunicator listener = getListener(); - - final NetconfDevice.SchemaResourcesDTO schemaResourcesDTO - = new NetconfDevice.SchemaResourcesDTO(getSchemaRegistry(), getSchemaRepository(), getSchemaFactory(), stateSchemasResolver); + final SchemaContextFactory schemaContextProviderFactory = mock(SchemaContextFactory.class); + final SettableFuture schemaFuture = SettableFuture.create(); + doReturn(schemaFuture).when(schemaContextProviderFactory).createSchemaContext(any(Collection.class)); + final NetconfDevice.SchemaResourcesDTO schemaResourcesDTO = + new NetconfDevice.SchemaResourcesDTO(getSchemaRegistry(), getSchemaRepository(), + schemaContextProviderFactory, STATE_SCHEMAS_RESOLVER); final NetconfDevice device = new NetconfDeviceBuilder() .setReconnectOnSchemasChange(true) .setSchemaResourcesDTO(schemaResourcesDTO) @@ -268,21 +291,19 @@ public class NetconfDeviceTest { .setSalFacade(facade) .build(); - device.onNotification(notification); - device.onNotification(notification); - - verify(facade, times(0)).onNotification(any(DOMNotification.class)); - final NetconfSessionPreferences sessionCaps = getSessionCaps(true, Lists.newArrayList(TEST_CAPABILITY)); + device.onRemoteSessionUp(sessionCaps, listener); - final DOMRpcService deviceRpc = mock(DOMRpcService.class); - - device.handleSalInitializationSuccess(NetconfToNotificationTest.getNotificationSchemaContext(getClass(), false), sessionCaps, deviceRpc); + device.onNotification(NOTIFICATION); + device.onNotification(NOTIFICATION); + verify(facade, times(0)).onNotification(any(DOMNotification.class)); + verify(facade, times(0)).onNotification(any(DOMNotification.class)); + schemaFuture.set(NetconfToNotificationTest.getNotificationSchemaContext(getClass(), false)); verify(facade, timeout(10000).times(2)).onNotification(any(DOMNotification.class)); - device.onNotification(notification); + device.onNotification(NOTIFICATION); verify(facade, timeout(10000).times(3)).onNotification(any(DOMNotification.class)); } @@ -293,8 +314,8 @@ public class NetconfDeviceTest { final SchemaContextFactory schemaContextProviderFactory = getSchemaFactory(); - final NetconfDevice.SchemaResourcesDTO schemaResourcesDTO - = new NetconfDevice.SchemaResourcesDTO(getSchemaRegistry(), getSchemaRepository(), schemaContextProviderFactory, stateSchemasResolver); + final NetconfDevice.SchemaResourcesDTO schemaResourcesDTO = new NetconfDevice.SchemaResourcesDTO( + getSchemaRegistry(), getSchemaRepository(), schemaContextProviderFactory, STATE_SCHEMAS_RESOLVER); final NetconfDevice device = new NetconfDeviceBuilder() .setReconnectOnSchemasChange(true) .setSchemaResourcesDTO(schemaResourcesDTO) @@ -307,7 +328,9 @@ public class NetconfDeviceTest { device.onRemoteSessionUp(sessionCaps, listener); verify(schemaContextProviderFactory, timeout(5000)).createSchemaContext(any(Collection.class)); - verify(facade, timeout(5000)).onDeviceConnected(any(SchemaContext.class), any(NetconfSessionPreferences.class), any(DOMRpcService.class)); + verify(facade, timeout(5000)).onDeviceConnected( + any(SchemaContext.class), any(NetconfSessionPreferences.class), any(DOMRpcService.class), + isNull()); device.onRemoteSessionDown(); verify(facade, timeout(5000)).onDeviceDisconnected(); @@ -315,7 +338,39 @@ public class NetconfDeviceTest { device.onRemoteSessionUp(sessionCaps, listener); verify(schemaContextProviderFactory, timeout(5000).times(2)).createSchemaContext(any(Collection.class)); - verify(facade, timeout(5000).times(2)).onDeviceConnected(any(SchemaContext.class), any(NetconfSessionPreferences.class), any(DOMRpcService.class)); + verify(facade, timeout(5000).times(2)).onDeviceConnected( + any(SchemaContext.class), any(NetconfSessionPreferences.class), any(DOMRpcService.class), + isNull()); + } + + @Test + public void testNetconfDeviceDisconnectListenerCallCancellation() throws Exception { + final RemoteDeviceHandler facade = getFacade(); + final NetconfDeviceCommunicator listener = getListener(); + final SchemaContextFactory schemaContextProviderFactory = mock(SchemaContextFactory.class); + final SettableFuture schemaFuture = SettableFuture.create(); + doReturn(schemaFuture).when(schemaContextProviderFactory).createSchemaContext(any(Collection.class)); + final NetconfDevice.SchemaResourcesDTO schemaResourcesDTO + = new NetconfDevice.SchemaResourcesDTO(getSchemaRegistry(), getSchemaRepository(), + schemaContextProviderFactory, STATE_SCHEMAS_RESOLVER); + final NetconfDevice device = new NetconfDeviceBuilder() + .setReconnectOnSchemasChange(true) + .setSchemaResourcesDTO(schemaResourcesDTO) + .setGlobalProcessingExecutor(getExecutor()) + .setId(getId()) + .setSalFacade(facade) + .build(); + final NetconfSessionPreferences sessionCaps = getSessionCaps(true, + Lists.newArrayList(TEST_NAMESPACE + "?module=" + TEST_MODULE + "&revision=" + TEST_REVISION)); + //session up, start schema resolution + device.onRemoteSessionUp(sessionCaps, listener); + //session closed + device.onRemoteSessionDown(); + verify(facade, timeout(5000)).onDeviceDisconnected(); + //complete schema setup + schemaFuture.set(getSchema()); + //facade.onDeviceDisconnected() was called, so facade.onDeviceConnected() shouldn't be called anymore + verify(facade, after(1000).never()).onDeviceConnected(any(), any(), any(), any(DOMActionService.class)); } @Test @@ -325,8 +380,8 @@ public class NetconfDeviceTest { final SchemaContextFactory schemaContextProviderFactory = getSchemaFactory(); - final NetconfDevice.SchemaResourcesDTO schemaResourcesDTO - = new NetconfDevice.SchemaResourcesDTO(getSchemaRegistry(), getSchemaRepository(), schemaContextProviderFactory, stateSchemasResolver); + final NetconfDevice.SchemaResourcesDTO schemaResourcesDTO = new NetconfDevice.SchemaResourcesDTO( + getSchemaRegistry(), getSchemaRepository(), schemaContextProviderFactory, STATE_SCHEMAS_RESOLVER); final NetconfDevice device = new NetconfDeviceBuilder() .setReconnectOnSchemasChange(true) .setSchemaResourcesDTO(schemaResourcesDTO) @@ -334,40 +389,46 @@ public class NetconfDeviceTest { .setId(getId()) .setSalFacade(facade) .build(); - NetconfDevice netconfSpy = Mockito.spy(device); + final NetconfDevice netconfSpy = Mockito.spy(device); final NetconfSessionPreferences sessionCaps = getSessionCaps(true, Lists.newArrayList(TEST_NAMESPACE + "?module=" + TEST_MODULE + "&revision=" + TEST_REVISION)); - Map moduleBasedCaps = new HashMap<>(); + final Map moduleBasedCaps = new HashMap<>(); moduleBasedCaps.putAll(sessionCaps.getModuleBasedCapsOrigin()); - moduleBasedCaps.put(QName.create("(test:qname:side:loading)test"), AvailableCapability.CapabilityOrigin.UserDefined); + moduleBasedCaps + .put(QName.create("(test:qname:side:loading)test"), AvailableCapability.CapabilityOrigin.UserDefined); netconfSpy.onRemoteSessionUp(sessionCaps.replaceModuleCaps(moduleBasedCaps), listener); - ArgumentCaptor argument = ArgumentCaptor.forClass(NetconfSessionPreferences.class); - verify(netconfSpy, timeout(5000)).handleSalInitializationSuccess(any(SchemaContext.class), (NetconfSessionPreferences) argument.capture(), any(DOMRpcService.class)); - NetconfDeviceCapabilities netconfDeviceCaps = ((NetconfSessionPreferences) argument.getValue()).getNetconfDeviceCapabilities(); + final ArgumentCaptor argument = + ArgumentCaptor.forClass(NetconfSessionPreferences.class); + verify(facade, timeout(5000)) + .onDeviceConnected(any(SchemaContext.class), argument.capture(), any(DOMRpcService.class), isNull()); + final NetconfDeviceCapabilities netconfDeviceCaps = argument.getValue().getNetconfDeviceCapabilities(); - netconfDeviceCaps.getResolvedCapabilities().forEach(entry -> assertEquals("Builded 'AvailableCapability' schemas should match input capabilities.", - moduleBasedCaps.get(QName.create(entry.getCapability())).getName(), entry.getCapabilityOrigin().getName())); + netconfDeviceCaps.getResolvedCapabilities() + .forEach(entry -> assertEquals("Builded 'AvailableCapability' schemas should match input capabilities.", + moduleBasedCaps.get( + QName.create(entry.getCapability())).getName(), entry.getCapabilityOrigin().getName())); } private static SchemaContextFactory getSchemaFactory() throws Exception { final SchemaContextFactory schemaFactory = mockClass(SchemaContextFactory.class); - doReturn(Futures.immediateCheckedFuture(getSchema())).when(schemaFactory).createSchemaContext(any(Collection.class)); + doReturn(Futures.immediateFuture(getSchema())) + .when(schemaFactory).createSchemaContext(any(Collection.class)); return schemaFactory; } - public static SchemaContext getSchema() throws Exception { - final List modelsToParse = Lists.newArrayList( - NetconfDeviceTest.class.getResourceAsStream("/schemas/test-module.yang") - ); - return YangParserTestUtils.parseYangStreams(modelsToParse); + public static SchemaContext getSchema() { + return YangParserTestUtils.parseYangResource("/schemas/test-module.yang"); } private static RemoteDeviceHandler getFacade() throws Exception { - final RemoteDeviceHandler remoteDeviceHandler = mockCloseableClass(RemoteDeviceHandler.class); - doNothing().when(remoteDeviceHandler).onDeviceConnected(any(SchemaContext.class), any(NetconfSessionPreferences.class), any(NetconfDeviceRpc.class)); + final RemoteDeviceHandler remoteDeviceHandler = + mockCloseableClass(RemoteDeviceHandler.class); + doNothing().when(remoteDeviceHandler).onDeviceConnected( + any(SchemaContext.class), any(NetconfSessionPreferences.class), any(NetconfDeviceRpc.class), + any(DOMActionService.class)); doNothing().when(remoteDeviceHandler).onDeviceDisconnected(); doNothing().when(remoteDeviceHandler).onNotification(any(DOMNotification.class)); return remoteDeviceHandler; @@ -390,24 +451,25 @@ public class NetconfDeviceTest { return new RemoteDeviceId("test-D", InetSocketAddress.createUnresolved("localhost", 22)); } - public ExecutorService getExecutor() { - return Executors.newSingleThreadExecutor(); + public ListeningExecutorService getExecutor() { + return MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor()); } public MessageTransformer getMessageTransformer() throws Exception { final MessageTransformer messageTransformer = mockClass(MessageTransformer.class); - doReturn(notification).when(messageTransformer).toRpcRequest(any(SchemaPath.class), any(NormalizedNode.class)); - doReturn(rpcResultC).when(messageTransformer).toRpcResult(any(NetconfMessage.class), any(SchemaPath.class)); - doReturn(compositeNode).when(messageTransformer).toNotification(any(NetconfMessage.class)); + doReturn(NOTIFICATION).when(messageTransformer).toRpcRequest(any(SchemaPath.class), any(NormalizedNode.class)); + doReturn(RPC_RESULT).when(messageTransformer).toRpcResult(any(NetconfMessage.class), any(SchemaPath.class)); + doReturn(COMPOSITE_NODE).when(messageTransformer).toNotification(any(NetconfMessage.class)); return messageTransformer; } - public NetconfSessionPreferences getSessionCaps(final boolean addMonitor, final Collection additionalCapabilities) { + public NetconfSessionPreferences getSessionCaps(final boolean addMonitor, + final Collection additionalCapabilities) { final ArrayList capabilities = Lists.newArrayList( XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_0, XmlNetconfConstants.URN_IETF_PARAMS_NETCONF_BASE_1_1); - if(addMonitor) { + if (addMonitor) { capabilities.add(NetconfMessageTransformUtil.IETF_NETCONF_MONITORING.getNamespace().toString()); } @@ -419,7 +481,8 @@ public class NetconfDeviceTest { public NetconfDeviceCommunicator getListener() throws Exception { final NetconfDeviceCommunicator remoteDeviceCommunicator = mockCloseableClass(NetconfDeviceCommunicator.class); -// doReturn(Futures.immediateFuture(rpcResult)).when(remoteDeviceCommunicator).sendRequest(any(NetconfMessage.class), any(QName.class)); +// doReturn(Futures.immediateFuture(rpcResult)) +// .when(remoteDeviceCommunicator).sendRequest(any(NetconfMessage.class), any(QName.class)); return remoteDeviceCommunicator; } }