2 * Copyright (c) 2013, 2015 IBM Corporation and others. All rights reserved.
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
9 package org.opendaylight.openflowplugin.test;
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;
77 @SuppressWarnings("checkstyle:MethodName")
78 public class OpenflowpluginGroupTestCommandProvider implements CommandProvider {
79 private static final String ORIGINAL_GROUP_NAME = "Foo";
81 private final DataBroker dataBroker;
82 private final BundleContext ctx;
83 private Group testGroup;
84 private Node testNode;
86 public OpenflowpluginGroupTestCommandProvider(DataBroker dataBroker, BundleContext ctx) {
87 this.dataBroker = dataBroker;
92 ctx.registerService(CommandProvider.class.getName(), this, null);
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();
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();
110 private InstanceIdentifier<Node> nodeToInstanceId(Node node) {
111 return InstanceIdentifier.create(Nodes.class).child(Node.class, node.key());
114 private GroupBuilder createTestGroup(String actionType, String groupType, String groupMod) {
115 // Sample data , committing to DataStore
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)));
122 if (groupType == null) {
125 if (actionType == null) {
131 group.setGroupType(GroupTypes.GroupSelect);
134 group.setGroupType(GroupTypes.GroupAll);
137 group.setGroupType(GroupTypes.GroupIndirect);
140 group.setGroupType(GroupTypes.GroupFf);
146 switch (actionType) {
148 bucket.setAction(createPopVlanAction());
151 bucket.setAction(createPushVlanAction());
154 bucket.setAction(createPushMplsAction());
157 bucket.setAction(createPopMplsAction());
160 bucket.setAction(createPopPbbAction());
164 bucket.setAction(createPushPbbAction());
167 bucket.setAction(createCopyTtlInAction());
170 bucket.setAction(createCopyTtlOutAction());
173 bucket.setAction(createDecMplsTtlAction());
176 bucket.setAction(createDecNwTtlAction());
179 bucket.setAction(createSetQueueAction());
182 bucket.setAction(createSetNwTtlAction());
185 bucket.setAction(createGroupAction());
188 bucket.setAction(createSetMplsTtlAction());
191 bucket.setAction(createFloodOutputAction());
194 bucket.setAction(createAllOutputAction());
197 bucket.setAction(createNormalOutputAction());
200 bucket.setAction(creatTableOutputAction());
203 bucket.setAction(createControllerAction());
206 bucket.setAction(createLocalOutputAction());
209 bucket.setAction(createAnyOutputAction());
212 bucket.setAction(createInportOutputAction());
215 bucket.setAction(null);
218 bucket.setAction(createNonAppyOutputAction());
221 bucket.setAction(createNonAppyPushMplsAction());
224 bucket.setAction(createNonAppyPushPbbAction());
227 bucket.setAction(createNonAppyPushVlanAction());
233 if ("add".equals(groupMod)) {
234 bucket.setWatchGroup((long) 14);
235 bucket.setWatchPort((long) 1234);
236 bucket.setWeight(50);
238 bucket.setWatchGroup((long) 13);
239 bucket.setWatchPort((long) 134);
240 bucket.setWeight(30);
244 GroupKey key = new GroupKey(new GroupId(id));
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();
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
379 private List<Action> createDecNwTtlAction() {
380 DecNwTtlBuilder nwttl = new DecNwTtlBuilder();
381 ActionBuilder action = new ActionBuilder();
382 action.setAction(new DecNwTtlCaseBuilder().setDecNwTtl(nwttl.build()).build());
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));
393 List<Action> actions = new ArrayList<>();
394 actions.add(ab.build());
395 actions.add(action.build());
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));
408 List<Action> actions = new ArrayList<>();
409 actions.add(ab.build());
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));
422 List<Action> actions = new ArrayList<>();
423 actions.add(ab.build());
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));
436 List<Action> actions = new ArrayList<>();
437 actions.add(ab.build());
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));
450 List<Action> actions = new ArrayList<>();
451 actions.add(ab.build());
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));
464 List<Action> actions = new ArrayList<>();
465 actions.add(ab.build());
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));
478 List<Action> actions = new ArrayList<>();
479 actions.add(ab.build());
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));
492 List<Action> actions = new ArrayList<>();
493 actions.add(ab.build());
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));
506 List<Action> actions = new ArrayList<>();
507 actions.add(ab.build());
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());
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());
532 List<Action> actionList = new ArrayList<>();
533 actionList.add(ab.build());
537 private static List<Action> createNonAppyPushMplsAction() {
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());
548 private static List<Action> createNonAppyPushPbbAction() {
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());
561 private static List<Action> createNonAppyPushVlanAction() {
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());
572 public void _removeGroup(final CommandInterpreter ci) {
573 String nref = ci.nextArgument();
576 ci.println("test node added");
579 ci.println("User node added" + nref);
580 createUserNode(nref);
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>() {
590 public void onSuccess(Void notUsed) {
591 ci.println("Status of Group Data Loaded Transaction: success.");
595 public void onFailure(Throwable throwable) {
596 ci.println(String.format("Status of Group Data Loaded Transaction : failure. Reason : %s", throwable));
598 }, MoreExecutors.directExecutor());
601 public void _addGroup(CommandInterpreter ci) {
602 String nref = ci.nextArgument();
605 ci.println("test node added");
608 ci.println("User node added" + nref);
609 createUserNode(nref);
611 createTestGroup(ci.nextArgument(), ci.nextArgument(), "add");
612 writeGroup(ci, testGroup);
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>() {
625 public void onSuccess(Void notUsed) {
626 ci.println("Status of Group Data Loaded Transaction: success.");
630 public void onFailure(Throwable throwable) {
631 ci.println(String.format("Status of Group Data Loaded Transaction : failure. Reason : %s", throwable));
633 }, MoreExecutors.directExecutor());
636 public void _modifyGroup(CommandInterpreter ci) {
637 String nref = ci.nextArgument();
640 ci.println("test node added");
643 ci.println("User node added" + nref);
644 createUserNode(nref);
646 GroupBuilder group = createTestGroup(ci.nextArgument(), ci.nextArgument(), "modify");
647 writeGroup(ci, group.build());
649 // group.setGroupName(originalGroupName);
650 // writeGroup(ci, group.build());
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");
661 return help.toString();