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