1 package org.opendaylight.openflowplugin.test;
3 import java.util.ArrayList;
4 import java.util.Collections;
6 import java.util.concurrent.ExecutionException;
7 import java.util.concurrent.Future;
9 import org.eclipse.osgi.framework.console.CommandInterpreter;
10 import org.eclipse.osgi.framework.console.CommandProvider;
11 import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
12 import org.opendaylight.controller.md.sal.common.api.data.DataModification;
13 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
14 import org.opendaylight.controller.sal.binding.api.data.DataBrokerService;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionBuilder;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.config.rev131024.Groups;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.config.rev131024.groups.Group;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.config.rev131024.groups.GroupBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.config.rev131024.groups.GroupKey;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.BucketId;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
34 import org.opendaylight.yangtools.yang.binding.DataObject;
35 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
36 import org.opendaylight.yangtools.yang.common.RpcResult;
37 import org.osgi.framework.BundleContext;
39 public class OpenflowpluginGroupTestCommandProvider implements CommandProvider {
41 private DataBrokerService dataBrokerService;
42 private ProviderContext pc;
43 private final BundleContext ctx;
44 private Group testGroup;
45 private Node testNode;
46 private final String originalGroupName = "Foo";
47 private final String updatedGroupName = "Bar";
49 public OpenflowpluginGroupTestCommandProvider(BundleContext ctx) {
53 public void onSessionInitiated(ProviderContext session) {
55 dataBrokerService = session.getSALService(DataBrokerService.class);
56 ctx.registerService(CommandProvider.class.getName(), this, null);
60 private void createUserNode(String nodeRef) {
61 NodeRef nodeOne = createNodeRef(nodeRef);
62 NodeBuilder builder = new NodeBuilder();
63 builder.setId(new NodeId(nodeRef));
64 builder.setKey(new NodeKey(builder.getId()));
65 testNode = builder.build();
68 private void createTestNode() {
69 NodeRef nodeOne = createNodeRef(OpenflowpluginTestActivator.NODE_ID);
70 NodeBuilder builder = new NodeBuilder();
71 builder.setId(new NodeId(OpenflowpluginTestActivator.NODE_ID));
72 builder.setKey(new NodeKey(builder.getId()));
73 testNode = builder.build();
76 private InstanceIdentifier<Node> nodeToInstanceId(Node node) {
77 return InstanceIdentifier.builder(Nodes.class).child(Node.class, node.getKey()).toInstance();
80 private void createTestGroup() {
81 // Sample data , committing to DataStore
82 DataModification modification = dataBrokerService.beginTransaction();
84 GroupKey key = new GroupKey(id, new NodeRef(new NodeRef(nodeToInstanceId(testNode))));
85 GroupBuilder group = new GroupBuilder();
86 BucketBuilder bucket = new BucketBuilder();
87 bucket.setBucketId(new BucketId((long) 12));
89 group.setInstall(false);
91 PopVlanActionBuilder vlanAction = new PopVlanActionBuilder();
92 ActionBuilder action = new ActionBuilder();
93 action.setAction(vlanAction.build());
94 List<Action> actions = new ArrayList<Action>();
95 actions.add(action.build());
96 bucket.setAction(actions);
97 bucket.setWatchGroup((long) 123);
98 bucket.setWatchPort((long) 1234);
99 bucket.setWeight(123);
100 group.setGroupType(GroupTypes.GroupSelect);
101 group.setGroupName(originalGroupName);
102 group.setBarrier(false);
103 BucketsBuilder value = new BucketsBuilder();
104 List<Bucket> value1 = new ArrayList<Bucket>();
105 value1.add(bucket.build());
106 value.setBucket(value1);
107 group.setBuckets(value.build());
108 testGroup = group.build();
111 public void _removeGroup(CommandInterpreter ci) {
112 String nref = ci.nextArgument();
115 ci.println("test node added");
118 ci.println("User node added" + nref);
119 createUserNode(nref);
122 DataModification modification = dataBrokerService.beginTransaction();
123 InstanceIdentifier<Group> path1 = InstanceIdentifier.builder(Groups.class)
124 .child(Group.class, testGroup.getKey()).toInstance();
125 DataObject cls = (DataObject) modification.readConfigurationData(path1);
126 modification.removeOperationalData(nodeToInstanceId(testNode));
127 modification.removeOperationalData(path1);
128 modification.removeConfigurationData(nodeToInstanceId(testNode));
129 modification.removeConfigurationData(path1);
130 Future<RpcResult<TransactionStatus>> commitFuture = modification.commit();
132 RpcResult<TransactionStatus> result = commitFuture.get();
133 TransactionStatus status = result.getResult();
134 ci.println("Status of Group Data Loaded Transaction: " + status);
136 } catch (InterruptedException e) {
137 // TODO Auto-generated catch block
139 } catch (ExecutionException e) {
140 // TODO Auto-generated catch block
145 public void _addGroup(CommandInterpreter ci) {
146 String nref = ci.nextArgument();
149 ci.println("test node added");
152 ci.println("User node added" + nref);
153 createUserNode(nref);
156 writeGroup(ci, testGroup);
159 private void writeGroup(CommandInterpreter ci, Group group) {
160 DataModification modification = dataBrokerService.beginTransaction();
161 InstanceIdentifier<Group> path1 = InstanceIdentifier.builder(Groups.class).child(Group.class, group.getKey())
163 DataObject cls = (DataObject) modification.readConfigurationData(path1);
164 modification.putOperationalData(nodeToInstanceId(testNode), testNode);
165 modification.putOperationalData(path1, group);
166 modification.putConfigurationData(nodeToInstanceId(testNode), testNode);
167 modification.putConfigurationData(path1, group);
168 Future<RpcResult<TransactionStatus>> commitFuture = modification.commit();
170 RpcResult<TransactionStatus> result = commitFuture.get();
171 TransactionStatus status = result.getResult();
172 ci.println("Status of Group Data Loaded Transaction: " + status);
174 } catch (InterruptedException e) {
175 // TODO Auto-generated catch block
177 } catch (ExecutionException e) {
178 // TODO Auto-generated catch block
183 public void _modifyGroup(CommandInterpreter ci) {
184 String nref = ci.nextArgument();
187 ci.println("test node added");
190 ci.println("User node added" + nref);
191 createUserNode(nref);
194 GroupBuilder group = new GroupBuilder(testGroup);
195 group.setGroupName(updatedGroupName);
196 writeGroup(ci, group.build());
197 group.setGroupName(originalGroupName);
198 writeGroup(ci, group.build());
202 public String getHelp() {
203 StringBuffer help = new StringBuffer();
204 help.append("---FRM MD-SAL Group test module---\n");
205 help.append("\t addGroup <node id> - node ref\n");
206 help.append("\t modifyGroup <node id> - node ref\n");
207 help.append("\t removeGroup <node id> - node ref\n");
209 return help.toString();
212 private static NodeRef createNodeRef(String string) {
213 NodeKey key = new NodeKey(new NodeId(string));
214 InstanceIdentifier<Node> path =
215 InstanceIdentifier.builder(Nodes.class).child(Node.class, key).toInstance();
217 return new NodeRef(path);