Updated OpenflowpluginTestCommandProvider
[openflowplugin.git] / test-provider / src / main / java / org / opendaylight / openflowplugin / test / OpenflowpluginGroupTestCommandProvider.java
1 package org.opendaylight.openflowplugin.test;
2
3 import java.util.ArrayList;
4 import java.util.Collections;
5 import java.util.List;
6 import java.util.concurrent.ExecutionException;
7 import java.util.concurrent.Future;
8
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;
15
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;
38
39 public class OpenflowpluginGroupTestCommandProvider implements CommandProvider {
40
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";
48
49     public OpenflowpluginGroupTestCommandProvider(BundleContext ctx) {
50         this.ctx = ctx;
51     }
52
53     public void onSessionInitiated(ProviderContext session) {
54         pc = session;
55         dataBrokerService = session.getSALService(DataBrokerService.class);
56         ctx.registerService(CommandProvider.class.getName(), this, null);
57         createTestNode();        
58     }
59
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();
66     }
67     
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();
74     }
75
76     private InstanceIdentifier<Node> nodeToInstanceId(Node node) {
77         return InstanceIdentifier.builder(Nodes.class).child(Node.class, node.getKey()).toInstance();
78     }
79
80     private void createTestGroup() {
81         // Sample data , committing to DataStore
82         DataModification modification = dataBrokerService.beginTransaction();
83         long id = 123;
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));
88         group.setKey(key);
89         group.setInstall(false);       
90         group.setId(id);
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();
109     }
110
111     public void _removeGroup(CommandInterpreter ci) {
112         String nref = ci.nextArgument();
113         
114         if (nref == null) {
115             ci.println("test node added");
116             createTestNode();
117         } else {
118             ci.println("User node added" + nref);
119             createUserNode(nref);
120         }
121         createTestGroup();
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();
131         try {
132             RpcResult<TransactionStatus> result = commitFuture.get();
133             TransactionStatus status = result.getResult();
134             ci.println("Status of Group Data Loaded Transaction: " + status);
135
136         } catch (InterruptedException e) {
137             // TODO Auto-generated catch block
138             e.printStackTrace();
139         } catch (ExecutionException e) {
140             // TODO Auto-generated catch block
141             e.printStackTrace();
142         }
143     }
144
145     public void _addGroup(CommandInterpreter ci) {
146         String nref = ci.nextArgument();
147         
148         if (nref == null) {
149             ci.println("test node added");
150             createTestNode();
151         } else {
152             ci.println("User node added" + nref);
153             createUserNode(nref);
154         }
155         createTestGroup();
156         writeGroup(ci, testGroup);
157     }
158
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())
162                 .toInstance();
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();
169         try {
170             RpcResult<TransactionStatus> result = commitFuture.get();
171             TransactionStatus status = result.getResult();
172             ci.println("Status of Group Data Loaded Transaction: " + status);
173
174         } catch (InterruptedException e) {
175             // TODO Auto-generated catch block
176             e.printStackTrace();
177         } catch (ExecutionException e) {
178             // TODO Auto-generated catch block
179             e.printStackTrace();
180         }
181     }
182
183     public void _modifyGroup(CommandInterpreter ci) {
184         String nref = ci.nextArgument();
185         
186         if (nref == null) {
187             ci.println("test node added");
188             createTestNode();
189         } else {
190             ci.println("User node added" + nref);
191             createUserNode(nref);
192         }
193         createTestGroup();
194         GroupBuilder group = new GroupBuilder(testGroup);
195         group.setGroupName(updatedGroupName);
196         writeGroup(ci, group.build());
197         group.setGroupName(originalGroupName);
198         writeGroup(ci, group.build());
199     }
200
201     @Override
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");
208        
209         return help.toString();
210     }
211     
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();
216
217         return new NodeRef(path);
218     }
219 }