X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fconfig-netconf-connector%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fconfignetconfconnector%2FNetconfMappingTest.java;h=8b6b1aefc1971d2af9fbc7f69b4264cc79ed3327;hp=80b903b219216ca16aa6be122e9e4d2e6e899982;hb=2a4c88aa665a45c5394642cb3604603bebf8c0da;hpb=bab3649670c33b3b12a49c59fc1c5cabcbcb924e diff --git a/opendaylight/netconf/config-netconf-connector/src/test/java/org/opendaylight/controller/netconf/confignetconfconnector/NetconfMappingTest.java b/opendaylight/netconf/config-netconf-connector/src/test/java/org/opendaylight/controller/netconf/confignetconfconnector/NetconfMappingTest.java index 80b903b219..8b6b1aefc1 100644 --- a/opendaylight/netconf/config-netconf-connector/src/test/java/org/opendaylight/controller/netconf/confignetconfconnector/NetconfMappingTest.java +++ b/opendaylight/netconf/config-netconf-connector/src/test/java/org/opendaylight/controller/netconf/confignetconfconnector/NetconfMappingTest.java @@ -12,17 +12,21 @@ import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import org.apache.commons.lang3.StringUtils; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.junit.matchers.JUnitMatchers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.opendaylight.controller.config.api.ConflictingVersionException; +import org.opendaylight.controller.config.api.ValidationException; +import org.opendaylight.controller.config.api.annotations.AbstractServiceInterface; +import org.opendaylight.controller.config.api.annotations.ServiceInterfaceAnnotation; import org.opendaylight.controller.config.manager.impl.AbstractConfigTest; import org.opendaylight.controller.config.manager.impl.factoriesresolver.HardcodedModuleFactoriesResolver; import org.opendaylight.controller.config.util.ConfigTransactionJMXClient; -import org.opendaylight.controller.config.yang.store.api.YangStoreSnapshot; -import org.opendaylight.controller.config.yang.store.impl.MbeParser; import org.opendaylight.controller.config.yang.test.impl.ComplexDtoBInner; import org.opendaylight.controller.config.yang.test.impl.ComplexList; import org.opendaylight.controller.config.yang.test.impl.Deep; @@ -31,6 +35,7 @@ import org.opendaylight.controller.config.yang.test.impl.DtoAInner; import org.opendaylight.controller.config.yang.test.impl.DtoAInnerInner; import org.opendaylight.controller.config.yang.test.impl.DtoC; import org.opendaylight.controller.config.yang.test.impl.DtoD; +import org.opendaylight.controller.config.yang.test.impl.IdentityTestModuleFactory; 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.Peers; @@ -43,14 +48,26 @@ import org.opendaylight.controller.netconf.confignetconfconnector.operations.edi import org.opendaylight.controller.netconf.confignetconfconnector.operations.get.Get; import org.opendaylight.controller.netconf.confignetconfconnector.operations.getconfig.GetConfig; import org.opendaylight.controller.netconf.confignetconfconnector.operations.runtimerpc.RuntimeRpc; +import org.opendaylight.controller.netconf.confignetconfconnector.osgi.YangStoreServiceImpl; +import org.opendaylight.controller.netconf.confignetconfconnector.osgi.YangStoreSnapshot; import org.opendaylight.controller.netconf.confignetconfconnector.transactions.TransactionProvider; import org.opendaylight.controller.netconf.impl.mapping.operations.DefaultCloseSession; +import org.opendaylight.controller.netconf.impl.osgi.NetconfOperationServiceSnapshot; import org.opendaylight.controller.netconf.mapping.api.HandlingPriority; import org.opendaylight.controller.netconf.mapping.api.NetconfOperation; +import org.opendaylight.controller.netconf.mapping.api.NetconfOperationChainedExecution; import org.opendaylight.controller.netconf.util.test.XmlFileLoader; import org.opendaylight.controller.netconf.util.xml.XmlElement; import org.opendaylight.controller.netconf.util.xml.XmlNetconfConstants; import org.opendaylight.controller.netconf.util.xml.XmlUtil; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.test.types.rev131127.TestIdentity1; +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.opendaylight.yangtools.yang.model.api.Module; +import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.model.api.SchemaContextProvider; +import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; @@ -59,23 +76,29 @@ import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import javax.management.InstanceAlreadyExistsException; +import javax.management.InstanceNotFoundException; import javax.management.ObjectName; import javax.xml.parsers.ParserConfigurationException; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.math.BigInteger; +import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; @@ -83,15 +106,18 @@ import static org.mockito.Mockito.verifyNoMoreInteractions; public class NetconfMappingTest extends AbstractConfigTest { private static final Logger logger = LoggerFactory.getLogger(NetconfMappingTest.class); - private static final String INSTANCE_NAME = "test1"; + private static final String INSTANCE_NAME = "instance-from-code"; private static final String NETCONF_SESSION_ID = "foo"; private NetconfTestImplModuleFactory factory; private DepTestImplModuleFactory factory2; + private IdentityTestModuleFactory factory3; @Mock YangStoreSnapshot yangStoreSnapshot; @Mock NetconfOperationRouter netconfOperationRouter; + @Mock + NetconfOperationServiceSnapshot netconfOperationServiceSnapshot; private TransactionProvider transactionProvider; @@ -99,31 +125,161 @@ public class NetconfMappingTest extends AbstractConfigTest { public void setUp() throws Exception { MockitoAnnotations.initMocks(this); doReturn(getMbes()).when(this.yangStoreSnapshot).getModuleMXBeanEntryMap(); + doReturn(getModules()).when(this.yangStoreSnapshot).getModules(); + doNothing().when(netconfOperationServiceSnapshot).close(); + this.factory = new NetconfTestImplModuleFactory(); this.factory2 = new DepTestImplModuleFactory(); - super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(this.factory, this.factory2)); + this.factory3 = new IdentityTestModuleFactory(); + super.initConfigTransactionManagerImpl(new HardcodedModuleFactoriesResolver(this.factory, this.factory2, + this.factory3)); transactionProvider = new TransactionProvider(this.configRegistryClient, NETCONF_SESSION_ID); } - private ObjectName createModule(final String instanceName) throws InstanceAlreadyExistsException { + private ObjectName createModule(final String instanceName) throws InstanceAlreadyExistsException, InstanceNotFoundException, URISyntaxException, ValidationException, ConflictingVersionException { final ConfigTransactionJMXClient transaction = this.configRegistryClient.createTransaction(); final ObjectName on = transaction.createModule(this.factory.getImplementationName(), instanceName); final NetconfTestImplModuleMXBean mxBean = transaction.newMXBeanProxy(on, NetconfTestImplModuleMXBean.class); - setModule(mxBean, transaction); + setModule(mxBean, transaction, instanceName + "_dep"); + + int i = 1; + for (Class sInterface : factory.getImplementedServiceIntefaces()) { + ServiceInterfaceAnnotation annotation = sInterface.getAnnotation(ServiceInterfaceAnnotation.class); + transaction.saveServiceReference( + transaction.getServiceInterfaceName(annotation.namespace(), annotation.localName()), "ref_from_code_to_" + instanceName + "_" + i++, + on); + } transaction.commit(); return on; } + @Test + public void testIdentityRefs() throws Exception { + edit("netconfMessages/editConfig_identities.xml"); + + commit(); + getConfigRunning(); + } + + @Override + protected CodecRegistry getCodecRegistry() { + IdentityCodec idCodec = mock(IdentityCodec.class); + doReturn(TestIdentity1.class).when(idCodec).deserialize(TestIdentity1.QNAME); + doReturn(TestIdentity2.class).when(idCodec).deserialize(TestIdentity2.QNAME); + + CodecRegistry codecReg = super.getCodecRegistry(); + doReturn(idCodec).when(codecReg).getIdentityCodec(); + return codecReg; + } + + @Test + public void testServicePersistance() throws Exception { + createModule(INSTANCE_NAME); + + edit("netconfMessages/editConfig.xml"); + Element config = getConfigCandidate(); + assertCorrectServiceNames(config, 6, "ref_test2", "user_to_instance_from_code", "ref_dep_user", + "ref_dep_user_two", "ref_from_code_to_instance-from-code_dep_1", + "ref_from_code_to_instance-from-code_1"); + + + edit("netconfMessages/editConfig_addServiceName.xml"); + config = getConfigCandidate(); + assertCorrectServiceNames(config, 7, "ref_test2", "user_to_instance_from_code", "ref_dep_user", + "ref_dep_user_two", "ref_from_code_to_instance-from-code_dep_1", + "ref_from_code_to_instance-from-code_1", "ref_dep_user_another"); + + edit("netconfMessages/editConfig_addServiceNameOnTest.xml"); + config = getConfigCandidate(); + assertCorrectServiceNames(config, 7, "ref_test2", "user_to_instance_from_code", "ref_dep_user", + "ref_dep_user_two", "ref_from_code_to_instance-from-code_dep_1", + "ref_from_code_to_instance-from-code_1", "ref_dep_user_another"); + + commit(); + config = getConfigRunning(); + assertCorrectRefNamesForDependencies(config); + assertCorrectServiceNames(config, 7, "ref_test2", "user_to_instance_from_code", "ref_dep_user", + "ref_dep_user_two", "ref_from_code_to_instance-from-code_dep_1", + "ref_from_code_to_instance-from-code_1", "ref_dep_user_another"); + + edit("netconfMessages/editConfig_replace_default.xml"); + config = getConfigCandidate(); + assertCorrectServiceNames(config, 2, "ref_dep", "ref_dep2"); + + edit("netconfMessages/editConfig_remove.xml"); + config = getConfigCandidate(); + assertCorrectServiceNames(config, 0); + + commit(); + config = getConfigCandidate(); + assertCorrectServiceNames(config, 0); + + } + + private void assertCorrectRefNamesForDependencies(Element config) { + NodeList modulesList = config.getElementsByTagName("modules"); + assertEquals(1, modulesList.getLength()); + + Element modules = (Element) modulesList.item(0); + + String trimmedModules = XmlUtil.toString(modules).replaceAll("\\s", ""); + int defaultRefNameCount = StringUtils.countMatches(trimmedModules, "ref_dep2"); + int userRefNameCount = StringUtils.countMatches(trimmedModules, "ref_dep_user_two"); + + assertEquals(0, defaultRefNameCount); + assertEquals(2, userRefNameCount); + } + + private void assertCorrectServiceNames(Element configCandidate, int servicesSize, String... refNames) { + NodeList elements = configCandidate.getElementsByTagName("provider"); + assertEquals(servicesSize, elements.getLength()); + + NodeList servicesList = configCandidate.getElementsByTagName("services"); + assertEquals(1, servicesList.getLength()); + + Element services = (Element) servicesList.item(0); + String trimmedServices = XmlUtil.toString(services).replaceAll("\\s", ""); + + for (String s : refNames) { + assertThat(trimmedServices, JUnitMatchers.containsString(s)); + } + } + + @Test + public void testConfigNetconfUnionTypes() throws Exception { + + createModule(INSTANCE_NAME); + + edit("netconfMessages/editConfig.xml"); + commit(); + Element response = getConfigRunning(); + String trimmedResponse = XmlUtil.toString(response).replaceAll("\\s", ""); + assertContainsString(trimmedResponse, "0:0:0:0:0:0:0:1"); + assertContainsString(trimmedResponse, "456"); + + + edit("netconfMessages/editConfig_setUnions.xml"); + commit(); + response = getConfigRunning(); + + trimmedResponse = XmlUtil.toString(response).replaceAll("\\s", ""); + assertContainsString(trimmedResponse, "127.1.2.3"); + assertContainsString(trimmedResponse, "randomStringForUnion"); + + } + @Test public void testConfigNetconf() throws Exception { createModule(INSTANCE_NAME); edit("netconfMessages/editConfig.xml"); - checkBinaryLeafEdited(getConfigCandidate()); + Element configCandidate = getConfigCandidate(); + checkBinaryLeafEdited(configCandidate); + // default-operation:none, should not affect binary leaf edit("netconfMessages/editConfig_none.xml"); @@ -132,20 +288,21 @@ public class NetconfMappingTest extends AbstractConfigTest { // check after edit commit(); Element response = getConfigRunning(); - System.err.println(XmlUtil.toString(response)); + checkBinaryLeafEdited(response); checkTypeConfigAttribute(response); checkTypedefs(response); + checkTestingDeps(response); + checkEnum(response); + checkBigDecimal(response); edit("netconfMessages/editConfig_remove.xml"); commit(); response = getConfigCandidate(); final String responseFromCandidate = XmlUtil.toString(response).replaceAll("\\s+", ""); - // System.out.println(responseFromCandidate); response = getConfigRunning(); final String responseFromRunning = XmlUtil.toString(response).replaceAll("\\s+", ""); - // System.out.println(responseFromRunning); assertEquals(responseFromCandidate, responseFromRunning); final String expectedResult = XmlFileLoader.fileToString("netconfMessages/editConfig_expectedResult.xml") @@ -155,15 +312,24 @@ public class NetconfMappingTest extends AbstractConfigTest { assertEquals(expectedResult, responseFromCandidate); edit("netconfMessages/editConfig_none.xml"); - doNothing().when(netconfOperationRouter).close(); closeSession(); - verify(netconfOperationRouter).close(); + verify(netconfOperationServiceSnapshot).close(); verifyNoMoreInteractions(netconfOperationRouter); + verifyNoMoreInteractions(netconfOperationServiceSnapshot); + } + + private void checkBigDecimal(Element response) { + String responseTrimmed = XmlUtil.toString(response).replaceAll("\\s", ""); + + assertContainsString(responseTrimmed, "2.58"); + // Default + assertContainsString(responseTrimmed, "2.00"); + } private void closeSession() throws NetconfDocumentedException, ParserConfigurationException, SAXException, IOException { - DefaultCloseSession closeOp = new DefaultCloseSession(NETCONF_SESSION_ID); + DefaultCloseSession closeOp = new DefaultCloseSession(NETCONF_SESSION_ID, netconfOperationServiceSnapshot); executeOp(closeOp, "netconfMessages/closeSession.xml"); } @@ -193,6 +359,7 @@ public class NetconfMappingTest extends AbstractConfigTest { return executeOp(getConfigOp, "netconfMessages/getConfig.xml"); } + @Ignore("second edit message corrupted") @Test(expected = NetconfDocumentedException.class) public void testConfigNetconfReplaceDefaultEx() throws Exception { @@ -228,14 +395,9 @@ public class NetconfMappingTest extends AbstractConfigTest { edit("netconfMessages/namespaces/editConfig_sameAttrDifferentNamespaces.xml"); } catch (NetconfDocumentedException e) { String message = e.getMessage(); - assertThat(message, - JUnitMatchers - .containsString("Element simple-long-2 present multiple times with different namespaces")); - assertThat(message, - JUnitMatchers.containsString("urn:opendaylight:params:xml:ns:yang:controller:test:impl")); - assertThat(message, - JUnitMatchers - .containsString(XmlNetconfConstants.URN_OPENDAYLIGHT_PARAMS_XML_NS_YANG_CONTROLLER_CONFIG)); + assertContainsString(message, "Element simple-long-2 present multiple times with different namespaces"); + assertContainsString(message, "urn:opendaylight:params:xml:ns:yang:controller:test:impl"); + assertContainsString(message, XmlNetconfConstants.URN_OPENDAYLIGHT_PARAMS_XML_NS_YANG_CONTROLLER_CONFIG); throw e; } } @@ -246,9 +408,9 @@ public class NetconfMappingTest extends AbstractConfigTest { edit("netconfMessages/namespaces/editConfig_differentNamespaceTO.xml"); } catch (NetconfDocumentedException e) { String message = e.getMessage(); - assertThat(message, JUnitMatchers.containsString("Unrecognised elements")); - assertThat(message, JUnitMatchers.containsString("simple-int2")); - assertThat(message, JUnitMatchers.containsString("dto_d")); + assertContainsString(message, "Unrecognised elements"); + assertContainsString(message, "simple-int2"); + assertContainsString(message, "dto_d"); throw e; } } @@ -259,13 +421,9 @@ public class NetconfMappingTest extends AbstractConfigTest { edit("netconfMessages/namespaces/editConfig_sameAttrDifferentNamespacesList.xml"); } catch (NetconfDocumentedException e) { String message = e.getMessage(); - assertThat(message, - JUnitMatchers.containsString("Element binaryLeaf present multiple times with different namespaces")); - assertThat(message, - JUnitMatchers.containsString("urn:opendaylight:params:xml:ns:yang:controller:test:impl")); - assertThat(message, - JUnitMatchers - .containsString(XmlNetconfConstants.URN_OPENDAYLIGHT_PARAMS_XML_NS_YANG_CONTROLLER_CONFIG)); + assertContainsString(message, "Element binaryLeaf present multiple times with different namespaces"); + assertContainsString(message, "urn:opendaylight:params:xml:ns:yang:controller:test:impl"); + assertContainsString(message, XmlNetconfConstants.URN_OPENDAYLIGHT_PARAMS_XML_NS_YANG_CONTROLLER_CONFIG); throw e; } } @@ -302,8 +460,8 @@ public class NetconfMappingTest extends AbstractConfigTest { try { edit(file); } catch (NetconfDocumentedException e) { - assertThat(e.getMessage(), JUnitMatchers.containsString("Unrecognised elements")); - assertThat(e.getMessage(), JUnitMatchers.containsString("unknownAttribute")); + assertContainsString(e.getMessage(), "Unrecognised elements"); + assertContainsString(e.getMessage(), "unknownAttribute"); continue; } fail("Unrecognised test should throw exception " + file); @@ -349,22 +507,62 @@ public class NetconfMappingTest extends AbstractConfigTest { } private void checkBinaryLeafEdited(final Element response) { - final NodeList children = response.getElementsByTagName("binaryLeaf"); - assertEquals(3, children.getLength()); - final StringBuffer buf = new StringBuffer(); - for (int i = 0; i < 3; i++) { - final Element e = (Element) children.item(i); - buf.append(XmlElement.fromDomElement(e).getTextContent()); - } - assertEquals("810", buf.toString()); + String responseTrimmed = XmlUtil.toString(response).replaceAll("\\s", ""); + String substring = "YmluYXJ5"; + assertContainsString(responseTrimmed, substring); + substring = "ZGVmYXVsdEJpbg=="; + assertContainsString(responseTrimmed, substring); } private void checkTypedefs(final Element response) { - NodeList children = response.getElementsByTagName("extended"); - assertEquals(1, children.getLength()); + String responseTrimmed = XmlUtil.toString(response).replaceAll("\\s", ""); + + String substring = "10"; + assertContainsString(responseTrimmed, substring); + // Default + assertContainsString(responseTrimmed, + "1"); - children = response.getElementsByTagName("extended-twice"); - assertEquals(1, children.getLength()); + assertContainsString(responseTrimmed, + "20"); + // Default + assertContainsString(responseTrimmed, + "2"); + + assertContainsString(responseTrimmed, + "TWO"); + // Default + assertContainsString(responseTrimmed, + "ONE"); + } + + private void assertContainsString(String string, String substring) { + assertThat(string, JUnitMatchers.containsString(substring)); + } + + private void checkEnum(final Element response) { + XmlElement modulesElement = XmlElement.fromDomElement(response).getOnlyChildElement("data") + .getOnlyChildElement("modules"); + + String enumName = "extended-enum"; + String enumContent = "TWO"; + + for (XmlElement moduleElement : modulesElement.getChildElements("module")) { + String name = moduleElement.getOnlyChildElement("name").getTextContent(); + if(name.equals(INSTANCE_NAME)) { + XmlElement enumAttr = moduleElement.getOnlyChildElement(enumName); + assertEquals(enumContent, enumAttr.getTextContent()); + + return; + } + } + + fail("Enum attribute " + enumName + ":" + enumContent + " not present in " + XmlUtil.toString(response)); + } + + private void checkTestingDeps(Element response) { + int testingDepsSize = response.getElementsByTagName("testing-deps").getLength(); + assertEquals(2, testingDepsSize); } private void checkTypeConfigAttribute(Element response) { @@ -372,27 +570,55 @@ public class NetconfMappingTest extends AbstractConfigTest { XmlElement modulesElement = XmlElement.fromDomElement(response).getOnlyChildElement("data") .getOnlyChildElement("modules"); - XmlElement configAttributeType = null; + List expectedValues = Lists.newArrayList("default-string", "configAttributeType"); + Set configAttributeType = Sets.newHashSet(); + for (XmlElement moduleElement : modulesElement.getChildElements("module")) { for (XmlElement type : moduleElement.getChildElements("type")) { if (type.getAttribute(XmlUtil.XMLNS_ATTRIBUTE_KEY).equals("") == false) { - configAttributeType = type; + configAttributeType.add(type.getTextContent()); } } } - assertEquals("configAttributeType", configAttributeType.getTextContent()); + for (String expectedValue : expectedValues) { + assertTrue(configAttributeType.contains(expectedValue)); + } } private Map> getMbes() throws Exception { final List yangDependencies = getYangs(); final Map> mBeanEntries = Maps.newHashMap(); - mBeanEntries.putAll(new MbeParser().parseYangFiles(yangDependencies).getModuleMXBeanEntryMap()); + + YangParserImpl yangParser = new YangParserImpl(); + final SchemaContext schemaContext = yangParser.resolveSchemaContext(new HashSet<>(yangParser.parseYangModelsFromStreamsMapped(yangDependencies).values())); + YangStoreServiceImpl yangStoreService = new YangStoreServiceImpl(new SchemaContextProvider() { + @Override + public SchemaContext getSchemaContext() { + return schemaContext ; + } + }); + mBeanEntries.putAll(yangStoreService.getYangStoreSnapshot().getModuleMXBeanEntryMap()); return mBeanEntries; } + private Set getModules() throws Exception { + SchemaContext resolveSchemaContext = getSchemaContext(); + return resolveSchemaContext.getModules(); + } + + private SchemaContext getSchemaContext() throws Exception { + final List yangDependencies = getYangs(); + YangParserImpl parser = new YangParserImpl(); + + Set allYangModules = parser.parseYangModelsFromStreams(yangDependencies); + + return parser.resolveSchemaContext(Sets + .newHashSet(allYangModules)); + } + @Test public void testConfigNetconfRuntime() throws Exception { @@ -423,21 +649,21 @@ public class NetconfMappingTest extends AbstractConfigTest { RuntimeRpc netconf = new RuntimeRpc(yangStoreSnapshot, configRegistryClient, NETCONF_SESSION_ID); response = executeOp(netconf, "netconfMessages/rpc.xml"); - assertThat(XmlUtil.toString(response), JUnitMatchers.containsString("testarg1".toUpperCase())); + assertContainsString(XmlUtil.toString(response), "testarg1".toUpperCase()); response = executeOp(netconf, "netconfMessages/rpcInner.xml"); - assertThat(XmlUtil.toString(response), JUnitMatchers.containsString("ok")); + assertContainsString(XmlUtil.toString(response), "ok"); response = executeOp(netconf, "netconfMessages/rpcInnerInner.xml"); - assertThat(XmlUtil.toString(response), JUnitMatchers.containsString("true")); + assertContainsString(XmlUtil.toString(response), "true"); response = executeOp(netconf, "netconfMessages/rpcInnerInner_complex_output.xml"); - assertThat(XmlUtil.toString(response), JUnitMatchers.containsString("1")); - assertThat(XmlUtil.toString(response), JUnitMatchers.containsString("2")); + assertContainsString(XmlUtil.toString(response), "1"); + assertContainsString(XmlUtil.toString(response), "2"); } private Element get() throws NetconfDocumentedException, ParserConfigurationException, SAXException, IOException { - Get getOp = new Get(yangStoreSnapshot, configRegistryClient, NETCONF_SESSION_ID); + Get getOp = new Get(yangStoreSnapshot, configRegistryClient, NETCONF_SESSION_ID, transactionProvider); return executeOp(getOp, "netconfMessages/get.xml"); } @@ -455,7 +681,7 @@ public class NetconfMappingTest extends AbstractConfigTest { Preconditions.checkState(priority != HandlingPriority.CANNOT_HANDLE); - final Document response = op.handle(request, netconfOperationRouter); + final Document response = op.handle(request, NetconfOperationChainedExecution.EXECUTION_TERMINATION_POINT); logger.debug("Got response\n{}", XmlUtil.toString(response)); return response.getDocumentElement(); } @@ -473,8 +699,8 @@ public class NetconfMappingTest extends AbstractConfigTest { return Lists.newArrayList(yangDependencies); } - private void setModule(final NetconfTestImplModuleMXBean mxBean, final ConfigTransactionJMXClient transaction) - throws InstanceAlreadyExistsException { + private void setModule(final NetconfTestImplModuleMXBean mxBean, final ConfigTransactionJMXClient transaction, String depName) + throws InstanceAlreadyExistsException, InstanceNotFoundException { mxBean.setSimpleInt((long) 44); mxBean.setBinaryLeaf(new byte[] { 8, 7, 9 }); final DtoD dtob = getDtoD(); @@ -504,7 +730,15 @@ public class NetconfMappingTest extends AbstractConfigTest { mxBean.setComplexList(Lists. newArrayList()); mxBean.setSimpleList(Lists. newArrayList()); - final ObjectName testingDepOn = transaction.createModule(this.factory2.getImplementationName(), "dep"); + final ObjectName testingDepOn = transaction.createModule(this.factory2.getImplementationName(), depName); + int i = 1; + for (Class sInterface : factory2.getImplementedServiceIntefaces()) { + ServiceInterfaceAnnotation annotation = sInterface.getAnnotation(ServiceInterfaceAnnotation.class); + transaction.saveServiceReference( + transaction.getServiceInterfaceName(annotation.namespace(), annotation.localName()), "ref_from_code_to_" + depName + "_" + i++, + testingDepOn); + + } mxBean.setTestingDep(testingDepOn); }