1 package org.opendaylight.openflowplugin.test;
3 import java.util.ArrayList;
5 import java.util.concurrent.ExecutionException;
6 import java.util.concurrent.Future;
8 import org.eclipse.osgi.framework.console.CommandInterpreter;
9 import org.eclipse.osgi.framework.console.CommandProvider;
10 import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
11 import org.opendaylight.controller.md.sal.common.api.data.DataModification;
12 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
13 import org.opendaylight.controller.sal.binding.api.data.DataBrokerService;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
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.nodes.NodeKey;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.config.rev131024.Meters;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.config.rev131024.meters.Meter;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.config.rev131024.meters.MeterBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.config.rev131024.meters.MeterKey;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.BandType;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterBandType;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterFlags;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.DscpRemark;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.DscpRemarkBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.MeterBandHeaders;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.MeterBandHeadersBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeader;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeaderBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.meter.band.header.MeterBandTypes;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.meter.band.header.MeterBandTypesBuilder;
35 import org.opendaylight.yangtools.yang.binding.DataObject;
36 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
37 import org.opendaylight.yangtools.yang.common.RpcResult;
38 import org.osgi.framework.BundleContext;
40 public class OpenflowpluginMeterTestCommandProvider implements CommandProvider {
42 private DataBrokerService dataBrokerService;
43 private ProviderContext pc;
44 private final BundleContext ctx;
45 private Meter testMeter;
46 private Node testNode;
47 private final String originalMeterName = "Foo";
48 private final String updatedMeterName = "Bar";
50 public OpenflowpluginMeterTestCommandProvider(BundleContext ctx) {
54 public void onSessionInitiated(ProviderContext session) {
56 dataBrokerService = session.getSALService(DataBrokerService.class);
57 ctx.registerService(CommandProvider.class.getName(), this, null);
62 private void createUserNode(String nodeRef) {
63 NodeRef nodeOne = createNodeRef(nodeRef);
64 NodeBuilder builder = new NodeBuilder();
65 builder.setId(new NodeId(nodeRef));
66 builder.setKey(new NodeKey(builder.getId()));
67 testNode = builder.build();
70 private void createTestNode() {
71 NodeRef nodeOne = createNodeRef(OpenflowpluginTestActivator.NODE_ID);
72 NodeBuilder builder = new NodeBuilder();
73 builder.setId(new NodeId(OpenflowpluginTestActivator.NODE_ID));
74 builder.setKey(new NodeKey(builder.getId()));
75 testNode = builder.build();
78 private InstanceIdentifier<Node> nodeToInstanceId(Node node) {
79 return InstanceIdentifier.builder(Nodes.class).child(Node.class, node.getKey()).toInstance();
82 private void createTestMeter() {
83 // Sample data , committing to DataStore
84 DataModification modification = dataBrokerService.beginTransaction();
86 MeterKey key = new MeterKey(id, new NodeRef(new NodeRef(nodeToInstanceId(testNode))));
87 MeterBuilder meter = new MeterBuilder();
88 meter.setContainerName("abcd");
89 meter.setId((long) 123);
91 meter.setMeterName(originalMeterName);
92 meter.setFlags(new MeterFlags(true, false, false, false));
93 MeterBandHeadersBuilder bandHeaders = new MeterBandHeadersBuilder();
94 List<MeterBandHeader> bandHdr = new ArrayList<MeterBandHeader>();
95 MeterBandHeaderBuilder bandHeader = new MeterBandHeaderBuilder();
96 bandHeader.setRate((long) 234);
97 bandHeader.setBurstSize((long) 444);
98 DscpRemarkBuilder dscpRemark = new DscpRemarkBuilder();
99 dscpRemark.setBurstSize((long) 5);
100 dscpRemark.setPercLevel((short) 1);
101 dscpRemark.setRate((long) 12);
102 bandHeader.setBandType(dscpRemark.build());
103 MeterBandTypesBuilder bandTypes = new MeterBandTypesBuilder();
104 MeterBandType bandType = new MeterBandType(false, true, false);
105 bandTypes.setFlags(bandType);
106 bandHeader.setMeterBandTypes(bandTypes.build());
107 bandHdr.add(bandHeader.build());
108 bandHeaders.setMeterBandHeader(bandHdr);
109 meter.setMeterBandHeaders(bandHeaders.build());
111 testMeter = meter.build();
114 public void _removeMeter(CommandInterpreter ci) {
115 String nref = ci.nextArgument();
118 ci.println("test node added");
121 ci.println("User node added" + nref);
122 createUserNode(nref);
125 DataModification modification = dataBrokerService.beginTransaction();
126 InstanceIdentifier<Meter> path1 = InstanceIdentifier.builder(Meters.class)
127 .child(Meter.class, testMeter.getKey()).toInstance();
128 DataObject cls = (DataObject) modification.readConfigurationData(path1);
129 modification.removeOperationalData(nodeToInstanceId(testNode));
130 modification.removeOperationalData(path1);
131 modification.removeConfigurationData(nodeToInstanceId(testNode));
132 modification.removeConfigurationData(path1);
133 Future<RpcResult<TransactionStatus>> commitFuture = modification.commit();
135 RpcResult<TransactionStatus> result = commitFuture.get();
136 TransactionStatus status = result.getResult();
137 ci.println("Status of Meter Data Loaded Transaction: " + status);
139 } catch (InterruptedException e) {
140 // TODO Auto-generated catch block
142 } catch (ExecutionException e) {
143 // TODO Auto-generated catch block
148 public void _addMeter(CommandInterpreter ci) {
149 String nref = ci.nextArgument();
152 ci.println("test node added");
155 ci.println("User node added" + nref);
156 createUserNode(nref);
159 writeMeter(ci, testMeter);
162 private void writeMeter(CommandInterpreter ci, Meter meter) {
163 DataModification modification = dataBrokerService.beginTransaction();
164 InstanceIdentifier<Meter> path1 = InstanceIdentifier.builder(Meters.class).
165 child(Meter.class, meter.getKey())
167 DataObject cls = (DataObject) modification.readConfigurationData(path1);
168 modification.putOperationalData(nodeToInstanceId(testNode), testNode);
169 modification.putOperationalData(path1, meter);
170 modification.putConfigurationData(nodeToInstanceId(testNode), testNode);
171 modification.putConfigurationData(path1, meter);
172 Future<RpcResult<TransactionStatus>> commitFuture = modification.commit();
174 RpcResult<TransactionStatus> result = commitFuture.get();
175 TransactionStatus status = result.getResult();
176 ci.println("Status of Meter Data Loaded Transaction: " + status);
178 } catch (InterruptedException e) {
179 // TODO Auto-generated catch block
181 } catch (ExecutionException e) {
182 // TODO Auto-generated catch block
187 public void _modifyMeter(CommandInterpreter ci) {
188 String nref = ci.nextArgument();
191 ci.println("test node added");
194 ci.println("User node added" + nref);
195 createUserNode(nref);
198 MeterBuilder meter = new MeterBuilder(testMeter);
199 meter.setMeterName(updatedMeterName);
200 writeMeter(ci, meter.build());
201 meter.setMeterName(originalMeterName);
202 writeMeter(ci, meter.build());
206 public String getHelp() {
207 StringBuffer help = new StringBuffer();
208 help.append("---FRM MD-SAL Group test module---\n");
209 help.append("\t addMeter <node id> - node ref\n");
210 help.append("\t modifyMeter <node id> - node ref\n");
211 help.append("\t removeMeter <node id> - node ref\n");
213 return help.toString();
216 private static NodeRef createNodeRef(String string) {
217 NodeKey key = new NodeKey(new NodeId(string));
218 InstanceIdentifier<Node> path =
219 InstanceIdentifier.builder(Nodes.class).child(Node.class, key).toInstance();
221 return new NodeRef(path);