X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-netconf-connector%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fsal%2Fconnect%2Fnetconf%2FNetconfToRpcRequestTest.java;h=aa5f59be8d8702b1a0101ef66ae80e4adc6747ee;hp=18a3b9f0ff65d9055daf13d6f7e70f01653de6ea;hb=2727bea09c83646b6cbd2ef9672d0b7f6cf3b22f;hpb=c46e223995956f1f759c551163c212947c1e2fb7 diff --git a/opendaylight/md-sal/sal-netconf-connector/src/test/java/org/opendaylight/controller/sal/connect/netconf/NetconfToRpcRequestTest.java b/opendaylight/md-sal/sal-netconf-connector/src/test/java/org/opendaylight/controller/sal/connect/netconf/NetconfToRpcRequestTest.java index 18a3b9f0ff..aa5f59be8d 100644 --- a/opendaylight/md-sal/sal-netconf-connector/src/test/java/org/opendaylight/controller/sal/connect/netconf/NetconfToRpcRequestTest.java +++ b/opendaylight/md-sal/sal-netconf-connector/src/test/java/org/opendaylight/controller/sal/connect/netconf/NetconfToRpcRequestTest.java @@ -1,27 +1,33 @@ package org.opendaylight.controller.sal.connect.netconf; -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertNotNull; -import static junit.framework.Assert.assertTrue; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.opendaylight.controller.sal.connect.netconf.util.NetconfMessageTransformUtil.toId; +import static org.opendaylight.controller.sal.connect.netconf.util.NetconfMessageTransformUtil.toPath; +import com.google.common.collect.Sets; import java.io.InputStream; import java.util.Collections; import java.util.List; import java.util.Set; - -import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; import org.opendaylight.controller.netconf.api.NetconfMessage; +import org.opendaylight.controller.netconf.util.xml.XmlUtil; import org.opendaylight.controller.sal.connect.netconf.schema.mapping.NetconfMessageTransformer; -import org.opendaylight.controller.sal.connect.netconf.util.NetconfMessageTransformUtil; import org.opendaylight.yangtools.yang.common.QName; -import org.opendaylight.yangtools.yang.data.api.CompositeNode; -import org.opendaylight.yangtools.yang.data.impl.ImmutableCompositeNode; -import org.opendaylight.yangtools.yang.data.impl.util.CompositeNodeBuilder; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; +import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; +import org.opendaylight.yangtools.yang.data.impl.schema.Builders; +import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeAttrBuilder; import org.opendaylight.yangtools.yang.model.api.Module; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.parser.api.YangContextParser; import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl; +import org.w3c.dom.Document; + /** * Test case for reported bug 1355 @@ -32,50 +38,79 @@ import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl; */ public class NetconfToRpcRequestTest { - private String TEST_MODEL_NAMESPACE = "urn:opendaylight:params:xml:ns:yang:controller:md:sal:rpc-test"; - private String REVISION = "2014-07-14"; - private QName INPUT_QNAME = QName.create(TEST_MODEL_NAMESPACE, REVISION, "input"); - private QName STREAM_NAME = QName.create(TEST_MODEL_NAMESPACE, REVISION, "stream-name"); - private QName RPC_NAME = QName.create(TEST_MODEL_NAMESPACE, REVISION, "subscribe"); + private final static String TEST_MODEL_NAMESPACE = "urn:opendaylight:params:xml:ns:yang:controller:md:sal:rpc-test"; + private final static String REVISION = "2014-07-14"; + private final static QName INPUT_QNAME = QName.create(TEST_MODEL_NAMESPACE, REVISION, "input"); + private final static QName STREAM_NAME = QName.create(TEST_MODEL_NAMESPACE, REVISION, "stream-name"); + private final static QName SUBSCRIBE_RPC_NAME = QName.create(TEST_MODEL_NAMESPACE, REVISION, "subscribe"); - NetconfMessageTransformer messageTransformer; + private final static String CONFIG_TEST_NAMESPACE = "urn:opendaylight:params:xml:ns:yang:controller:md:sal:test:rpc:config:defs"; + private final static String CONFIG_TEST_REVISION = "2014-07-21"; + private final static QName EDIT_CONFIG_QNAME = QName.create(CONFIG_TEST_NAMESPACE, CONFIG_TEST_REVISION, "edit-config"); + private final static QName GET_QNAME = QName.create(CONFIG_TEST_NAMESPACE, CONFIG_TEST_REVISION, "get"); + private final static QName GET_CONFIG_QNAME = QName.create(CONFIG_TEST_NAMESPACE, CONFIG_TEST_REVISION, "get-config"); + + static SchemaContext cfgCtx; + static NetconfMessageTransformer messageTransformer; @SuppressWarnings("deprecation") - @Before - public void setup() throws Exception { - final List modelsToParse = Collections - .singletonList(getClass().getResourceAsStream("/schemas/rpc-notification-subscription.yang")); - final YangContextParser parser = new YangParserImpl(); - final Set modules = parser.parseYangModelsFromStreams(modelsToParse); - assertTrue(!modules.isEmpty()); - final SchemaContext schemaContext = parser.resolveSchemaContext(modules); - assertNotNull(schemaContext); - - messageTransformer = new NetconfMessageTransformer(); - messageTransformer.onGlobalContextUpdated(schemaContext); + @BeforeClass + public static void setup() throws Exception { + List modelsToParse = Collections + .singletonList(NetconfToRpcRequestTest.class.getResourceAsStream("/schemas/rpc-notification-subscription.yang")); + YangContextParser parser = new YangParserImpl(); + final Set notifModules = parser.parseYangModelsFromStreams(modelsToParse); + assertTrue(!notifModules.isEmpty()); + + modelsToParse = Collections + .singletonList(NetconfToRpcRequestTest.class.getResourceAsStream("/schemas/config-test-rpc.yang")); + parser = new YangParserImpl(); + final Set configModules = parser.parseYangModelsFromStreams(modelsToParse); + cfgCtx = parser.resolveSchemaContext(Sets.union(configModules, notifModules)); + assertNotNull(cfgCtx); + + messageTransformer = new NetconfMessageTransformer(cfgCtx, true); + } + + private LeafNode buildLeaf(final QName running, final Object value) { + return Builders.leafBuilder().withNodeIdentifier(toId(running)).withValue(value).build(); } @Test - public void test() throws Exception { - final CompositeNodeBuilder rootBuilder = ImmutableCompositeNode.builder(); - rootBuilder.setQName(RPC_NAME); + public void testUserDefinedRpcCall() throws Exception { + final DataContainerNodeAttrBuilder rootBuilder = Builders.containerBuilder(); + rootBuilder.withNodeIdentifier(toId(SUBSCRIBE_RPC_NAME)); - final CompositeNodeBuilder inputBuilder = ImmutableCompositeNode.builder(); - inputBuilder.setQName(INPUT_QNAME); - inputBuilder.addLeaf(STREAM_NAME, "NETCONF"); + rootBuilder.withChild(buildLeaf(STREAM_NAME, "NETCONF")); + final ContainerNode root = rootBuilder.build(); - rootBuilder.add(inputBuilder.toInstance()); - final ImmutableCompositeNode root = rootBuilder.toInstance(); + final NetconfMessage message = messageTransformer.toRpcRequest(toPath(SUBSCRIBE_RPC_NAME), root); + assertNotNull(message); - final CompositeNode flattenedNode = NetconfMessageTransformUtil.flattenInput(root); - assertNotNull(flattenedNode); - assertEquals(1, flattenedNode.size()); + final Document xmlDoc = message.getDocument(); + final org.w3c.dom.Node rpcChild = xmlDoc.getFirstChild(); + assertEquals(rpcChild.getLocalName(), "rpc"); - final List inputNode = flattenedNode.getCompositesByName(INPUT_QNAME); - assertNotNull(inputNode); - assertTrue(inputNode.isEmpty()); + final org.w3c.dom.Node subscribeName = rpcChild.getFirstChild(); + assertEquals(subscribeName.getLocalName(), "subscribe"); + + final org.w3c.dom.Node streamName = subscribeName.getFirstChild(); + assertEquals(streamName.getLocalName(), "stream-name"); - final NetconfMessage message = messageTransformer.toRpcRequest(RPC_NAME, root); - assertNotNull(message); } + + // The edit config defined in yang has no output + @Test(expected = IllegalArgumentException.class) + public void testRpcResponse() throws Exception { + final NetconfMessage response = new NetconfMessage(XmlUtil.readXmlToDocument( + "\n" + + "" + + "module schema" + + "\n" + + "\n" + )); + + messageTransformer.toRpcResult(response, toPath(EDIT_CONFIG_QNAME)); + } + }