b4f0c0fe7883550846af24d6246f15c7e8e0199f
[openflowplugin.git] / test-provider / src / main / java / org / opendaylight / openflowplugin / test / OpenflowpluginGroupTestCommandProvider.java
1 /*
2  * Copyright (c) 2013, 2015 IBM Corporation and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.openflowplugin.test;
10
11 import com.google.common.base.Preconditions;
12 import com.google.common.util.concurrent.FutureCallback;
13 import com.google.common.util.concurrent.Futures;
14 import com.google.common.util.concurrent.ListenableFuture;
15 import com.google.common.util.concurrent.MoreExecutors;
16 import java.util.ArrayList;
17 import java.util.List;
18 import org.eclipse.osgi.framework.console.CommandInterpreter;
19 import org.eclipse.osgi.framework.console.CommandProvider;
20 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
21 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
22 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
23 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCaseBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlOutCaseBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecMplsTtlCaseBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtlCaseBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCaseBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCaseBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopMplsActionCaseBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopPbbActionCaseBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCaseBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushMplsActionCaseBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushPbbActionCaseBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCaseBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetMplsTtlActionCaseBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTtlActionCaseBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetQueueActionCaseBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.copy.ttl.in._case.CopyTtlInBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.copy.ttl.out._case.CopyTtlOutBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.mpls.ttl._case.DecMplsTtlBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.nw.ttl._case.DecNwTtlBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.group.action._case.GroupActionBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.output.action._case.OutputActionBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.mpls.action._case.PopMplsActionBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.pbb.action._case.PopPbbActionBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.vlan.action._case.PopVlanActionBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.mpls.action._case.PushMplsActionBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.pbb.action._case.PushPbbActionBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.vlan.action._case.PushVlanActionBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.mpls.ttl.action._case.SetMplsTtlActionBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.ttl.action._case.SetNwTtlActionBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.queue.action._case.SetQueueActionBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.OutputPortValues;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.BucketId;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketKey;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.Group;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.GroupBuilder;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.GroupKey;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
75 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
76 import org.osgi.framework.BundleContext;
77
78 @SuppressWarnings("checkstyle:MethodName")
79 public class OpenflowpluginGroupTestCommandProvider implements CommandProvider {
80     private static final String ORIGINAL_GROUP_NAME = "Foo";
81
82     private DataBroker dataBroker;
83     private final BundleContext ctx;
84     private Group testGroup;
85     private Node testNode;
86
87     public OpenflowpluginGroupTestCommandProvider(BundleContext ctx) {
88         this.ctx = ctx;
89     }
90
91     public void onSessionInitiated(ProviderContext session) {
92         dataBroker = session.getSALService(DataBroker.class);
93         ctx.registerService(CommandProvider.class.getName(), this, null);
94         createTestNode();
95     }
96
97     private void createUserNode(String nodeRef) {
98         NodeBuilder builder = new NodeBuilder();
99         builder.setId(new NodeId(nodeRef));
100         builder.setKey(new NodeKey(builder.getId()));
101         testNode = builder.build();
102     }
103
104     private void createTestNode() {
105         NodeBuilder builder = new NodeBuilder();
106         builder.setId(new NodeId(OpenflowpluginTestActivator.NODE_ID));
107         builder.setKey(new NodeKey(builder.getId()));
108         testNode = builder.build();
109     }
110
111     private InstanceIdentifier<Node> nodeToInstanceId(Node node) {
112         return InstanceIdentifier.create(Nodes.class).child(Node.class, node.getKey());
113     }
114
115     private GroupBuilder createTestGroup(String actionType, String groupType, String groupMod) {
116         // Sample data , committing to DataStore
117
118         GroupBuilder group = new GroupBuilder();
119         BucketBuilder bucket = new BucketBuilder();
120         bucket.setBucketId(new BucketId((long) 12));
121         bucket.setKey(new BucketKey(new BucketId((long) 12)));
122
123         if (groupType == null) {
124             groupType = "g1";
125         }
126         if (actionType == null) {
127             actionType = "a1";
128         }
129
130         switch (groupType) {
131             case "g1":
132                 group.setGroupType(GroupTypes.GroupSelect);
133                 break;
134             case "g2":
135                 group.setGroupType(GroupTypes.GroupAll);
136                 break;
137             case "g3":
138                 group.setGroupType(GroupTypes.GroupIndirect);
139                 break;
140             case "g4":
141                 group.setGroupType(GroupTypes.GroupFf);
142                 break;
143             default:
144                 break;
145         }
146
147         switch (actionType) {
148             case "a1":
149                 bucket.setAction(createPopVlanAction());
150                 break;
151             case "a2":
152                 bucket.setAction(createPushVlanAction());
153                 break;
154             case "a3":
155                 bucket.setAction(createPushMplsAction());
156                 break;
157             case "a4":
158                 bucket.setAction(createPopMplsAction());
159                 break;
160             case "a5":
161                 bucket.setAction(createPopPbbAction());
162                 break;
163             case "a6":
164             case "a7":
165                 bucket.setAction(createPushPbbAction());
166                 break;
167             case "a8":
168                 bucket.setAction(createCopyTtlInAction());
169                 break;
170             case "a9":
171                 bucket.setAction(createCopyTtlOutAction());
172                 break;
173             case "a10":
174                 bucket.setAction(createDecMplsTtlAction());
175                 break;
176             case "a11":
177                 bucket.setAction(createDecNwTtlAction());
178                 break;
179             case "a12":
180                 bucket.setAction(createSetQueueAction());
181                 break;
182             case "a13":
183                 bucket.setAction(createSetNwTtlAction());
184                 break;
185             case "a14":
186                 bucket.setAction(createGroupAction());
187                 break;
188             case "a15":
189                 bucket.setAction(createSetMplsTtlAction());
190                 break;
191             case "a16":
192                 bucket.setAction(createFloodOutputAction());
193                 break;
194             case "a17":
195                 bucket.setAction(createAllOutputAction());
196                 break;
197             case "a18":
198                 bucket.setAction(createNormalOutputAction());
199                 break;
200             case "a19":
201                 bucket.setAction(creatTableOutputAction());
202                 break;
203             case "a20":
204                 bucket.setAction(createControllerAction());
205                 break;
206             case "a21":
207                 bucket.setAction(createLocalOutputAction());
208                 break;
209             case "a22":
210                 bucket.setAction(createAnyOutputAction());
211                 break;
212             case "a23":
213                 bucket.setAction(createInportOutputAction());
214                 break;
215             case "a24":
216                 bucket.setAction(null);
217                 break;
218             case "a25":
219                 bucket.setAction(createNonAppyOutputAction());
220                 break;
221             case "a26":
222                 bucket.setAction(createNonAppyPushMplsAction());
223                 break;
224             case "a27":
225                 bucket.setAction(createNonAppyPushPbbAction());
226                 break;
227             case "a28":
228                 bucket.setAction(createNonAppyPushVlanAction());
229                 break;
230             default:
231                 break;
232         }
233
234         if ("add".equals(groupMod)) {
235             bucket.setWatchGroup((long) 14);
236             bucket.setWatchPort((long) 1234);
237             bucket.setWeight(50);
238         } else {
239             bucket.setWatchGroup((long) 13);
240             bucket.setWatchPort((long) 134);
241             bucket.setWeight(30);
242         }
243
244         long id = 1;
245         GroupKey key = new GroupKey(new GroupId(id));
246         group.setKey(key);
247         // group.setInstall(false);
248         group.setGroupId(new GroupId(id));
249         group.setGroupName(ORIGINAL_GROUP_NAME);
250         group.setBarrier(false);
251         BucketsBuilder value = new BucketsBuilder();
252         List<Bucket> value1 = new ArrayList<>();
253         value1.add(bucket.build());
254         value.setBucket(value1);
255         group.setBuckets(value.build());
256         testGroup = group.build();
257         return group;
258     }
259
260
261     private List<Action> createPopVlanAction() {
262         PopVlanActionBuilder vlanAction = new PopVlanActionBuilder();
263         ActionBuilder action = new ActionBuilder();
264         action.setAction(new PopVlanActionCaseBuilder().setPopVlanAction(vlanAction.build()).build());
265         action.setKey(new ActionKey(0));
266         List<Action> actions = new ArrayList<>();
267         actions.add(action.build());
268         return actions;
269     }
270
271     private List<Action> createPushVlanAction() {
272         PushVlanActionBuilder vlan = new PushVlanActionBuilder();
273         vlan.setEthernetType(0x8100);
274         ActionBuilder action = new ActionBuilder();
275         action.setAction(new PushVlanActionCaseBuilder().setPushVlanAction(vlan.build()).build());
276         List<Action> actions = new ArrayList<>();
277         actions.add(action.build());
278         return actions;
279     }
280
281     private List<Action> createPushMplsAction() {
282         PushMplsActionBuilder push = new PushMplsActionBuilder();
283         push.setEthernetType(0x8847);
284         ActionBuilder action = new ActionBuilder();
285         action.setAction(new PushMplsActionCaseBuilder().setPushMplsAction(push.build()).build());
286         List<Action> actions = new ArrayList<>();
287         actions.add(action.build());
288         return actions;
289     }
290
291     private List<Action> createPopMplsAction() {
292         PopMplsActionBuilder popMplsActionBuilder = new PopMplsActionBuilder();
293         popMplsActionBuilder.setEthernetType(0XB);
294         ActionBuilder action = new ActionBuilder();
295         action.setAction(new PopMplsActionCaseBuilder().setPopMplsAction(popMplsActionBuilder.build()).build());
296         List<Action> actions = new ArrayList<>();
297         actions.add(action.build());
298         return actions;
299     }
300
301     private List<Action> createPopPbbAction() {
302         PopPbbActionBuilder popPbbActionBuilder = new PopPbbActionBuilder();
303         ActionBuilder action = new ActionBuilder();
304         action.setAction(new PopPbbActionCaseBuilder().setPopPbbAction(popPbbActionBuilder.build()).build());
305         List<Action> actions = new ArrayList<>();
306         actions.add(action.build());
307         return actions;
308     }
309
310     private List<Action> createPushPbbAction() {
311         PushPbbActionBuilder pbb = new PushPbbActionBuilder();
312         pbb.setEthernetType(0x88E7);
313         ActionBuilder action = new ActionBuilder();
314         action.setAction(new PushPbbActionCaseBuilder().setPushPbbAction(pbb.build()).build());
315         List<Action> actions = new ArrayList<>();
316         actions.add(action.build());
317         return actions;
318     }
319
320     private List<Action> createSetMplsTtlAction() {
321         SetMplsTtlActionBuilder setMplsTtlActionBuilder = new SetMplsTtlActionBuilder();
322         setMplsTtlActionBuilder.setMplsTtl((short) 0X1);
323         ActionBuilder action = new ActionBuilder();
324         action.setAction(new SetMplsTtlActionCaseBuilder().setSetMplsTtlAction(
325                 setMplsTtlActionBuilder.build()).build());
326         List<Action> actions = new ArrayList<>();
327         actions.add(action.build());
328         return actions;
329     }
330
331     private List<Action> createSetNwTtlAction() {
332         SetNwTtlActionBuilder setNwTtlActionBuilder = new SetNwTtlActionBuilder();
333         setNwTtlActionBuilder.setNwTtl((short) 1);
334         ActionBuilder action = new ActionBuilder();
335         action.setAction(new SetNwTtlActionCaseBuilder().setSetNwTtlAction(setNwTtlActionBuilder.build()).build());
336         List<Action> actions = new ArrayList<>();
337         actions.add(action.build());
338         return actions;
339     }
340
341     private List<Action> createSetQueueAction() {
342         SetQueueActionBuilder setQueueActionBuilder = new SetQueueActionBuilder();
343         setQueueActionBuilder.setQueueId(1L);
344         ActionBuilder action = new ActionBuilder();
345         action.setAction(new SetQueueActionCaseBuilder().setSetQueueAction(setQueueActionBuilder.build()).build());
346         action.setKey(new ActionKey(0));
347         List<Action> actions = new ArrayList<>();
348         actions.add(action.build());
349         return actions;
350     }
351
352
353     private List<Action> createCopyTtlInAction() {
354         CopyTtlInBuilder ttlin = new CopyTtlInBuilder();
355         ActionBuilder action = new ActionBuilder();
356         action.setAction(new CopyTtlInCaseBuilder().setCopyTtlIn(ttlin.build()).build());
357         List<Action> actions = new ArrayList<>();
358         actions.add(action.build());
359         return actions;
360     }
361
362     private List<Action> createCopyTtlOutAction() {
363         CopyTtlOutBuilder ttlout = new CopyTtlOutBuilder();
364         ActionBuilder action = new ActionBuilder();
365         action.setAction(new CopyTtlOutCaseBuilder().setCopyTtlOut(ttlout.build()).build());
366         List<Action> actions = new ArrayList<>();
367         actions.add(action.build());
368         return actions;
369     }
370
371     private List<Action> createDecMplsTtlAction() {
372         DecMplsTtlBuilder mpls = new DecMplsTtlBuilder();
373         ActionBuilder action = new ActionBuilder();
374         action.setAction(new DecMplsTtlCaseBuilder().setDecMplsTtl(mpls.build()).build());
375         List<Action> actions = new ArrayList<>();
376         actions.add(action.build());
377         return actions;
378     }
379
380     private List<Action> createDecNwTtlAction() {
381         DecNwTtlBuilder nwttl = new DecNwTtlBuilder();
382         ActionBuilder action = new ActionBuilder();
383         action.setAction(new DecNwTtlCaseBuilder().setDecNwTtl(nwttl.build()).build());
384
385         ActionBuilder ab = new ActionBuilder();
386         OutputActionBuilder output = new OutputActionBuilder();
387         //  output.setMaxLength(30);
388         Uri value = new Uri("2");
389         output.setOutputNodeConnector(value);
390         ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
391         ab.setKey(new ActionKey(0));
392         ab.setOrder(0);
393
394         List<Action> actions = new ArrayList<>();
395         actions.add(ab.build());
396         actions.add(action.build());
397         return actions;
398     }
399
400     private List<Action> createFloodOutputAction() {
401         ActionBuilder ab = new ActionBuilder();
402         OutputActionBuilder output = new OutputActionBuilder();
403         output.setMaxLength(30);
404         Uri value = new Uri(OutputPortValues.FLOOD.toString());
405         output.setOutputNodeConnector(value);
406         ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
407         ab.setKey(new ActionKey(0));
408
409         List<Action> actions = new ArrayList<>();
410         actions.add(ab.build());
411         return actions;
412     }
413
414     private List<Action> createAllOutputAction() {
415         ActionBuilder ab = new ActionBuilder();
416         OutputActionBuilder output = new OutputActionBuilder();
417         output.setMaxLength(30);
418         Uri value = new Uri(OutputPortValues.ALL.toString());
419         output.setOutputNodeConnector(value);
420         ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
421         ab.setKey(new ActionKey(0));
422
423         List<Action> actions = new ArrayList<>();
424         actions.add(ab.build());
425         return actions;
426     }
427
428     private List<Action> createAnyOutputAction() {
429         ActionBuilder ab = new ActionBuilder();
430         OutputActionBuilder output = new OutputActionBuilder();
431         output.setMaxLength(30);
432         Uri value = new Uri(OutputPortValues.ANY.toString());
433         output.setOutputNodeConnector(value);
434         ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
435         ab.setKey(new ActionKey(0));
436
437         List<Action> actions = new ArrayList<>();
438         actions.add(ab.build());
439         return actions;
440     }
441
442     private List<Action> createNormalOutputAction() {
443         ActionBuilder ab = new ActionBuilder();
444         OutputActionBuilder output = new OutputActionBuilder();
445         output.setMaxLength(30);
446         Uri value = new Uri(OutputPortValues.NORMAL.toString());
447         output.setOutputNodeConnector(value);
448         ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
449         ab.setKey(new ActionKey(0));
450
451         List<Action> actions = new ArrayList<>();
452         actions.add(ab.build());
453         return actions;
454     }
455
456     private List<Action> createInportOutputAction() {
457         ActionBuilder ab = new ActionBuilder();
458         OutputActionBuilder output = new OutputActionBuilder();
459         output.setMaxLength(30);
460         Uri value = new Uri(OutputPortValues.INPORT.toString());
461         output.setOutputNodeConnector(value);
462         ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
463         ab.setKey(new ActionKey(0));
464
465         List<Action> actions = new ArrayList<>();
466         actions.add(ab.build());
467         return actions;
468     }
469
470     private List<Action> creatTableOutputAction() {
471         ActionBuilder ab = new ActionBuilder();
472         OutputActionBuilder output = new OutputActionBuilder();
473         output.setMaxLength(30);
474         Uri value = new Uri(OutputPortValues.TABLE.toString());
475         output.setOutputNodeConnector(value);
476         ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
477         ab.setKey(new ActionKey(0));
478
479         List<Action> actions = new ArrayList<>();
480         actions.add(ab.build());
481         return actions;
482     }
483
484     private List<Action> createControllerAction() {
485         ActionBuilder ab = new ActionBuilder();
486         OutputActionBuilder output = new OutputActionBuilder();
487         output.setMaxLength(30);
488         Uri value = new Uri(OutputPortValues.CONTROLLER.toString());
489         output.setOutputNodeConnector(value);
490         ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
491         ab.setKey(new ActionKey(0));
492
493         List<Action> actions = new ArrayList<>();
494         actions.add(ab.build());
495         return actions;
496     }
497
498     private List<Action> createLocalOutputAction() {
499         ActionBuilder ab = new ActionBuilder();
500         OutputActionBuilder output = new OutputActionBuilder();
501         output.setMaxLength(30);
502         Uri value = new Uri(OutputPortValues.LOCAL.toString());
503         output.setOutputNodeConnector(value);
504         ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
505         ab.setKey(new ActionKey(0));
506
507         List<Action> actions = new ArrayList<>();
508         actions.add(ab.build());
509         return actions;
510     }
511
512     private List<Action> createGroupAction() {
513         GroupActionBuilder groupActionB = new GroupActionBuilder();
514         groupActionB.setGroupId(1L);
515         groupActionB.setGroup("0");
516         ActionBuilder action = new ActionBuilder();
517         action.setAction(new GroupActionCaseBuilder().setGroupAction(groupActionB.build()).build());
518         action.setKey(new ActionKey(0));
519         List<Action> actions = new ArrayList<>();
520         actions.add(action.build());
521         return actions;
522     }
523
524     private static List<Action> createNonAppyOutputAction() {
525         ActionBuilder ab = new ActionBuilder();
526         OutputActionBuilder output = new OutputActionBuilder();
527         Uri value = new Uri(OutputPortValues.CONTROLLER.toString());
528         output.setOutputNodeConnector(value);
529         //output.setMaxLength(null);
530         output.setMaxLength(66000);
531         ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
532
533         List<Action> actionList = new ArrayList<>();
534         actionList.add(ab.build());
535         return actionList;
536     }
537
538     private static List<Action> createNonAppyPushMplsAction() {
539
540         List<Action> actionList = new ArrayList<>();
541         ActionBuilder ab = new ActionBuilder();
542         PushMplsActionBuilder push = new PushMplsActionBuilder();
543         push.setEthernetType(0x8849);
544         ab.setAction(new PushMplsActionCaseBuilder().setPushMplsAction(push.build()).build());
545         actionList.add(ab.build());
546         return actionList;
547     }
548
549     private static List<Action> createNonAppyPushPbbAction() {
550
551         List<Action> actionList = new ArrayList<>();
552         ActionBuilder ab = new ActionBuilder();
553         PushPbbActionBuilder pbb = new PushPbbActionBuilder();
554         pbb.setEthernetType(0x88E8);
555         ab.setAction(new PushPbbActionCaseBuilder().setPushPbbAction(pbb.build()).build());
556         actionList.add(ab.build());
557         return actionList;
558
559     }
560
561
562     private static List<Action> createNonAppyPushVlanAction() {
563
564         List<Action> actionList = new ArrayList<>();
565         ActionBuilder ab = new ActionBuilder();
566         PushVlanActionBuilder vlan = new PushVlanActionBuilder();
567         vlan.setEthernetType(0x8101);
568         ab.setAction(new PushVlanActionCaseBuilder().setPushVlanAction(vlan.build()).build());
569         actionList.add(ab.build());
570         return actionList;
571     }
572
573     public void _removeGroup(final CommandInterpreter ci) {
574         String nref = ci.nextArgument();
575
576         if (nref == null) {
577             ci.println("test node added");
578             createTestNode();
579         } else {
580             ci.println("User node added" + nref);
581             createUserNode(nref);
582         }
583         GroupBuilder gbuilder = createTestGroup(ci.nextArgument(), ci.nextArgument(), "add");
584         ReadWriteTransaction modification = Preconditions.checkNotNull(dataBroker).newReadWriteTransaction();
585         InstanceIdentifier<Group> path1 = InstanceIdentifier.create(Nodes.class).child(Node.class, testNode.getKey())
586                 .augmentation(FlowCapableNode.class).child(Group.class, new GroupKey(gbuilder.getGroupId()));
587         modification.delete(LogicalDatastoreType.CONFIGURATION, path1);
588         ListenableFuture<Void> commitFuture = modification.submit();
589         Futures.addCallback(commitFuture, new FutureCallback<Void>() {
590             @Override
591             public void onSuccess(Void notUsed) {
592                 ci.println("Status of Group Data Loaded Transaction: success.");
593             }
594
595             @Override
596             public void onFailure(Throwable throwable) {
597                 ci.println(String.format("Status of Group Data Loaded Transaction : failure. Reason : %s", throwable));
598             }
599         }, MoreExecutors.directExecutor());
600     }
601
602     public void _addGroup(CommandInterpreter ci) {
603         String nref = ci.nextArgument();
604
605         if (nref == null) {
606             ci.println("test node added");
607             createTestNode();
608         } else {
609             ci.println("User node added" + nref);
610             createUserNode(nref);
611         }
612         createTestGroup(ci.nextArgument(), ci.nextArgument(), "add");
613         writeGroup(ci, testGroup);
614     }
615
616     private void writeGroup(final CommandInterpreter ci, Group group) {
617         ReadWriteTransaction modification = Preconditions.checkNotNull(dataBroker).newReadWriteTransaction();
618         InstanceIdentifier<Group> path1 = InstanceIdentifier.create(Nodes.class)
619                 .child(Node.class, testNode.getKey()).augmentation(FlowCapableNode.class)
620                 .child(Group.class, new GroupKey(group.getGroupId()));
621         modification.merge(LogicalDatastoreType.CONFIGURATION, nodeToInstanceId(testNode), testNode, true);
622         modification.merge(LogicalDatastoreType.CONFIGURATION, path1, group, true);
623         ListenableFuture<Void> commitFuture = modification.submit();
624         Futures.addCallback(commitFuture, new FutureCallback<Void>() {
625             @Override
626             public void onSuccess(Void notUsed) {
627                 ci.println("Status of Group Data Loaded Transaction: success.");
628             }
629
630             @Override
631             public void onFailure(Throwable throwable) {
632                 ci.println(String.format("Status of Group Data Loaded Transaction : failure. Reason : %s", throwable));
633             }
634         }, MoreExecutors.directExecutor());
635     }
636
637     public void _modifyGroup(CommandInterpreter ci) {
638         String nref = ci.nextArgument();
639
640         if (nref == null) {
641             ci.println("test node added");
642             createTestNode();
643         } else {
644             ci.println("User node added" + nref);
645             createUserNode(nref);
646         }
647         GroupBuilder group = createTestGroup(ci.nextArgument(), ci.nextArgument(), "modify");
648         writeGroup(ci, group.build());
649
650         //     group.setGroupName(originalGroupName);
651         //   writeGroup(ci, group.build());
652     }
653
654     @Override
655     public String getHelp() {
656         StringBuilder help = new StringBuilder();
657         help.append("---FRM MD-SAL Group test module---\n");
658         help.append("\t addGroup <node id>        - node ref\n");
659         help.append("\t modifyGroup <node id>        - node ref\n");
660         help.append("\t removeGroup <node id>        - node ref\n");
661
662         return help.toString();
663     }
664 }