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