X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fnetconf-it%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fit%2FNetconfITTest.java;h=e9fe857bcac571501900dc2111edc2d4567bbe80;hb=caee336f062eba4909ba53cbaccdde0714236134;hp=117735dd1c9268be8f9c39dcc0ab1e1d9c61502c;hpb=397cc9012f67596848019ca7874f3a303523b7e6;p=controller.git diff --git a/opendaylight/netconf/netconf-it/src/test/java/org/opendaylight/controller/netconf/it/NetconfITTest.java b/opendaylight/netconf/netconf-it/src/test/java/org/opendaylight/controller/netconf/it/NetconfITTest.java index 117735dd1c..e9fe857bca 100644 --- a/opendaylight/netconf/netconf-it/src/test/java/org/opendaylight/controller/netconf/it/NetconfITTest.java +++ b/opendaylight/netconf/netconf-it/src/test/java/org/opendaylight/controller/netconf/it/NetconfITTest.java @@ -8,36 +8,13 @@ package org.opendaylight.controller.netconf.it; -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertNotNull; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; -import static org.mockito.internal.util.Checks.checkNotNull; +import com.google.common.base.Optional; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import io.netty.channel.ChannelFuture; import io.netty.util.HashedWheelTimer; - -import java.io.IOException; -import java.io.InputStream; -import java.lang.management.ManagementFactory; -import java.net.InetSocketAddress; -import java.security.KeyManagementException; -import java.security.KeyStoreException; -import java.security.NoSuchAlgorithmException; -import java.security.UnrecoverableKeyException; -import java.security.cert.CertificateException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; -import java.util.Set; -import java.util.concurrent.TimeUnit; - -import javax.management.ObjectName; -import javax.net.ssl.KeyManagerFactory; -import javax.net.ssl.SSLContext; -import javax.xml.parsers.ParserConfigurationException; - import org.junit.After; +import org.junit.AfterClass; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; @@ -60,39 +37,61 @@ import org.opendaylight.controller.config.yang.test.impl.NetconfTestImplRuntimeR import org.opendaylight.controller.config.yang.test.impl.TestImplModuleFactory; import org.opendaylight.controller.netconf.api.NetconfMessage; import org.opendaylight.controller.netconf.client.NetconfClient; +import org.opendaylight.controller.netconf.client.NetconfClientDispatcher; import org.opendaylight.controller.netconf.confignetconfconnector.osgi.NetconfOperationServiceFactoryImpl; import org.opendaylight.controller.netconf.impl.DefaultCommitNotificationProducer; import org.opendaylight.controller.netconf.impl.NetconfServerDispatcher; import org.opendaylight.controller.netconf.impl.NetconfServerSessionListenerFactory; import org.opendaylight.controller.netconf.impl.NetconfServerSessionNegotiatorFactory; import org.opendaylight.controller.netconf.impl.SessionIdProvider; +import org.opendaylight.controller.netconf.impl.mapping.ExiDecoderHandler; +import org.opendaylight.controller.netconf.impl.mapping.ExiEncoderHandler; import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceFactoryListenerImpl; import org.opendaylight.controller.netconf.persist.impl.ConfigPersisterNotificationHandler; import org.opendaylight.controller.netconf.util.test.XmlFileLoader; +import org.opendaylight.controller.netconf.util.xml.ExiParameters; import org.opendaylight.controller.netconf.util.xml.XmlElement; import org.opendaylight.controller.netconf.util.xml.XmlUtil; -import org.opendaylight.protocol.util.SSLUtil; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.xml.sax.SAXException; -import com.google.common.base.Optional; -import com.google.common.collect.Lists; -import com.google.common.collect.Sets; +import javax.management.ObjectName; +import javax.net.ssl.SSLContext; +import javax.xml.parsers.ParserConfigurationException; +import java.io.IOException; +import java.io.InputStream; +import java.lang.management.ManagementFactory; +import java.net.InetSocketAddress; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Set; +import java.util.concurrent.TimeUnit; + +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertNotNull; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.internal.util.Checks.checkNotNull; public class NetconfITTest extends AbstractConfigTest { // private static final Logger logger = // LoggerFactory.getLogger(NetconfITTest.class); // + private static final InetSocketAddress tcpAddress = new InetSocketAddress("127.0.0.1", 12023); - private static final InetSocketAddress tlsAddress = new InetSocketAddress("127.0.0.1", 12024); - private NetconfMessage getConfig, getConfigCandidate, editConfig, closeSession; + private NetconfMessage getConfig, getConfigCandidate, editConfig, + closeSession, startExi, stopExi; private DefaultCommitNotificationProducer commitNot; - private NetconfServerDispatcher dispatch, dispatchS; + private NetconfServerDispatcher dispatch; + + private static NetconfClientDispatcher NETCONF_CLIENT_DISPATCHER = new NetconfClientDispatcher(Optional.absent()); @Before public void setUp() throws Exception { @@ -109,10 +108,6 @@ public class NetconfITTest extends AbstractConfigTest { dispatch = createDispatcher(Optional. absent(), factoriesListener); ChannelFuture s = dispatch.createServer(tcpAddress); s.await(); - - dispatchS = createDispatcher(Optional.of(getSslContext()), factoriesListener); - s = dispatchS.createServer(tlsAddress); - s.await(); } private NetconfServerDispatcher createDispatcher(Optional sslC, @@ -131,23 +126,21 @@ public class NetconfITTest extends AbstractConfigTest { public void tearDown() throws Exception { commitNot.close(); dispatch.close(); - dispatchS.close(); } - private SSLContext getSslContext() throws KeyStoreException, NoSuchAlgorithmException, CertificateException, - IOException, UnrecoverableKeyException, KeyManagementException { - final InputStream keyStore = getClass().getResourceAsStream("/keystore.jks"); - final InputStream trustStore = getClass().getResourceAsStream("/keystore.jks"); - SSLContext sslContext = SSLUtil.initializeSecureContext("password", keyStore, trustStore, KeyManagerFactory.getDefaultAlgorithm()); - keyStore.close(); - trustStore.close(); - return sslContext; + @AfterClass + public static void tearDownStatic() { + NETCONF_CLIENT_DISPATCHER.close(); } private void loadMessages() throws IOException, SAXException, ParserConfigurationException { this.editConfig = XmlFileLoader.xmlFileToNetconfMessage("netconfMessages/edit_config.xml"); this.getConfig = XmlFileLoader.xmlFileToNetconfMessage("netconfMessages/getConfig.xml"); this.getConfigCandidate = XmlFileLoader.xmlFileToNetconfMessage("netconfMessages/getConfig_candidate.xml"); + this.startExi = XmlFileLoader + .xmlFileToNetconfMessage("netconfMessages/startExi.xml"); + this.stopExi = XmlFileLoader + .xmlFileToNetconfMessage("netconfMessages/stopExi.xml"); this.closeSession = XmlFileLoader.xmlFileToNetconfMessage("netconfMessages/closeSession.xml"); } @@ -156,13 +149,13 @@ public class NetconfITTest extends AbstractConfigTest { return new HardcodedYangStoreService(yangDependencies); } - private Collection getBasicYangs() throws IOException { + static Collection getBasicYangs() throws IOException { List paths = Arrays.asList("/META-INF/yang/config.yang", "/META-INF/yang/rpc-context.yang", "/META-INF/yang/config-test.yang", "/META-INF/yang/config-test-impl.yang", "/META-INF/yang/ietf-inet-types.yang"); final Collection yangDependencies = new ArrayList<>(); for (String path : paths) { - final InputStream is = checkNotNull(getClass().getResourceAsStream(path), path + " not found"); + final InputStream is = checkNotNull(NetconfITTest.class.getResourceAsStream(path), path + " not found"); yangDependencies.add(is); } return yangDependencies; @@ -176,10 +169,25 @@ public class NetconfITTest extends AbstractConfigTest { new NetconfTestImplModuleFactory()); } + @Test + public void testNetconfClientDemonstration() throws Exception { + try (NetconfClient netconfClient = new NetconfClient("client", tcpAddress, 4000, NETCONF_CLIENT_DISPATCHER)) { + + Set capabilitiesFromNetconfServer = netconfClient.getCapabilities(); + long sessionId = netconfClient.getSessionId(); + + // NetconfMessage can be created : + // new NetconfMessage(XmlUtil.readXmlToDocument("")); + + NetconfMessage response = netconfClient.sendMessage(getConfig); + response.getDocument(); + } + } + @Test public void testTwoSessions() throws Exception { - try (NetconfClient netconfClient = new NetconfClient("1", tcpAddress, 4000)) { - try (NetconfClient netconfClient2 = new NetconfClient("2", tcpAddress, 4000)) { + try (NetconfClient netconfClient = new NetconfClient("1", tcpAddress, 4000, NETCONF_CLIENT_DISPATCHER)) { + try (NetconfClient netconfClient2 = new NetconfClient("2", tcpAddress, 4000, NETCONF_CLIENT_DISPATCHER)) { } } } @@ -193,13 +201,6 @@ public class NetconfITTest extends AbstractConfigTest { h.init(); } - @Test - public void testSecure() throws Exception { - try (NetconfClient netconfClient = new NetconfClient("1", tlsAddress, 4000, Optional.of(getSslContext()))) { - - } - } - @Ignore @Test public void waitingTest() throws Exception { @@ -278,6 +279,7 @@ public class NetconfITTest extends AbstractConfigTest { final Element rpcReply = message.getDocument().getDocumentElement(); final XmlElement resultElement = XmlElement.fromDomElement(rpcReply).getOnlyChildElement(); assertEquals("result", resultElement.getName()); + final String namespace = resultElement.getNamespaceAttribute(); assertEquals(expectedNamespace, namespace); } @@ -306,15 +308,44 @@ public class NetconfITTest extends AbstractConfigTest { }); } + @Test +// @Ignore + public void testStartExi() throws Exception { + try (NetconfClient netconfClient = createSession(tcpAddress, "1")) { + + + Document rpcReply = netconfClient.sendMessage(this.startExi) + .getDocument(); + assertIsOK(rpcReply); + + ExiParameters exiParams = new ExiParameters(); + exiParams.setParametersFromXmlElement(XmlElement.fromDomDocument(this.startExi.getDocument())); + + netconfClient.getClientSession().addExiDecoder(ExiDecoderHandler.HANDLER_NAME, new ExiDecoderHandler(exiParams)); + netconfClient.getClientSession().addExiEncoder(ExiEncoderHandler.HANDLER_NAME, new ExiEncoderHandler(exiParams)); + + rpcReply = netconfClient.sendMessage(this.editConfig) + .getDocument(); + assertIsOK(rpcReply); + + rpcReply = netconfClient.sendMessage(this.stopExi) + .getDocument(); + assertIsOK(rpcReply); + + } + } + @Test public void testCloseSession() throws Exception { try (NetconfClient netconfClient = createSession(tcpAddress, "1")) { // edit config - Document rpcReply = netconfClient.sendMessage(this.editConfig).getDocument(); + Document rpcReply = netconfClient.sendMessage(this.editConfig) + .getDocument(); assertIsOK(rpcReply); - rpcReply = netconfClient.sendMessage(this.closeSession).getDocument(); + rpcReply = netconfClient.sendMessage(this.closeSession) + .getDocument(); assertIsOK(rpcReply); } @@ -344,7 +375,7 @@ public class NetconfITTest extends AbstractConfigTest { } private void assertIsOK(final Document rpcReply) { - assertEquals("rpc-reply", rpcReply.getDocumentElement().getTagName()); + assertEquals("rpc-reply", rpcReply.getDocumentElement().getLocalName()); assertEquals("ok", XmlElement.fromDomDocument(rpcReply).getOnlyChildElement().getName()); } @@ -356,7 +387,7 @@ public class NetconfITTest extends AbstractConfigTest { // final InputStream resourceAsStream = // AbstractListenerTest.class.getResourceAsStream(fileName); // assertNotNull(resourceAsStream); - try (NetconfClient netconfClient = new NetconfClient("test", tcpAddress, 5000)) { + try (NetconfClient netconfClient = new NetconfClient("test", tcpAddress, 5000, NETCONF_CLIENT_DISPATCHER)) { // IOUtils.copy(resourceAsStream, netconfClient.getStream()); // netconfClient.getOutputStream().write(NetconfMessageFactory.endOfMessage); // server should not write anything back @@ -405,10 +436,8 @@ public class NetconfITTest extends AbstractConfigTest { } private NetconfClient createSession(final InetSocketAddress address, final String expected) throws Exception { - final NetconfClient netconfClient = new NetconfClient("test " + address.toString(), address, 5000); - + final NetconfClient netconfClient = new NetconfClient("test " + address.toString(), address, 5000, NETCONF_CLIENT_DISPATCHER); assertEquals(expected, Long.toString(netconfClient.getSessionId())); - return netconfClient; }