1 package org.opendaylight.controller.sal.binding.test.bugfix;
2 import java.util.Collections;
7 import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
8 import org.opendaylight.controller.md.sal.common.api.data.DataChangeEvent;
9 import org.opendaylight.controller.sal.binding.test.AbstractDataServiceTest;
10 import org.opendaylight.controller.sal.binding.api.data.DataChangeListener;
11 import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction;
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.node.NodeConnector;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
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.nodes.NodeKey;
23 import org.opendaylight.yangtools.yang.binding.DataObject;
24 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
25 import org.opendaylight.yangtools.yang.common.QName;
26 import org.opendaylight.yangtools.yang.common.RpcResult;
27 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
31 import static org.junit.Assert.*;
33 public class DOMCodecBug03Test extends AbstractDataServiceTest implements DataChangeListener {
35 private static final QName NODE_ID_QNAME = QName.create(Node.QNAME, "id");
36 private static final String NODE_ID = "openflow:1";
38 private static final NodeKey NODE_KEY = new NodeKey(new NodeId(NODE_ID));
40 private static final Map<QName, Object> NODE_KEY_BI = Collections.<QName, Object> singletonMap(NODE_ID_QNAME,
43 private static final InstanceIdentifier<Nodes> NODES_INSTANCE_ID_BA = InstanceIdentifier.builder(Nodes.class) //
47 private static final InstanceIdentifier<Node> NODE_INSTANCE_ID_BA = InstanceIdentifier.builder(NODES_INSTANCE_ID_BA) //
48 .child(Node.class, NODE_KEY).toInstance();
50 private static final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier NODE_INSTANCE_ID_BI = //
51 org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.builder() //
53 .nodeWithKey(Node.QNAME, NODE_KEY_BI) //
55 private DataChangeEvent<InstanceIdentifier<?>, DataObject> receivedChangeEvent;
65 public void testAugmentSerialization() throws Exception {
68 baDataService.registerDataChangeListener(NODES_INSTANCE_ID_BA, this);
70 NodeBuilder nodeBuilder = new NodeBuilder();
71 nodeBuilder.setId(new NodeId(NODE_ID));
72 nodeBuilder.setKey(NODE_KEY);
73 DataModificationTransaction transaction = baDataService.beginTransaction();
76 FlowCapableNodeBuilder fnub = new FlowCapableNodeBuilder();
77 fnub.setHardware("Hardware Foo");
78 fnub.setManufacturer("Manufacturer Foo");
79 fnub.setSerialNumber("Serial Foo");
80 fnub.setDescription("Description Foo");
81 fnub.setSoftware("JUnit emulated");
82 FlowCapableNode fnu = fnub.build();
83 nodeBuilder.addAugmentation(FlowCapableNode.class, fnu);
84 Node original = nodeBuilder.build();
85 transaction.putOperationalData(NODE_INSTANCE_ID_BA, original);
87 RpcResult<TransactionStatus> result = transaction.commit().get();
88 assertEquals(TransactionStatus.COMMITED, result.getResult());
90 assertNotNull(receivedChangeEvent);
92 verifyNodes((Nodes) receivedChangeEvent.getUpdatedOperationalSubtree(),original);
93 assertBindingIndependentVersion(NODE_INSTANCE_ID_BI);
94 Nodes nodes = checkForNodes();
95 verifyNodes(nodes,original);
99 testAddingNodeConnector();
108 private void testAddingNodeConnector() throws Exception {
110 NodeConnectorId ncId = new NodeConnectorId("openflow:1:bar");
111 NodeConnectorKey nodeKey = new NodeConnectorKey(ncId );
112 InstanceIdentifier<NodeConnector> ncInstanceId = InstanceIdentifier.builder(NODE_INSTANCE_ID_BA).child(NodeConnector.class, nodeKey).toInstance();
113 NodeConnectorBuilder ncBuilder = new NodeConnectorBuilder();
114 ncBuilder.setId(ncId);
115 ncBuilder.setKey(nodeKey);
116 NodeConnector connector = ncBuilder.build();
117 DataModificationTransaction transaction = baDataService.beginTransaction();
118 transaction.putOperationalData(ncInstanceId, connector);
119 RpcResult<TransactionStatus> result = transaction.commit().get();
120 assertEquals(TransactionStatus.COMMITED, result.getResult());
121 Node node = (Node) baDataService.readOperationalData(NODE_INSTANCE_ID_BA);
123 assertNotNull(node.getNodeConnector());
124 assertFalse(node.getNodeConnector().isEmpty());
125 NodeConnector readedNc = node.getNodeConnector().get(0);
126 assertNotNull(readedNc);
133 private void testNodeRemove() throws Exception {
134 DataModificationTransaction transaction = baDataService.beginTransaction();
135 transaction.removeOperationalData(NODE_INSTANCE_ID_BA);
136 RpcResult<TransactionStatus> result = transaction.commit().get();
137 assertEquals(TransactionStatus.COMMITED, result.getResult());
139 Node node = (Node) baDataService.readOperationalData(NODE_INSTANCE_ID_BA);
143 private void verifyNodes(Nodes nodes,Node original) {
144 assertNotNull(nodes);
145 assertNotNull(nodes.getNode());
146 assertEquals(1, nodes.getNode().size());
147 Node readedNode = nodes.getNode().get(0);
148 assertEquals(original.getId(), readedNode.getId());
149 assertEquals(original.getKey(), readedNode.getKey());
151 FlowCapableNode fnu = original.getAugmentation(FlowCapableNode.class);
152 FlowCapableNode readedAugment = readedNode.getAugmentation(FlowCapableNode.class);
154 assertEquals(fnu.getDescription(), readedAugment.getDescription());
155 assertEquals(fnu.getSerialNumber(), readedAugment.getSerialNumber());
159 private void assertBindingIndependentVersion(
160 org.opendaylight.yangtools.yang.data.api.InstanceIdentifier nodeId) {
161 CompositeNode node = biDataService.readOperationalData(nodeId);
165 private Nodes checkForNodes() {
166 return (Nodes) baDataService.readOperationalData(NODES_INSTANCE_ID_BA);
170 public void onDataChanged(DataChangeEvent<InstanceIdentifier<?>, DataObject> change) {
171 receivedChangeEvent = change;