From: Tomas Cere Date: Thu, 12 Feb 2015 15:59:49 +0000 (+0100) Subject: Unit Test for md-sal netconf northbound mapping. X-Git-Tag: release/lithium~452^2 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=64b94e7c2026f0e2b3fc74094db94f854f47ba90 Unit Test for md-sal netconf northbound mapping. Tests mapping of netconf operations and write/read into datastore. Change-Id: I08aa59d8dfddb94eeddf8e37c8c86290f4a44ef1 Signed-off-by: Tomas Cere --- diff --git a/opendaylight/netconf/mdsal-netconf-connector/pom.xml b/opendaylight/netconf/mdsal-netconf-connector/pom.xml index 8b3b196049..aace7c3cb2 100644 --- a/opendaylight/netconf/mdsal-netconf-connector/pom.xml +++ b/opendaylight/netconf/mdsal-netconf-connector/pom.xml @@ -31,8 +31,19 @@ org.opendaylight.yangtools yang-data-impl + + + org.opendaylight.yangtools + object-cache-api + + + - + + org.opendaylight.yangtools + object-cache-noop + + org.opendaylight.controller sal-core-api @@ -56,10 +67,35 @@ org.opendaylight.controller config-util + + org.opendaylight.controller + config-api + org.opendaylight.yangtools yang-data-operations + + org.opendaylight.controller + sal-broker-impl + test + + + org.opendaylight.controller + sal-distributed-datastore + test + + + org.opendaylight.controller + netconf-util + test-jar + test + + + xmlunit + xmlunit + test + diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/java/org/opendaylight/controller/netconf/mdsal/connector/ops/NetconfMDSalMappingTest.java b/opendaylight/netconf/mdsal-netconf-connector/src/test/java/org/opendaylight/controller/netconf/mdsal/connector/ops/NetconfMDSalMappingTest.java new file mode 100644 index 0000000000..ca9948a1a0 --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/java/org/opendaylight/controller/netconf/mdsal/connector/ops/NetconfMDSalMappingTest.java @@ -0,0 +1,443 @@ +/* + * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * 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.controller.netconf.mdsal.connector.ops; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import com.google.common.base.Preconditions; +import com.google.common.io.ByteSource; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.EnumMap; +import java.util.List; +import java.util.concurrent.ExecutorService; +import javax.xml.parsers.ParserConfigurationException; +import org.custommonkey.xmlunit.DetailedDiff; +import org.custommonkey.xmlunit.Diff; +import org.custommonkey.xmlunit.XMLUnit; +import org.custommonkey.xmlunit.examples.RecursiveElementNameAndTextQualifier; +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.controller.cluster.datastore.ConcurrentDOMDataBroker; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStoreFactory; +import org.opendaylight.controller.netconf.api.NetconfDocumentedException; +import org.opendaylight.controller.netconf.api.NetconfDocumentedException.ErrorSeverity; +import org.opendaylight.controller.netconf.api.NetconfDocumentedException.ErrorTag; +import org.opendaylight.controller.netconf.api.NetconfDocumentedException.ErrorType; +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.mdsal.connector.CurrentSchemaContext; +import org.opendaylight.controller.netconf.mdsal.connector.TransactionProvider; +import org.opendaylight.controller.netconf.mdsal.connector.ops.get.Get; +import org.opendaylight.controller.netconf.mdsal.connector.ops.get.GetConfig; +import org.opendaylight.controller.netconf.util.test.XmlFileLoader; +import org.opendaylight.controller.netconf.util.xml.XmlUtil; +import org.opendaylight.controller.sal.core.api.model.SchemaService; +import org.opendaylight.controller.sal.core.spi.data.DOMStore; +import org.opendaylight.yangtools.concepts.ListenerRegistration; +import org.opendaylight.yangtools.util.concurrent.SpecialExecutors; +import org.opendaylight.yangtools.yang.model.api.Module; +import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; +import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException; +import org.opendaylight.yangtools.yang.parser.builder.impl.BuilderUtils; +import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; + +public class NetconfMDSalMappingTest { + + private static final Logger LOG = LoggerFactory.getLogger(NetconfMDSalMappingTest.class); + + private static final String RPC_REPLY_ELEMENT = "rpc-reply"; + private static final String DATA_ELEMENT = "data"; + + private static Document RPC_REPLY_OK = null; + + static { + try { + RPC_REPLY_OK = XmlFileLoader.xmlFileToDocument("messages/mapping/rpc-reply_ok.xml"); + } catch (Exception e) { + LOG.debug("unable to load rpc reply ok.", e); + RPC_REPLY_OK = XmlUtil.newDocument(); + } + } + + private CurrentSchemaContext currentSchemaContext = null; + private SchemaContext schemaContext = null; + private String sessionIdForReporting = "netconf-test-session1"; + + private TransactionProvider transactionProvider = null; + + + @Before + public void setUp() throws Exception { + + XMLUnit.setIgnoreWhitespace(true); + XMLUnit.setIgnoreAttributeOrder(true); + + this.schemaContext = parseSchemas(getYangSchemas()); + schemaContext.getModules(); + SchemaService schemaService = createSchemaService(); + + final DOMStore operStore = InMemoryDOMDataStoreFactory.create("DOM-OPER", schemaService); + final DOMStore configStore = InMemoryDOMDataStoreFactory.create("DOM-CFG", schemaService); + + final EnumMap datastores = new EnumMap<>(LogicalDatastoreType.class); + datastores.put(LogicalDatastoreType.CONFIGURATION, configStore); + datastores.put(LogicalDatastoreType.OPERATIONAL, operStore); + + ExecutorService listenableFutureExecutor = SpecialExecutors.newBlockingBoundedCachedThreadPool( + 16, 16, "CommitFutures"); + + ConcurrentDOMDataBroker cdb = new ConcurrentDOMDataBroker(datastores, listenableFutureExecutor); + this.transactionProvider = new TransactionProvider(cdb, sessionIdForReporting); + this.currentSchemaContext = new CurrentSchemaContext(schemaService); + + } + + @Test + public void testEmptyDatastore() throws Exception { + + Document response = getConfigRunning(); + assertEmptyDatastore(response); + + response = getConfigCandidate(); + assertEmptyDatastore(response); + + response = get(); + assertEmptyDatastore(response); + + } + + @Test + public void testEditRunning() throws Exception { + + try { + edit("messages/mapping/editConfig_running.xml"); + fail("Should have failed - edit config on running datastore is not supported"); + } catch (NetconfDocumentedException e) { + assertTrue(e.getErrorSeverity() == ErrorSeverity.error); + assertTrue(e.getErrorTag() == ErrorTag.operation_not_supported); + assertTrue(e.getErrorType() == ErrorType.protocol); + } + + } + + @Test + public void testCandidateTransaction() throws Exception { + + verifyResponse(edit("messages/mapping/editConfig_merge_n1.xml"), RPC_REPLY_OK); + verifyResponse(getConfigCandidate(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfig_merge_n1_control.xml")); + assertEmptyDatastore(getConfigRunning()); + + verifyResponse(discardChanges(), RPC_REPLY_OK); + assertEmptyDatastore(getConfigCandidate()); + + } + + @Test + public void testEditWithCommit() throws Exception { + + verifyResponse(edit("messages/mapping/editConfig_merge_n1.xml"), RPC_REPLY_OK); + verifyResponse(getConfigCandidate(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfig_merge_n1_control.xml")); + + verifyResponse(commit(), RPC_REPLY_OK); + verifyResponse(getConfigRunning(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfig_merge_n1_control.xml")); + + deleteDatastore(); + + } + + @Test + public void testMultipleEditsWithMerge() throws Exception { + + verifyResponse(edit("messages/mapping/editConfig_merge_multiple_1.xml"), RPC_REPLY_OK); + verifyResponse(getConfigCandidate(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfig_merge_multiple_control_1.xml")); + verifyResponse(edit("messages/mapping/editConfig_merge_single_1.xml"), RPC_REPLY_OK); + verifyResponse(getConfigCandidate(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfig_merge_multiple_control_2.xml")); + assertEmptyDatastore(getConfigRunning()); + + verifyResponse(commit(), RPC_REPLY_OK); + verifyResponse(getConfigRunning(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfig_merge_multiple_control_2.xml")); + + deleteDatastore(); + + } + + @Test + public void testMoreComplexEditConfigs() throws Exception { + + verifyResponse(edit("messages/mapping/editConfig_merge_multiple_1.xml"), RPC_REPLY_OK); + verifyResponse(edit("messages/mapping/editConfig_merge_single_1.xml"), RPC_REPLY_OK); + + verifyResponse(edit("messages/mapping/editConfig_merge_multiple_2.xml"), RPC_REPLY_OK); + verifyResponse(getConfigCandidate(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfig_merge_multiple_after_more_complex_merge.xml")); + + verifyResponse(edit("messages/mapping/editConfig_merge_multiple_3.xml"), RPC_REPLY_OK); + verifyResponse(getConfigCandidate(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfig_merge_multiple_after_more_complex_merge_2.xml")); + + verifyResponse(edit("messages/mapping/editConfig_merge_multiple_4_replace.xml"), RPC_REPLY_OK); + verifyResponse(getConfigCandidate(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfig_merge_multiple_after_replace.xml")); + verifyResponse(commit(), RPC_REPLY_OK); + + verifyResponse(getConfigRunning(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfig_merge_multiple_after_replace.xml")); + + verifyResponse(edit("messages/mapping/editConfig_replace_default.xml"), RPC_REPLY_OK); + verifyResponse(getConfigCandidate(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfig_replace_default_control.xml")); + verifyResponse(commit(), RPC_REPLY_OK); + + verifyResponse(getConfigRunning(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfig_replace_default_control.xml")); + + deleteDatastore(); + + } + + @Test + public void testLock() throws Exception { + + verifyResponse(lockCandidate(), RPC_REPLY_OK); + + try { + lock(); + fail("Should have failed - locking of running datastore is not supported"); + } catch (NetconfDocumentedException e) { + assertTrue(e.getErrorSeverity() == ErrorSeverity.error); + assertTrue(e.getErrorTag() == ErrorTag.operation_not_supported); + assertTrue(e.getErrorType() == ErrorType.application); + } + } + + @Test + public void testUnlock() throws Exception { + + verifyResponse(unlockCandidate(), RPC_REPLY_OK); + + try { + unlock(); + fail("Should have failed - unlocking of running datastore is not supported"); + } catch (NetconfDocumentedException e) { + assertTrue(e.getErrorSeverity() == ErrorSeverity.error); + assertTrue(e.getErrorTag() == ErrorTag.operation_not_supported); + assertTrue(e.getErrorType() == ErrorType.application); + } + } + + @Test + public void testEditWithCreate() throws Exception { + + verifyResponse(edit("messages/mapping/editConfig_create.xml"), RPC_REPLY_OK); + verifyResponse(getConfigCandidate(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfig_merge_n1_control.xml")); + + try { + edit("messages/mapping/editConfig_create.xml"); + fail("Create should have failed - data already exists"); + } catch (NetconfDocumentedException e) { + assertTrue(e.getErrorSeverity() == ErrorSeverity.error); + assertTrue(e.getErrorTag() == ErrorTag.data_exists); + assertTrue(e.getErrorType() == ErrorType.protocol); + } + + verifyResponse(discardChanges(), RPC_REPLY_OK); + + } + + @Test + public void testDeleteNonExisting() throws Exception { + + assertEmptyDatastore(getConfigCandidate()); + assertEmptyDatastore(getConfigRunning()); + + try { + edit("messages/mapping/editConfig_delete-root.xml"); + fail("Delete should have failed - data is missing"); + } catch (NetconfDocumentedException e) { + assertTrue(e.getErrorSeverity() == ErrorSeverity.error); + assertTrue(e.getErrorTag() == ErrorTag.data_missing); + assertTrue(e.getErrorType() == ErrorType.protocol); + } + + } + + @Test + public void testEditMissingDefaultOperation() throws Exception { + + verifyResponse(edit("messages/mapping/editConfig_merge_missing_default-operation_1.xml"), RPC_REPLY_OK); + verifyResponse(edit("messages/mapping/editConfig_merge_missing_default-operation_2.xml"), RPC_REPLY_OK); + verifyResponse(getConfigCandidate(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfig_merge_missing_default-operation_control.xml")); + + verifyResponse(commit(), RPC_REPLY_OK); + verifyResponse(getConfigRunning(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfig_merge_missing_default-operation_control.xml")); + + deleteDatastore(); + } + + private void deleteDatastore() throws Exception{ + verifyResponse(edit("messages/mapping/editConfig_delete-root.xml"), RPC_REPLY_OK); + assertEmptyDatastore(getConfigCandidate()); + + verifyResponse(commit(), RPC_REPLY_OK); + assertEmptyDatastore(getConfigRunning()); + } + + private void verifyResponse(Document response, Document template) { + DetailedDiff dd = new DetailedDiff(new Diff(response, template)); + dd.overrideElementQualifier(new RecursiveElementNameAndTextQualifier()); + assertTrue(dd.similar()); + } + + private void assertEmptyDatastore(Document response) { + + NodeList nodes = response.getChildNodes(); + assertTrue(nodes.getLength() == 1); + + assertEquals(nodes.item(0).getLocalName(),RPC_REPLY_ELEMENT); + + NodeList replyNodes = nodes.item(0).getChildNodes(); + assertTrue(replyNodes.getLength() == 1); + + Node dataNode = replyNodes.item(0); + assertEquals(dataNode.getLocalName(), DATA_ELEMENT); + assertFalse(dataNode.hasChildNodes()); + + } + + private Document commit() throws NetconfDocumentedException, ParserConfigurationException, SAXException, IOException { + Commit commit = new Commit(sessionIdForReporting, transactionProvider); + return executeOperation(commit, "messages/mapping/commit.xml"); + } + + private Document discardChanges() throws NetconfDocumentedException, ParserConfigurationException, SAXException, IOException { + DiscardChanges discardOp = new DiscardChanges(sessionIdForReporting, transactionProvider); + return executeOperation(discardOp, "messages/mapping/discardChanges.xml"); + } + + private Document edit(String resource) throws NetconfDocumentedException, ParserConfigurationException, SAXException, IOException { + EditConfig editConfig = new EditConfig(sessionIdForReporting, currentSchemaContext, transactionProvider); + return executeOperation(editConfig, resource); + } + + private Document get() throws NetconfDocumentedException, ParserConfigurationException, SAXException, IOException { + Get get = new Get(sessionIdForReporting, currentSchemaContext, transactionProvider); + return executeOperation(get, "messages/mapping/get.xml"); + } + + private Document getConfigRunning() throws NetconfDocumentedException, ParserConfigurationException, SAXException, IOException { + GetConfig getConfig = new GetConfig(sessionIdForReporting, currentSchemaContext, transactionProvider); + return executeOperation(getConfig, "messages/mapping/getConfig.xml"); + } + + private Document getConfigCandidate() throws NetconfDocumentedException, ParserConfigurationException, SAXException, IOException { + GetConfig getConfig = new GetConfig(sessionIdForReporting, currentSchemaContext, transactionProvider); + return executeOperation(getConfig, "messages/mapping/getConfig_candidate.xml"); + } + + private Document lock() throws NetconfDocumentedException, ParserConfigurationException, SAXException, IOException { + Lock lock = new Lock(sessionIdForReporting); + return executeOperation(lock, "messages/mapping/lock.xml"); + } + + private Document unlock() throws NetconfDocumentedException, ParserConfigurationException, SAXException, IOException { + Unlock unlock = new Unlock(sessionIdForReporting); + return executeOperation(unlock, "messages/mapping/unlock.xml"); + } + + private Document lockCandidate() throws NetconfDocumentedException, ParserConfigurationException, SAXException, IOException { + Lock lock = new Lock(sessionIdForReporting); + return executeOperation(lock, "messages/mapping/lock_candidate.xml"); + } + + private Document unlockCandidate() throws NetconfDocumentedException, ParserConfigurationException, SAXException, IOException { + Unlock unlock = new Unlock(sessionIdForReporting); + return executeOperation(unlock, "messages/mapping/unlock_candidate.xml"); + } + + private Document executeOperation(NetconfOperation op, String filename) throws ParserConfigurationException, SAXException, IOException, NetconfDocumentedException { + final Document request = XmlFileLoader.xmlFileToDocument(filename); + + HandlingPriority priority = op.canHandle(request); + Preconditions.checkState(priority != HandlingPriority.CANNOT_HANDLE); + + final Document response = op.handle(request, NetconfOperationChainedExecution.EXECUTION_TERMINATION_POINT); + + LOG.debug("Got response {}" , response); + + return response; + } + + private Collection getYangSchemas() { + final List schemaPaths = Arrays.asList("/META-INF/yang/config.yang", "/yang/mdsal-netconf-mapping-test.yang"); + final List schemas = new ArrayList<>(); + + for (String schemaPath : schemaPaths) { + InputStream resourceAsStream = getClass().getResourceAsStream(schemaPath); + schemas.add(resourceAsStream); + } + + return schemas; + } + + private SchemaContext parseSchemas(Collection schemas) throws IOException, YangSyntaxErrorException { + final YangParserImpl parser = new YangParserImpl(); + Collection sources = BuilderUtils.streamsToByteSources(schemas); + return parser.parseSources(sources); + } + + private SchemaService createSchemaService() { + return new SchemaService() { + + @Override + public void addModule(Module module) { + } + + @Override + public void removeModule(Module module) { + + } + + @Override + public SchemaContext getSessionContext() { + return schemaContext; + } + + @Override + public SchemaContext getGlobalContext() { + return schemaContext; + } + + @Override + public ListenerRegistration registerSchemaContextListener(final SchemaContextListener listener) { + listener.onGlobalContextUpdated(getGlobalContext()); + return new ListenerRegistration() { + @Override + public void close() { + + } + + @Override + public SchemaContextListener getInstance() { + return listener; + } + }; + } + }; + } +} \ No newline at end of file diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/commit.xml b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/commit.xml new file mode 100644 index 0000000000..615b4d710d --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/commit.xml @@ -0,0 +1,11 @@ + + + + + diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/discardChanges.xml b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/discardChanges.xml new file mode 100644 index 0000000000..d8590915c1 --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/discardChanges.xml @@ -0,0 +1,11 @@ + + + + + diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_create.xml b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_create.xml new file mode 100644 index 0000000000..0f58c086fa --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_create.xml @@ -0,0 +1,27 @@ + + + + + + + + + set + + none + + + + node1-put + put content + + + + + \ No newline at end of file diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_delete-root.xml b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_delete-root.xml new file mode 100644 index 0000000000..8f58768c89 --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_delete-root.xml @@ -0,0 +1,23 @@ + + + + + + + + + set + + none + + + + + + \ No newline at end of file diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_missing_default-operation_1.xml b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_missing_default-operation_1.xml new file mode 100644 index 0000000000..f4cbef500d --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_missing_default-operation_1.xml @@ -0,0 +1,26 @@ + + + + + + + + + set + + + + + node1-merge + merged content + + + + + \ No newline at end of file diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_missing_default-operation_2.xml b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_missing_default-operation_2.xml new file mode 100644 index 0000000000..67561e644c --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_missing_default-operation_2.xml @@ -0,0 +1,30 @@ + + + + + + + + + set + + + + + node1-merge + updated merged content + + + node2-merge + new node + + + + + \ No newline at end of file diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_missing_default-operation_control.xml b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_missing_default-operation_control.xml new file mode 100644 index 0000000000..44275aa633 --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_missing_default-operation_control.xml @@ -0,0 +1,22 @@ + + + + + + + node1-merge + updated merged content + + + node2-merge + new node + + + + \ No newline at end of file diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_multiple_1.xml b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_multiple_1.xml new file mode 100644 index 0000000000..d117e9e2dd --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_multiple_1.xml @@ -0,0 +1,31 @@ + + + + + + + + + set + + merge + + + + node1-merge + merged content node 1 + + + node2-merge + merged content node 2 + + + + + \ No newline at end of file diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_multiple_2.xml b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_multiple_2.xml new file mode 100644 index 0000000000..2cee889c2d --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_multiple_2.xml @@ -0,0 +1,39 @@ + + + + + + + + + set + + merge + + + + node1-merge + overwritten old content node1 + + + node2-merge + overwritten old content node2 + + + new-node4 + new node4 content + + + node3-merge + merged content node 3 + + + + + \ No newline at end of file diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_multiple_3.xml b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_multiple_3.xml new file mode 100644 index 0000000000..d6f18ab7ba --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_multiple_3.xml @@ -0,0 +1,39 @@ + + + + + + + + + set + + merge + + + + node1-merge + overwritten old content node1 + + + node2-merge + overwritten old content node2 + + + new-node5 + new node5 content + + + new-node6 + new node6 content + + + + + \ No newline at end of file diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_multiple_4_replace.xml b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_multiple_4_replace.xml new file mode 100644 index 0000000000..55101fafc5 --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_multiple_4_replace.xml @@ -0,0 +1,27 @@ + + + + + + + + + set + + merge + + + + new-node7 + new node content + + + + + \ No newline at end of file diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_multiple_after_more_complex_merge.xml b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_multiple_after_more_complex_merge.xml new file mode 100644 index 0000000000..496cfdb67c --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_multiple_after_more_complex_merge.xml @@ -0,0 +1,26 @@ + + + + + + + node1-merge + overwritten old content node1 + + + node2-merge + overwritten old content node2 + + + new-node4 + new node4 content + + + + \ No newline at end of file diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_multiple_after_more_complex_merge_2.xml b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_multiple_after_more_complex_merge_2.xml new file mode 100644 index 0000000000..f1142dc411 --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_multiple_after_more_complex_merge_2.xml @@ -0,0 +1,26 @@ + + + + + + + new-node4 + new node4 content + + + new-node5 + new node5 content + + + new-node6 + new node6 content + + + + \ No newline at end of file diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_multiple_after_replace.xml b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_multiple_after_replace.xml new file mode 100644 index 0000000000..fcece32a53 --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_multiple_after_replace.xml @@ -0,0 +1,18 @@ + + + + + + + new-node7 + new node content + + + + \ No newline at end of file diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_multiple_control_1.xml b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_multiple_control_1.xml new file mode 100644 index 0000000000..30b9d1a599 --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_multiple_control_1.xml @@ -0,0 +1,22 @@ + + + + + + + node1-merge + merged content node 1 + + + node2-merge + merged content node 2 + + + + \ No newline at end of file diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_multiple_control_2.xml b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_multiple_control_2.xml new file mode 100644 index 0000000000..f455eb2b83 --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_multiple_control_2.xml @@ -0,0 +1,26 @@ + + + + + + + node1-merge + merged content node 1 + + + node2-merge + merged content node 2 + + + node3-merge + merged content node 3 + + + + \ No newline at end of file diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_n1.xml b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_n1.xml new file mode 100644 index 0000000000..f007fbada0 --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_n1.xml @@ -0,0 +1,27 @@ + + + + + + + + + set + + merge + + + + node1-put + put content + + + + + \ No newline at end of file diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_n1_control.xml b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_n1_control.xml new file mode 100644 index 0000000000..5c68043c56 --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_n1_control.xml @@ -0,0 +1,18 @@ + + + + + + + node1-put + put content + + + + \ No newline at end of file diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_single_1.xml b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_single_1.xml new file mode 100644 index 0000000000..9ea7de11e7 --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_merge_single_1.xml @@ -0,0 +1,27 @@ + + + + + + + + + set + + merge + + + + node3-merge + merged content node 3 + + + + + \ No newline at end of file diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_remove-root.xml b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_remove-root.xml new file mode 100644 index 0000000000..296fd0cf49 --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_remove-root.xml @@ -0,0 +1,23 @@ + + + + + + + + + set + + none + + + + + + \ No newline at end of file diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_replace_default.xml b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_replace_default.xml new file mode 100644 index 0000000000..4120bd1ccc --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_replace_default.xml @@ -0,0 +1,31 @@ + + + + + + + + + set + + replace + + + + new-node1 + replaced node 1 content + + + new-node2 + replaced node 2 content + + + + + \ No newline at end of file diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_replace_default_control.xml b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_replace_default_control.xml new file mode 100644 index 0000000000..c917073884 --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_replace_default_control.xml @@ -0,0 +1,22 @@ + + + + + + + new-node1 + replaced node 1 content + + + new-node2 + replaced node 2 content + + + + \ No newline at end of file diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_running.xml b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_running.xml new file mode 100644 index 0000000000..3939eb56f2 --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/editConfig_running.xml @@ -0,0 +1,27 @@ + + + + + + + + + set + + merge + + + + node1-put + put content + + + + + \ No newline at end of file diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/get.xml b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/get.xml new file mode 100644 index 0000000000..efffd43b61 --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/get.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/getConfig.xml b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/getConfig.xml new file mode 100644 index 0000000000..351ea85668 --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/getConfig.xml @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/getConfig_candidate.xml b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/getConfig_candidate.xml new file mode 100644 index 0000000000..72a95b94ab --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/getConfig_candidate.xml @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/lock.xml b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/lock.xml new file mode 100644 index 0000000000..41a3459dbf --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/lock.xml @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/lock_candidate.xml b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/lock_candidate.xml new file mode 100644 index 0000000000..e48531b839 --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/lock_candidate.xml @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/rpc-reply_ok.xml b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/rpc-reply_ok.xml new file mode 100644 index 0000000000..883df82c69 --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/rpc-reply_ok.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/unlock.xml b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/unlock.xml new file mode 100644 index 0000000000..ddc299dd8c --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/unlock.xml @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/unlock_candidate.xml b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/unlock_candidate.xml new file mode 100644 index 0000000000..84c336d273 --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/messages/mapping/unlock_candidate.xml @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/yang/mdsal-netconf-mapping-test.yang b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/yang/mdsal-netconf-mapping-test.yang new file mode 100644 index 0000000000..69a82eea84 --- /dev/null +++ b/opendaylight/netconf/mdsal-netconf-connector/src/test/resources/yang/mdsal-netconf-mapping-test.yang @@ -0,0 +1,21 @@ +module config { + yang-version 1; + namespace "urn:opendaylight:mdsal:mapping:test"; + prefix "map"; + + revision "2015-02-26"; + + container mapping-nodes { + + list mapping-node{ + key "id"; + leaf id { + type string; + } + + leaf content { + type string; + } + } + } +} \ No newline at end of file diff --git a/opendaylight/netconf/netconf-it/pom.xml b/opendaylight/netconf/netconf-it/pom.xml index 6e4c16d20f..32fc49cefa 100644 --- a/opendaylight/netconf/netconf-it/pom.xml +++ b/opendaylight/netconf/netconf-it/pom.xml @@ -42,7 +42,16 @@ config-api test - + + org.opendaylight.yangtools + object-cache-guava + + + org.opendaylight.yangtools + mockito-configuration + + + ${project.groupId} config-manager test