Unified Two Phase Commit implementation, fixed BA to BI connection
[controller.git] / opendaylight / md-sal / sal-binding-broker / src / test / java / org / opendaylight / controller / sal / binding / test / connect / dom / MappingServiceTest.java
1 package org.opendaylight.controller.sal.binding.test.connect.dom;
2
3 import static org.junit.Assert.*;
4
5 import java.io.InputStream;
6 import java.util.ArrayList;
7 import java.util.List;
8 import java.util.Map;
9 import java.util.Map.Entry;
10 import java.util.Set;
11
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;
32
33 public class MappingServiceTest {
34
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");
38     
39     BindingIndependentMappingService service;
40     private MappingServiceImpl impl;
41
42     @Before
43     public void setUp() {
44         impl = new MappingServiceImpl();
45         service = impl;
46     }
47
48     @Test
49     public void baDataToBiData() throws Exception {
50
51         String[] yangFiles = new String[] { "yang-ext.yang", "ietf-inet-types.yang", "ietf-yang-types.yang",
52                 "node-inventory.yang" };
53
54         SchemaContext ctx = getContext(yangFiles);
55
56         impl.onGlobalContextUpdated(ctx);
57
58         NodesBuilder nodes = new NodesBuilder();
59
60         List<Node> nodeList = new ArrayList<>();
61         nodeList.add(createChildNode("foo"));
62         nodeList.add(createChildNode("bar"));
63
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());
71     }
72
73     @Test
74     public void instanceIdentifierTest() throws Exception {
75
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);
80
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());
86     }
87
88     public static SchemaContext getContext(String[] yangFiles) {
89
90         ClassLoader loader = MappingServiceTest.class.getClassLoader();
91
92         List<InputStream> streams = new ArrayList<>();
93         for (String string : yangFiles) {
94             InputStream stream = loader.getResourceAsStream("META-INF/yang/" + string);
95             streams.add(stream);
96
97         }
98         YangParserImpl parser = new YangParserImpl();
99
100         Set<Module> modules = parser.parseYangModelsFromStreams(streams);
101         return parser.resolveSchemaContext(modules);
102     }
103
104     private Node createChildNode(String id) {
105         NodeBuilder node = new NodeBuilder();
106         NodeId nodeId = new NodeId(id);
107
108         node.setId(nodeId);
109         node.setKey(new NodeKey(nodeId));
110
111         FlowCapableNodeBuilder aug = new FlowCapableNodeBuilder();
112         aug.setManufacturer(id);
113         node.addAugmentation(FlowCapableNode.class, aug.build());
114
115         return node.build();
116     }
117
118 }