Merge "Fixed performance issues with implementation of BA-to-BI mapping"
[controller.git] / opendaylight / md-sal / sal-binding-broker / src / test / java / org / opendaylight / controller / sal / binding / test / connect / dom / BrokerIntegrationTest.java
1 package org.opendaylight.controller.sal.binding.test.connect.dom;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertNotNull;
5 import static org.junit.Assert.assertNull;
6
7 import java.util.concurrent.Executors;
8 import java.util.concurrent.Future;
9
10 import org.junit.Before;
11 import org.junit.Test;
12 import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
13 import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction;
14 import org.opendaylight.controller.sal.binding.api.data.DataProviderService;
15 import org.opendaylight.controller.sal.binding.impl.DataBrokerImpl;
16 import org.opendaylight.controller.sal.binding.impl.connect.dom.BindingIndependentDataServiceConnector;
17 import org.opendaylight.controller.sal.binding.impl.connect.dom.BindingIndependentMappingService;
18 import org.opendaylight.controller.sal.binding.impl.connect.dom.MappingServiceImpl;
19 import org.opendaylight.controller.sal.binding.impl.connect.dom.RuntimeGeneratedMappingServiceImpl;
20 import org.opendaylight.controller.sal.core.api.data.DataBrokerService;
21 import org.opendaylight.controller.sal.dom.broker.impl.HashMapDataStore;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
28 import org.opendaylight.yangtools.yang.binding.DataObject;
29 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
30 import org.opendaylight.yangtools.yang.common.RpcResult;
31
32 import com.google.common.util.concurrent.ListeningExecutorService;
33 import com.google.common.util.concurrent.MoreExecutors;
34
35 public class BrokerIntegrationTest {
36
37     DataBrokerService biDataService;
38     DataProviderService baDataService;
39     private RuntimeGeneratedMappingServiceImpl mappingServiceImpl;
40     private BindingIndependentMappingService mappingService;
41     private DataBrokerImpl baDataImpl;
42     private org.opendaylight.controller.sal.dom.broker.DataBrokerImpl biDataImpl;
43     private ListeningExecutorService executor;
44     private BindingIndependentDataServiceConnector connectorServiceImpl;
45     private HashMapDataStore dataStore;
46     
47     
48     @Before
49     public void setUp() {
50         executor = MoreExecutors.sameThreadExecutor();
51         baDataImpl = new DataBrokerImpl();
52         baDataService = baDataImpl;
53         baDataImpl.setExecutor(executor);
54         
55         biDataImpl = new org.opendaylight.controller.sal.dom.broker.DataBrokerImpl();
56         biDataService =  biDataImpl;
57         biDataImpl.setExecutor(executor);
58         
59         dataStore = new HashMapDataStore();
60         org.opendaylight.yangtools.yang.data.api.InstanceIdentifier treeRoot = org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.builder().toInstance();
61         biDataImpl.registerConfigurationReader(treeRoot, dataStore);
62         biDataImpl.registerOperationalReader(treeRoot, dataStore);
63         biDataImpl.registerCommitHandler(treeRoot, dataStore);
64         
65         mappingServiceImpl = new RuntimeGeneratedMappingServiceImpl();
66         mappingService = mappingServiceImpl;
67         mappingServiceImpl.start();
68         
69         connectorServiceImpl = new BindingIndependentDataServiceConnector();
70         connectorServiceImpl.setBaDataService(baDataService);
71         connectorServiceImpl.setBiDataService(biDataService);
72         connectorServiceImpl.setMappingService(mappingServiceImpl);
73         connectorServiceImpl.start();
74         
75         String[] yangFiles = new String[] { "yang-ext.yang", "ietf-inet-types.yang", "ietf-yang-types.yang",
76         "node-inventory.yang" };
77         
78         mappingServiceImpl.onGlobalContextUpdated(MappingServiceTest.getContext(yangFiles));
79         
80     }
81     
82     @Test
83     public void simpleModifyOperation() throws Exception {
84         
85         
86         NodeRef node1 = createNodeRef("0");
87         DataObject  node = baDataService.readConfigurationData(node1.getValue());
88         assertNull(node);
89         Node nodeData1 = createNode("0");
90         
91         
92         DataModificationTransaction transaction = baDataService.beginTransaction();
93         transaction.putConfigurationData(node1.getValue(), nodeData1);
94         Future<RpcResult<TransactionStatus>> commitResult = transaction.commit();
95         assertNotNull(commitResult);
96         
97         RpcResult<TransactionStatus> result = commitResult.get();
98         
99         assertNotNull(result);
100         assertNotNull(result.getResult());
101         assertEquals(TransactionStatus.COMMITED, result.getResult());
102         
103         Node readedData = (Node) baDataService.readConfigurationData(node1.getValue());
104         assertNotNull(readedData);
105         assertEquals(nodeData1.getKey(), readedData.getKey());
106         
107         
108         NodeRef nodeFoo = createNodeRef("foo");
109         NodeRef nodeBar = createNodeRef("bar");
110         Node nodeFooData = createNode("foo");
111         Node nodeBarData = createNode("bar");
112         
113         
114         DataModificationTransaction insertMoreTr = baDataService.beginTransaction();
115         insertMoreTr.putConfigurationData(nodeFoo.getValue(), nodeFooData);
116         insertMoreTr.putConfigurationData(nodeBar.getValue(), nodeBarData);
117         RpcResult<TransactionStatus> result2 = insertMoreTr.commit().get();
118         
119         assertNotNull(result2);
120         assertNotNull(result2.getResult());
121         assertEquals(TransactionStatus.COMMITED, result.getResult());
122         
123         Nodes allNodes = (Nodes) baDataService.readConfigurationData(InstanceIdentifier.builder().node(Nodes.class).toInstance());
124         assertNotNull(allNodes);
125         assertNotNull(allNodes.getNode());
126         assertEquals(3, allNodes.getNode().size());
127         
128         
129         /**
130          * We create transaction no 2
131          * 
132          */
133         DataModificationTransaction removalTransaction = baDataService.beginTransaction();
134         assertNotNull(transaction);
135         
136         /**
137          * We remove node 1
138          * 
139          */
140         removalTransaction.removeConfigurationData(node1.getValue());
141         
142         /**
143          * We commit transaction
144          */
145         Future<RpcResult<TransactionStatus>> commitResult2 = removalTransaction.commit();
146         assertNotNull(commitResult2);
147         
148         RpcResult<TransactionStatus> result3 = commitResult2.get();
149         
150         assertNotNull(result3);
151         assertNotNull(result3.getResult());
152         assertEquals(TransactionStatus.COMMITED, result2.getResult());
153     
154         DataObject readedData2 = baDataService.readConfigurationData(node1.getValue());
155         assertNull(readedData2);
156     }
157     
158     private static NodeRef createNodeRef(String string) {
159         NodeKey key = new NodeKey(new NodeId(string));
160         InstanceIdentifier<Node> path = InstanceIdentifier.builder().node(Nodes.class).node(Node.class, key)
161                 .toInstance();
162         return new NodeRef(path);
163     }
164     
165     private static Node createNode(String string) {
166         NodeBuilder ret = new NodeBuilder();
167         ret.setId(new NodeId(string));
168         ret.setKey(new NodeKey(ret.getId()));
169         return ret.build();
170     }
171 }