X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fnetconf%2Fmdsal-netconf-connector%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fmdsal%2Fconnector%2Fops%2FNetconfMDSalMappingTest.java;fp=opendaylight%2Fnetconf%2Fmdsal-netconf-connector%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fnetconf%2Fmdsal%2Fconnector%2Fops%2FNetconfMDSalMappingTest.java;h=0d29c0f8b4fac25e5b0c8d57c0ca9429ac8230bc;hp=6b942515315ef54a9a62a74253008fd9f6d9f8cd;hb=19350557570d6fa1157d9021a27e552355bc9016;hpb=9b2d6abcc63a9253571ed474419039b1fe1914c8 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 index 6b94251531..0d29c0f8b4 100644 --- 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 @@ -20,6 +20,7 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.EnumMap; import java.util.List; import java.util.concurrent.ExecutorService; @@ -45,11 +46,15 @@ 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.XmlElement; 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.common.QName; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; @@ -69,6 +74,22 @@ public class NetconfMDSalMappingTest { private static final String RPC_REPLY_ELEMENT = "rpc-reply"; private static final String DATA_ELEMENT = "data"; + private static final String FILTER_NODE = "filter"; + private static final String GET_CONFIG = "get-config"; + private static final QName TOP = QName.create("urn:opendaylight:mdsal:mapping:test", "2015-02-26", "top"); + private static final QName USERS = QName.create("urn:opendaylight:mdsal:mapping:test", "2015-02-26", "users"); + private static final QName USER = QName.create("urn:opendaylight:mdsal:mapping:test", "2015-02-26", "user"); + private static final QName MODULES = QName.create("urn:opendaylight:mdsal:mapping:test", "2015-02-26", "modules"); + private static final QName AUGMENTED_CONTAINER = QName.create("urn:opendaylight:mdsal:mapping:test", "2015-02-26", "augmented-container"); + private static final QName AUGMENTED_STRING_IN_CONT = QName.create("urn:opendaylight:mdsal:mapping:test", "2015-02-26", "identifier"); + private static final QName CHOICE_NODE = QName.create("urn:opendaylight:mdsal:mapping:test", "2015-02-26", "choice-node"); + private static final QName AUGMENTED_CASE = QName.create("urn:opendaylight:mdsal:mapping:test", "2015-02-26", "augmented-case"); + private static final QName CHOICE_WRAPPER = QName.create("urn:opendaylight:mdsal:mapping:test", "2015-02-26", "choice-wrapper"); + private static final QName INNER_CHOICE = QName.create("urn:opendaylight:mdsal:mapping:test", "2015-02-26", "inner-choice"); + private static final QName INNER_CHOICE_TEXT = QName.create("urn:opendaylight:mdsal:mapping:test", "2015-02-26", "text"); + + private static final YangInstanceIdentifier AUGMENTED_CONTAINER_IN_MODULES = + YangInstanceIdentifier.builder().node(TOP).node(MODULES).build().node(new AugmentationIdentifier(Collections.singleton(AUGMENTED_CONTAINER))); private static Document RPC_REPLY_OK = null; @@ -87,7 +108,6 @@ public class NetconfMDSalMappingTest { private TransactionProvider transactionProvider = null; - @Before public void setUp() throws Exception { @@ -96,7 +116,7 @@ public class NetconfMDSalMappingTest { this.schemaContext = parseSchemas(getYangSchemas()); schemaContext.getModules(); - SchemaService schemaService = createSchemaService(); + final SchemaService schemaService = createSchemaService(); final DOMStore operStore = InMemoryDOMDataStoreFactory.create("DOM-OPER", schemaService); final DOMStore configStore = InMemoryDOMDataStoreFactory.create("DOM-CFG", schemaService); @@ -108,7 +128,7 @@ public class NetconfMDSalMappingTest { ExecutorService listenableFutureExecutor = SpecialExecutors.newBlockingBoundedCachedThreadPool( 16, 16, "CommitFutures"); - ConcurrentDOMDataBroker cdb = new ConcurrentDOMDataBroker(datastores, listenableFutureExecutor); + final ConcurrentDOMDataBroker cdb = new ConcurrentDOMDataBroker(datastores, listenableFutureExecutor); this.transactionProvider = new TransactionProvider(cdb, sessionIdForReporting); this.currentSchemaContext = new CurrentSchemaContext(schemaService); @@ -116,23 +136,16 @@ public class NetconfMDSalMappingTest { @Test public void testEmptyDatastore() throws Exception { - - Document response = getConfigRunning(); - assertEmptyDatastore(response); - - response = getConfigCandidate(); - assertEmptyDatastore(response); - - response = get(); - assertEmptyDatastore(response); - + assertEmptyDatastore(get()); + assertEmptyDatastore(getConfigCandidate()); + assertEmptyDatastore(getConfigRunning()); } @Test public void testEditRunning() throws Exception { try { - edit("messages/mapping/editConfig_running.xml"); + edit("messages/mapping/editConfigs/editConfig_running.xml"); fail("Should have failed - edit config on running datastore is not supported"); } catch (NetconfDocumentedException e) { assertTrue(e.getErrorSeverity() == ErrorSeverity.error); @@ -145,8 +158,8 @@ public class NetconfMDSalMappingTest { @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")); + verifyResponse(edit("messages/mapping/editConfigs/editConfig_merge_n1.xml"), RPC_REPLY_OK); + verifyResponse(getConfigCandidate(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfigs/editConfig_merge_n1_control.xml")); assertEmptyDatastore(getConfigRunning()); verifyResponse(discardChanges(), RPC_REPLY_OK); @@ -157,11 +170,11 @@ public class NetconfMDSalMappingTest { @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(edit("messages/mapping/editConfigs/editConfig_merge_n1.xml"), RPC_REPLY_OK); + verifyResponse(getConfigCandidate(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfigs/editConfig_merge_n1_control.xml")); verifyResponse(commit(), RPC_REPLY_OK); - verifyResponse(getConfigRunning(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfig_merge_n1_control.xml")); + verifyResponse(getConfigRunning(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfigs/editConfig_merge_n1_control.xml")); deleteDatastore(); @@ -170,14 +183,14 @@ public class NetconfMDSalMappingTest { @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")); + verifyResponse(edit("messages/mapping/editConfigs/editConfig_merge_multiple_1.xml"), RPC_REPLY_OK); + verifyResponse(getConfigCandidate(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfigs/editConfig_merge_multiple_control_1.xml")); + verifyResponse(edit("messages/mapping/editConfigs/editConfig_merge_single_1.xml"), RPC_REPLY_OK); + verifyResponse(getConfigCandidate(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfigs/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")); + verifyResponse(getConfigRunning(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfigs/editConfig_merge_multiple_control_2.xml")); deleteDatastore(); @@ -186,26 +199,26 @@ public class NetconfMDSalMappingTest { @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/editConfigs/editConfig_merge_multiple_1.xml"), RPC_REPLY_OK); + verifyResponse(edit("messages/mapping/editConfigs/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/editConfigs/editConfig_merge_multiple_2.xml"), RPC_REPLY_OK); + verifyResponse(getConfigCandidate(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfigs/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/editConfigs/editConfig_merge_multiple_3.xml"), RPC_REPLY_OK); + verifyResponse(getConfigCandidate(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfigs/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(edit("messages/mapping/editConfigs/editConfig_merge_multiple_4_replace.xml"), RPC_REPLY_OK); + verifyResponse(getConfigCandidate(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfigs/editConfig_merge_multiple_after_replace.xml")); verifyResponse(commit(), RPC_REPLY_OK); - verifyResponse(getConfigRunning(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfig_merge_multiple_after_replace.xml")); + verifyResponse(getConfigRunning(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfigs/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(edit("messages/mapping/editConfigs/editConfig_replace_default.xml"), RPC_REPLY_OK); + verifyResponse(getConfigCandidate(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfigs/editConfig_replace_default_control.xml")); verifyResponse(commit(), RPC_REPLY_OK); - verifyResponse(getConfigRunning(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfig_replace_default_control.xml")); + verifyResponse(getConfigRunning(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfigs/editConfig_replace_default_control.xml")); deleteDatastore(); @@ -244,12 +257,12 @@ public class NetconfMDSalMappingTest { @Test public void testEditWithCreate() throws Exception { - verifyResponse(edit("messages/mapping/editConfig_create.xml"), RPC_REPLY_OK); + verifyResponse(edit("messages/mapping/editConfigs/editConfig_create.xml"), RPC_REPLY_OK); verifyResponse(getConfigCandidate(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfig_create_n1_control.xml")); try { - edit("messages/mapping/editConfig_create.xml"); + edit("messages/mapping/editConfigs/editConfig_create.xml"); fail("Create should have failed - data already exists"); } catch (NetconfDocumentedException e) { assertTrue(e.getErrorSeverity() == ErrorSeverity.error); @@ -268,7 +281,7 @@ public class NetconfMDSalMappingTest { assertEmptyDatastore(getConfigRunning()); try { - edit("messages/mapping/editConfig_delete-root.xml"); + edit("messages/mapping/editConfigs/editConfig_delete-root.xml"); fail("Delete should have failed - data is missing"); } catch (NetconfDocumentedException e) { assertTrue(e.getErrorSeverity() == ErrorSeverity.error); @@ -281,18 +294,96 @@ public class NetconfMDSalMappingTest { @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(edit("messages/mapping/editConfigs/editConfig_merge_missing_default-operation_1.xml"), RPC_REPLY_OK); + verifyResponse(edit("messages/mapping/editConfigs/editConfig_merge_missing_default-operation_2.xml"), RPC_REPLY_OK); + verifyResponse(getConfigCandidate(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfigs/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")); + verifyResponse(getConfigRunning(), XmlFileLoader.xmlFileToDocument("messages/mapping/editConfigs/editConfig_merge_missing_default-operation_control.xml")); deleteDatastore(); } + @Test + public void testFiltering() throws Exception { + + assertEmptyDatastore(getConfigCandidate()); + assertEmptyDatastore(getConfigRunning()); + + verifyResponse(getConfigCandidate(), XmlFileLoader.xmlFileToDocument("messages/mapping/get-empty-response.xml")); + verifyResponse(getConfigRunning(), XmlFileLoader.xmlFileToDocument("messages/mapping/get-empty-response.xml")); + verifyResponse(getConfigWithFilter("messages/mapping/filters/get-filter-users.xml"), + XmlFileLoader.xmlFileToDocument("messages/mapping/get-empty-response.xml")); + + verifyResponse(edit("messages/mapping/editConfigs/editConfig-filtering-setup.xml"), RPC_REPLY_OK); + verifyResponse(commit(), RPC_REPLY_OK); + + verifyFilterIdentifier("messages/mapping/filters/get-filter-alluser.xml", + YangInstanceIdentifier.builder().node(TOP).node(USERS).node(USER).build()); + verifyFilterIdentifier("messages/mapping/filters/get-filter-company-info.xml", + YangInstanceIdentifier.builder().node(TOP).node(USERS).node(USER).build()); + verifyFilterIdentifier("messages/mapping/filters/get-filter-modules-and-admin.xml", + YangInstanceIdentifier.builder().node(TOP).build()); + verifyFilterIdentifier("messages/mapping/filters/get-filter-only-names-types.xml", + YangInstanceIdentifier.builder().node(TOP).node(USERS).node(USER).build()); + verifyFilterIdentifier("messages/mapping/filters/get-filter-specific-module-type-and-user.xml", + YangInstanceIdentifier.builder().node(TOP).build()); + verifyFilterIdentifier("messages/mapping/filters/get-filter-superuser.xml", + YangInstanceIdentifier.builder().node(TOP).node(USERS).node(USER).build()); + verifyFilterIdentifier("messages/mapping/filters/get-filter-users.xml", + YangInstanceIdentifier.builder().node(TOP).node(USERS).build()); + + YangInstanceIdentifier ident = YangInstanceIdentifier. + builder(AUGMENTED_CONTAINER_IN_MODULES). + node(AUGMENTED_CONTAINER). + node(AUGMENTED_STRING_IN_CONT).build(); + + verifyFilterIdentifier("messages/mapping/filters/get-filter-augmented-string.xml", ident); + verifyFilterIdentifier("messages/mapping/filters/get-filter-augmented-case.xml", + YangInstanceIdentifier.builder().node(TOP).node(CHOICE_NODE).node(AUGMENTED_CASE).build()); + + verifyResponse(getConfigWithFilter("messages/mapping/filters/get-filter-augmented-case.xml"), + XmlFileLoader.xmlFileToDocument("messages/mapping/filters/response-augmented-case.xml")); + verifyResponse(edit("messages/mapping/editConfigs/editConfig-filtering-setup2.xml"), RPC_REPLY_OK); + verifyResponse(commit(), RPC_REPLY_OK); + + verifyFilterIdentifier("messages/mapping/filters/get-filter-augmented-case-inner-choice.xml", + YangInstanceIdentifier.builder().node(TOP).node(CHOICE_NODE).node(CHOICE_WRAPPER).build()); + verifyFilterIdentifier("messages/mapping/filters/get-filter-augmented-case-inner-case.xml", + YangInstanceIdentifier.builder().node(TOP).node(CHOICE_NODE).node(CHOICE_WRAPPER).node(INNER_CHOICE).node(INNER_CHOICE_TEXT).build()); + + verifyResponse(getConfigWithFilter("messages/mapping/filters/get-filter-augmented-string.xml"), + XmlFileLoader.xmlFileToDocument("messages/mapping/filters/response-augmented-string.xml")); + verifyResponse(getConfigWithFilter("messages/mapping/filters/get-filter-augmented-case-inner-choice.xml"), + XmlFileLoader.xmlFileToDocument("messages/mapping/filters/response-augmented-case-inner-choice.xml")); + verifyResponse(getConfigWithFilter("messages/mapping/filters/get-filter-augmented-case-inner-case.xml"), + XmlFileLoader.xmlFileToDocument("messages/mapping/filters/response-augmented-case-inner-choice.xml")); + + verifyResponse(edit("messages/mapping/editConfigs/editConfig_delete-top.xml"), RPC_REPLY_OK); + verifyResponse(commit(), RPC_REPLY_OK); + + } + + private void verifyFilterIdentifier(String resource, YangInstanceIdentifier identifier) throws Exception{ + TestingGetConfig getConfig = new TestingGetConfig(sessionIdForReporting, currentSchemaContext, transactionProvider); + Document request = XmlFileLoader.xmlFileToDocument(resource); + YangInstanceIdentifier iid = getConfig.getInstanceIdentifierFromDocument(request); + assertTrue(iid.equals(identifier)); + } + + private class TestingGetConfig extends GetConfig{ + public TestingGetConfig(String sessionId, CurrentSchemaContext schemaContext, TransactionProvider transactionProvider) { + super(sessionId, schemaContext, transactionProvider); + } + + public YangInstanceIdentifier getInstanceIdentifierFromDocument(Document request) throws NetconfDocumentedException { + XmlElement filterElement = XmlElement.fromDomDocument(request).getOnlyChildElement(GET_CONFIG).getOnlyChildElement(FILTER_NODE); + return getInstanceIdentifierFromFilter(filterElement); + } + } + private void deleteDatastore() throws Exception{ - verifyResponse(edit("messages/mapping/editConfig_delete-root.xml"), RPC_REPLY_OK); + verifyResponse(edit("messages/mapping/editConfigs/editConfig_delete-root.xml"), RPC_REPLY_OK); assertEmptyDatastore(getConfigCandidate()); verifyResponse(commit(), RPC_REPLY_OK); @@ -351,6 +442,11 @@ public class NetconfMDSalMappingTest { return executeOperation(getConfig, "messages/mapping/getConfig_candidate.xml"); } + private Document getConfigWithFilter(String resource) throws NetconfDocumentedException, ParserConfigurationException, SAXException, IOException { + GetConfig getConfig = new GetConfig(sessionIdForReporting, currentSchemaContext, transactionProvider); + return executeOperation(getConfig, resource); + } + private Document lock() throws NetconfDocumentedException, ParserConfigurationException, SAXException, IOException { Lock lock = new Lock(sessionIdForReporting); return executeOperation(lock, "messages/mapping/lock.xml");