X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fnetconf-it%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fit%2FNetconfITTest.java;h=8e69e6a345ffef868c2ed4e5bc454c440dc989a4;hp=fd43f67c056407c15dc0692d938b4fad7c30586b;hb=17d82f582a6bc13c78be3b19954ff8c021180e93;hpb=d42fc809d1d74240b7933d74cdbaff428773ad26 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 fd43f67c05..8e69e6a345 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,7 +8,6 @@ package org.opendaylight.controller.netconf.it; -import static java.util.Collections.emptyList; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; @@ -17,6 +16,11 @@ import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; +import com.google.common.base.Function; +import com.google.common.base.Throwables; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import io.netty.channel.ChannelFuture; import java.io.IOException; import java.io.InputStream; import java.lang.management.ManagementFactory; @@ -25,24 +29,26 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeoutException; - import javax.management.ObjectName; import javax.xml.parsers.ParserConfigurationException; - import org.junit.After; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.junit.matchers.JUnitMatchers; +import org.opendaylight.controller.config.api.jmx.ObjectNameUtil; import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver; import org.opendaylight.controller.config.spi.ModuleFactory; import org.opendaylight.controller.config.util.ConfigTransactionJMXClient; import org.opendaylight.controller.config.yang.test.impl.DepTestImplModuleFactory; import org.opendaylight.controller.config.yang.test.impl.IdentityTestModuleFactory; +import org.opendaylight.controller.config.yang.test.impl.MultipleDependenciesModuleFactory; +import org.opendaylight.controller.config.yang.test.impl.MultipleDependenciesModuleMXBean; import org.opendaylight.controller.config.yang.test.impl.NetconfTestImplModuleFactory; import org.opendaylight.controller.config.yang.test.impl.NetconfTestImplModuleMXBean; import org.opendaylight.controller.config.yang.test.impl.TestImplModuleFactory; @@ -66,49 +72,41 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controll import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.test.types.rev131127.TestIdentity2; import org.opendaylight.yangtools.yang.data.impl.codec.CodecRegistry; import org.opendaylight.yangtools.yang.data.impl.codec.IdentityCodec; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; 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.Throwables; -import com.google.common.collect.Lists; -import com.google.common.collect.Sets; -import io.netty.channel.ChannelFuture; - public class NetconfITTest extends AbstractNetconfConfigTest { // TODO refactor, pull common code up to AbstractNetconfITTest - 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 sshAddress = new InetSocketAddress("127.0.0.1", 10830); - private static final String USERNAME = "netconf"; - private static final String PASSWORD = "netconf"; - private NetconfMessage getConfig, getConfigCandidate, editConfig, - closeSession, startExi, stopExi; - private DefaultCommitNotificationProducer commitNot; + + private NetconfMessage getConfig, getConfigCandidate, editConfig, closeSession; + private DefaultCommitNotificationProducer commitNotificationProducer; private NetconfServerDispatcher dispatch; private NetconfClientDispatcherImpl clientDispatcher; + static ModuleFactory[] FACTORIES = {new TestImplModuleFactory(), new DepTestImplModuleFactory(), + new NetconfTestImplModuleFactory(), new IdentityTestModuleFactory(), + new MultipleDependenciesModuleFactory()}; + @Before public void setUp() throws Exception { - super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext,getModuleFactories().toArray( - new ModuleFactory[0]))); + initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(mockedContext, + FACTORIES + )); loadMessages(); NetconfOperationServiceFactoryListenerImpl factoriesListener = new NetconfOperationServiceFactoryListenerImpl(); factoriesListener.onAddNetconfOperationServiceFactory(new NetconfOperationServiceFactoryImpl(getYangStore())); - - commitNot = new DefaultCommitNotificationProducer(ManagementFactory.getPlatformMBeanServer()); + commitNotificationProducer = new DefaultCommitNotificationProducer(ManagementFactory.getPlatformMBeanServer()); dispatch = createDispatcher(factoriesListener); ChannelFuture s = dispatch.createServer(tcpAddress); @@ -118,7 +116,7 @@ public class NetconfITTest extends AbstractNetconfConfigTest { } private NetconfServerDispatcher createDispatcher(NetconfOperationServiceFactoryListenerImpl factoriesListener) { - return super.createDispatcher(factoriesListener, getNetconfMonitoringListenerService(), commitNot); + return super.createDispatcher(factoriesListener, getNetconfMonitoringListenerService(), commitNotificationProducer); } static NetconfMonitoringServiceImpl getNetconfMonitoringListenerService() { @@ -131,7 +129,7 @@ public class NetconfITTest extends AbstractNetconfConfigTest { @After public void tearDown() throws Exception { - commitNot.close(); + commitNotificationProducer.close(); clientDispatcher.close(); } @@ -139,10 +137,6 @@ public class NetconfITTest extends AbstractNetconfConfigTest { 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"); } @@ -166,18 +160,10 @@ public class NetconfITTest extends AbstractNetconfConfigTest { yangDependencies.add(resourceAsStream); } } - assertEquals("Some yang files were not found", emptyList(), failedToFind); + assertEquals("Some yang files were not found", Collections.emptyList(), failedToFind); return yangDependencies; } - protected List getModuleFactories() { - return getModuleFactoriesS(); - } - - static List getModuleFactoriesS() { - return Lists.newArrayList(new TestImplModuleFactory(), new DepTestImplModuleFactory(), - new NetconfTestImplModuleFactory(), new IdentityTestModuleFactory()); - } @Test public void testNetconfClientDemonstration() throws Exception { @@ -198,6 +184,7 @@ public class NetconfITTest extends AbstractNetconfConfigTest { public void testTwoSessions() throws Exception { try (TestingNetconfClient netconfClient = new TestingNetconfClient("1", clientDispatcher, getClientConfiguration(tcpAddress, 10000))) { try (TestingNetconfClient netconfClient2 = new TestingNetconfClient("2", clientDispatcher, getClientConfiguration(tcpAddress, 10000))) { + assertNotNull(netconfClient2.getCapabilities()); } } } @@ -406,4 +393,66 @@ public class NetconfITTest extends AbstractNetconfConfigTest { doReturn(codec).when(ret).getIdentityCodec(); return ret; } + + + @Test + public void testMultipleDependencies() throws Exception { + // push first xml, should add parent and d1,d2 dependencies + try (TestingNetconfClient netconfClient = createSession(tcpAddress, "1")) { + Document rpcReply = netconfClient.sendMessage( + XmlFileLoader.xmlFileToNetconfMessage("netconfMessages/editConfig_merge_multiple-deps1.xml")) + .getDocument(); + assertIsOK(rpcReply); + commit(netconfClient); + } + // verify that parent.getTestingDeps == d1,d2 + MultipleDependenciesModuleMXBean parentProxy = configRegistryClient.newMXBeanProxy( + configRegistryClient.lookupConfigBean(MultipleDependenciesModuleFactory.NAME, "parent"), + MultipleDependenciesModuleMXBean.class); + { + List testingDeps = parentProxy.getTestingDeps(); + assertEquals(2, testingDeps.size()); + Set actualRefs = getServiceReferences(testingDeps); + assertEquals(Sets.newHashSet("ref_d1", "ref_d2"), actualRefs); + } + + // push second xml, should add d3 to parent's dependencies + mergeD3(parentProxy); + // push second xml again, to test that d3 is not added again + mergeD3(parentProxy); + } + + public void mergeD3(MultipleDependenciesModuleMXBean parentProxy) throws Exception { + try (TestingNetconfClient netconfClient = new TestingNetconfClient( + "test " + tcpAddress.toString(), clientDispatcher, getClientConfiguration(tcpAddress, 5000))) { + + Document rpcReply = netconfClient.sendMessage( + XmlFileLoader.xmlFileToNetconfMessage("netconfMessages/editConfig_merge_multiple-deps2.xml")) + .getDocument(); + assertIsOK(rpcReply); + commit(netconfClient); + } + { + List testingDeps = parentProxy.getTestingDeps(); + assertEquals(3, testingDeps.size()); + Set actualRefs = getServiceReferences(testingDeps); + assertEquals(Sets.newHashSet("ref_d1", "ref_d2", "ref_d3"), actualRefs); + } + } + + public Set getServiceReferences(List testingDeps) { + return new HashSet<>(Lists.transform(testingDeps, new Function() { + @Override + public String apply(ObjectName input) { + return ObjectNameUtil.getReferenceName(input); + } + })); + } + + public void commit(TestingNetconfClient netconfClient) throws Exception { + Document rpcReply; + rpcReply = netconfClient.sendMessage(XmlFileLoader.xmlFileToNetconfMessage("netconfMessages/commit.xml")) + .getDocument(); + assertIsOK(rpcReply); + } }