1 package org.opendaylight.controller.sal.binding.test.connect.dom;
3 import static org.junit.Assert.*;
5 import java.io.InputStream;
6 import java.util.ArrayList;
9 import java.util.Map.Entry;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeBuilder;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
16 import org.junit.Before;
17 import org.junit.Test;
18 import org.opendaylight.controller.sal.binding.impl.connect.dom.BindingIndependentMappingService;
19 import org.opendaylight.controller.sal.binding.impl.connect.dom.MappingServiceImpl;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodesBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
24 import org.opendaylight.yangtools.sal.binding.generator.impl.ModuleContext;
25 import org.opendaylight.yangtools.yang.binding.Augmentation;
26 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
27 import org.opendaylight.yangtools.yang.common.QName;
28 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
29 import org.opendaylight.yangtools.yang.model.api.Module;
30 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
31 import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl;
33 public class MappingServiceTest {
35 private static final QName NODES = QName.create("urn:opendaylight:inventory", "2013-08-19", "nodes");
36 private static final QName NODE = QName.create(NODES,"node");
37 private static final QName ID = QName.create(NODES,"id");
39 BindingIndependentMappingService service;
40 private MappingServiceImpl impl;
44 impl = new MappingServiceImpl();
49 public void baDataToBiData() throws Exception {
51 String[] yangFiles = new String[] { "yang-ext.yang", "ietf-inet-types.yang", "ietf-yang-types.yang",
52 "node-inventory.yang" };
54 SchemaContext ctx = getContext(yangFiles);
56 impl.onGlobalContextUpdated(ctx);
58 NodesBuilder nodes = new NodesBuilder();
60 List<Node> nodeList = new ArrayList<>();
61 nodeList.add(createChildNode("foo"));
62 nodeList.add(createChildNode("bar"));
64 nodes.setNode(nodeList);
65 Nodes nodesTO = nodes.build();
66 CompositeNode xmlNodes = service.toDataDom(nodesTO);
67 assertNotNull(xmlNodes);
68 List<CompositeNode> invNodes = xmlNodes.getCompositesByName(NODE);
69 assertNotNull(invNodes);
70 assertEquals(2, invNodes.size());
74 public void instanceIdentifierTest() throws Exception {
76 String[] yangFiles = new String[] { "yang-ext.yang", "ietf-inet-types.yang", "ietf-yang-types.yang",
77 "node-inventory.yang" };
78 SchemaContext ctx = getContext(yangFiles);
79 impl.onGlobalContextUpdated(ctx);
81 NodeKey nodeKey = new NodeKey(new NodeId("foo"));
82 InstanceIdentifier<Node> path = InstanceIdentifier.builder().node(Nodes.class).child(Node.class, nodeKey).toInstance();
83 org.opendaylight.yangtools.yang.data.api.InstanceIdentifier result = service.toDataDom(path);
84 assertNotNull(result);
85 assertEquals(2, result.getPath().size());
88 public static SchemaContext getContext(String[] yangFiles) {
90 ClassLoader loader = MappingServiceTest.class.getClassLoader();
92 List<InputStream> streams = new ArrayList<>();
93 for (String string : yangFiles) {
94 InputStream stream = loader.getResourceAsStream("META-INF/yang/" + string);
98 YangParserImpl parser = new YangParserImpl();
100 Set<Module> modules = parser.parseYangModelsFromStreams(streams);
101 return parser.resolveSchemaContext(modules);
104 private Node createChildNode(String id) {
105 NodeBuilder node = new NodeBuilder();
106 NodeId nodeId = new NodeId(id);
109 node.setKey(new NodeKey(nodeId));
111 FlowCapableNodeBuilder aug = new FlowCapableNodeBuilder();
112 aug.setManufacturer(id);
113 node.addAugmentation(FlowCapableNode.class, aug.build());