1 package org.opendaylight.controller.sal.connect.netconf;
3 import static junit.framework.Assert.assertEquals;
4 import static junit.framework.Assert.assertNotNull;
5 import static junit.framework.Assert.assertTrue;
7 import java.io.InputStream;
8 import java.util.Collections;
12 import org.junit.Before;
13 import org.junit.Test;
14 import org.opendaylight.controller.netconf.api.NetconfMessage;
15 import org.opendaylight.controller.sal.connect.netconf.schema.mapping.NetconfMessageTransformer;
16 import org.opendaylight.controller.sal.connect.netconf.util.NetconfMessageTransformUtil;
17 import org.opendaylight.yangtools.yang.common.QName;
18 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
19 import org.opendaylight.yangtools.yang.data.impl.ImmutableCompositeNode;
20 import org.opendaylight.yangtools.yang.data.impl.util.CompositeNodeBuilder;
21 import org.opendaylight.yangtools.yang.model.api.Module;
22 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
23 import org.opendaylight.yangtools.yang.model.parser.api.YangContextParser;
24 import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl;
27 * Test case for reported bug 1355
29 * @author Lukas Sedlak
31 * https://bugs.opendaylight.org/show_bug.cgi?id=1355</a>
33 public class NetconfToRpcRequestTest {
35 private String TEST_MODEL_NAMESPACE = "urn:opendaylight:params:xml:ns:yang:controller:md:sal:rpc-test";
36 private String REVISION = "2014-07-14";
37 private QName INPUT_QNAME = QName.create(TEST_MODEL_NAMESPACE, REVISION, "input");
38 private QName STREAM_NAME = QName.create(TEST_MODEL_NAMESPACE, REVISION, "stream-name");
39 private QName RPC_NAME = QName.create(TEST_MODEL_NAMESPACE, REVISION, "subscribe");
41 NetconfMessageTransformer messageTransformer;
43 @SuppressWarnings("deprecation")
45 public void setup() throws Exception {
46 final List<InputStream> modelsToParse = Collections
47 .singletonList(getClass().getResourceAsStream("/schemas/rpc-notification-subscription.yang"));
48 final YangContextParser parser = new YangParserImpl();
49 final Set<Module> modules = parser.parseYangModelsFromStreams(modelsToParse);
50 assertTrue(!modules.isEmpty());
51 final SchemaContext schemaContext = parser.resolveSchemaContext(modules);
52 assertNotNull(schemaContext);
54 messageTransformer = new NetconfMessageTransformer();
55 messageTransformer.onGlobalContextUpdated(schemaContext);
59 public void test() throws Exception {
60 final CompositeNodeBuilder<ImmutableCompositeNode> rootBuilder = ImmutableCompositeNode.builder();
61 rootBuilder.setQName(RPC_NAME);
63 final CompositeNodeBuilder<ImmutableCompositeNode> inputBuilder = ImmutableCompositeNode.builder();
64 inputBuilder.setQName(INPUT_QNAME);
65 inputBuilder.addLeaf(STREAM_NAME, "NETCONF");
67 rootBuilder.add(inputBuilder.toInstance());
68 final ImmutableCompositeNode root = rootBuilder.toInstance();
70 final CompositeNode flattenedNode = NetconfMessageTransformUtil.flattenInput(root);
71 assertNotNull(flattenedNode);
72 assertEquals(1, flattenedNode.size());
74 final List<CompositeNode> inputNode = flattenedNode.getCompositesByName(INPUT_QNAME);
75 assertNotNull(inputNode);
76 assertTrue(inputNode.isEmpty());
78 final NetconfMessage message = messageTransformer.toRpcRequest(RPC_NAME, root);
79 assertNotNull(message);