1 package org.opendaylight.controller.sal.binding.test.bugfix;
2 import java.util.Arrays;
3 import java.util.Collections;
8 import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
9 import org.opendaylight.controller.md.sal.common.api.data.DataChangeEvent;
10 import org.opendaylight.controller.sal.binding.test.AbstractDataServiceTest;
11 import org.opendaylight.controller.sal.binding.api.data.DataChangeListener;
12 import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeBuilder;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.flow.node.SupportedActions;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.flow.node.SupportedActionsBuilder;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.flow.node.supported.actions.ActionType;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.flow.node.supported.actions.ActionTypeBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.SupportType;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeaturesBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeaturesKey;
31 import org.opendaylight.yangtools.yang.binding.DataObject;
32 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
33 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder;
34 import org.opendaylight.yangtools.yang.common.QName;
35 import org.opendaylight.yangtools.yang.common.RpcResult;
36 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
38 import static org.junit.Assert.*;
40 public class PutAugmentationTest extends AbstractDataServiceTest implements DataChangeListener {
42 private static final QName NODE_ID_QNAME = QName.create(Node.QNAME, "id");
43 private static final String NODE_ID = "openflow:1";
45 private static final NodeKey NODE_KEY = new NodeKey(new NodeId(NODE_ID));
47 private static final Map<QName, Object> NODE_KEY_BI = Collections.<QName, Object> singletonMap(NODE_ID_QNAME,
50 private static final InstanceIdentifier<Nodes> NODES_INSTANCE_ID_BA = InstanceIdentifier.builder(Nodes.class) //
54 private static final InstanceIdentifier<Node> NODE_INSTANCE_ID_BA = InstanceIdentifier//
55 .builder(NODES_INSTANCE_ID_BA) //
56 .child(Node.class, NODE_KEY).toInstance();
59 private static final InstanceIdentifier<SupportedActions> SUPPORTED_ACTIONS_INSTANCE_ID_BA = InstanceIdentifier//
60 .builder(NODES_INSTANCE_ID_BA) //
61 .child(Node.class, NODE_KEY) //
62 .augmentation(FlowCapableNode.class) //
63 .child(SupportedActions.class)
67 private static final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier NODE_INSTANCE_ID_BI = //
68 org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.builder() //
70 .nodeWithKey(Node.QNAME, NODE_KEY_BI) //
72 private static final QName SUPPORTED_ACTIONS_QNAME = QName.create(FlowCapableNode.QNAME, SupportedActions.QNAME.getLocalName());
75 private static final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier SUPPORTED_ACTIONS_INSTANCE_ID_BI = //
76 org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.builder() //
78 .nodeWithKey(Node.QNAME, NODE_KEY_BI) //
79 .node(SUPPORTED_ACTIONS_QNAME) //
82 private DataChangeEvent<InstanceIdentifier<?>, DataObject> receivedChangeEvent;
92 public void putNodeAndAugmentation() throws Exception {
94 baDataService.registerDataChangeListener(NODES_INSTANCE_ID_BA, this);
96 NodeBuilder nodeBuilder = new NodeBuilder();
97 nodeBuilder.setId(new NodeId(NODE_ID));
98 nodeBuilder.setKey(NODE_KEY);
99 DataModificationTransaction baseTransaction = baDataService.beginTransaction();
100 baseTransaction.putOperationalData(NODE_INSTANCE_ID_BA, nodeBuilder.build());
101 RpcResult<TransactionStatus> result = baseTransaction.commit().get();
102 assertEquals(TransactionStatus.COMMITED, result.getResult());
103 assertNotNull(receivedChangeEvent);
104 Node node = (Node) baDataService.readOperationalData(NODE_INSTANCE_ID_BA);
106 assertEquals(NODE_KEY, node.getKey());
108 FlowCapableNodeBuilder fnub = new FlowCapableNodeBuilder();
109 fnub.setHardware("Hardware Foo");
110 fnub.setManufacturer("Manufacturer Foo");
111 fnub.setSerialNumber("Serial Foo");
112 fnub.setDescription("Description Foo");
113 fnub.setSoftware("JUnit emulated");
114 FlowCapableNode fnu = fnub.build();
115 InstanceIdentifier<FlowCapableNode> augmentIdentifier = InstanceIdentifier.builder(NODE_INSTANCE_ID_BA).augmentation(FlowCapableNode.class).toInstance();
116 DataModificationTransaction augmentedTransaction = baDataService.beginTransaction();
117 augmentedTransaction.putOperationalData(augmentIdentifier, fnu);
119 result = augmentedTransaction.commit().get();
120 assertEquals(TransactionStatus.COMMITED, result.getResult());
123 Node augmentedNode = (Node) baDataService.readOperationalData(NODE_INSTANCE_ID_BA);
125 assertEquals(NODE_KEY, augmentedNode.getKey());
126 System.out.println("Before assertion");
127 assertNotNull(augmentedNode.getAugmentation(FlowCapableNode.class));
128 FlowCapableNode readedAugmentation = augmentedNode.getAugmentation(FlowCapableNode.class);
129 assertEquals(fnu.getDescription(), readedAugmentation.getDescription());
130 assertBindingIndependentVersion(NODE_INSTANCE_ID_BI);
135 private void testNodeRemove() throws Exception {
136 DataModificationTransaction transaction = baDataService.beginTransaction();
137 transaction.removeOperationalData(NODE_INSTANCE_ID_BA);
138 RpcResult<TransactionStatus> result = transaction.commit().get();
139 assertEquals(TransactionStatus.COMMITED, result.getResult());
141 Node node = (Node) baDataService.readOperationalData(NODE_INSTANCE_ID_BA);
145 private void verifyNodes(Nodes nodes,Node original) {
146 assertNotNull(nodes);
147 assertNotNull(nodes.getNode());
148 assertEquals(1, nodes.getNode().size());
149 Node readedNode = nodes.getNode().get(0);
150 assertEquals(original.getId(), readedNode.getId());
151 assertEquals(original.getKey(), readedNode.getKey());
153 FlowCapableNode fnu = original.getAugmentation(FlowCapableNode.class);
154 FlowCapableNode readedAugment = readedNode.getAugmentation(FlowCapableNode.class);
156 assertEquals(fnu.getDescription(), readedAugment.getDescription());
157 assertEquals(fnu.getSerialNumber(), readedAugment.getSerialNumber());
161 private void assertBindingIndependentVersion(
162 org.opendaylight.yangtools.yang.data.api.InstanceIdentifier nodeId) {
163 CompositeNode node = biDataService.readOperationalData(nodeId);
167 private Nodes checkForNodes() {
168 return (Nodes) baDataService.readOperationalData(NODES_INSTANCE_ID_BA);
172 public void onDataChanged(DataChangeEvent<InstanceIdentifier<?>, DataObject> change) {
173 receivedChangeEvent = change;