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.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;
78 @SuppressWarnings("checkstyle:MethodName")
79 public class OpenflowpluginGroupTestCommandProvider implements CommandProvider {
80 private static final String ORIGINAL_GROUP_NAME = "Foo";
82 private DataBroker dataBroker;
83 private final BundleContext ctx;
84 private Group testGroup;
85 private Node testNode;
87 public OpenflowpluginGroupTestCommandProvider(BundleContext ctx) {
91 public void onSessionInitiated(ProviderContext session) {
92 dataBroker = session.getSALService(DataBroker.class);
93 ctx.registerService(CommandProvider.class.getName(), this, null);
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();
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();
111 private InstanceIdentifier<Node> nodeToInstanceId(Node node) {
112 return InstanceIdentifier.create(Nodes.class).child(Node.class, node.getKey());
115 private GroupBuilder createTestGroup(String actionType, String groupType, String groupMod) {
116 // Sample data , committing to DataStore
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)));
123 if (groupType == null) {
126 if (actionType == null) {
132 group.setGroupType(GroupTypes.GroupSelect);
135 group.setGroupType(GroupTypes.GroupAll);
138 group.setGroupType(GroupTypes.GroupIndirect);
141 group.setGroupType(GroupTypes.GroupFf);
147 switch (actionType) {
149 bucket.setAction(createPopVlanAction());
152 bucket.setAction(createPushVlanAction());
155 bucket.setAction(createPushMplsAction());
158 bucket.setAction(createPopMplsAction());
161 bucket.setAction(createPopPbbAction());
165 bucket.setAction(createPushPbbAction());
168 bucket.setAction(createCopyTtlInAction());
171 bucket.setAction(createCopyTtlOutAction());
174 bucket.setAction(createDecMplsTtlAction());
177 bucket.setAction(createDecNwTtlAction());
180 bucket.setAction(createSetQueueAction());
183 bucket.setAction(createSetNwTtlAction());
186 bucket.setAction(createGroupAction());
189 bucket.setAction(createSetMplsTtlAction());
192 bucket.setAction(createFloodOutputAction());
195 bucket.setAction(createAllOutputAction());
198 bucket.setAction(createNormalOutputAction());
201 bucket.setAction(creatTableOutputAction());
204 bucket.setAction(createControllerAction());
207 bucket.setAction(createLocalOutputAction());
210 bucket.setAction(createAnyOutputAction());
213 bucket.setAction(createInportOutputAction());
216 bucket.setAction(null);
219 bucket.setAction(createNonAppyOutputAction());
222 bucket.setAction(createNonAppyPushMplsAction());
225 bucket.setAction(createNonAppyPushPbbAction());
228 bucket.setAction(createNonAppyPushVlanAction());
234 if ("add".equals(groupMod)) {
235 bucket.setWatchGroup((long) 14);
236 bucket.setWatchPort((long) 1234);
237 bucket.setWeight(50);
239 bucket.setWatchGroup((long) 13);
240 bucket.setWatchPort((long) 134);
241 bucket.setWeight(30);
245 GroupKey key = new GroupKey(new GroupId(id));
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();
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
380 private List<Action> createDecNwTtlAction() {
381 DecNwTtlBuilder nwttl = new DecNwTtlBuilder();
382 ActionBuilder action = new ActionBuilder();
383 action.setAction(new DecNwTtlCaseBuilder().setDecNwTtl(nwttl.build()).build());
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));
394 List<Action> actions = new ArrayList<>();
395 actions.add(ab.build());
396 actions.add(action.build());
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));
409 List<Action> actions = new ArrayList<>();
410 actions.add(ab.build());
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));
423 List<Action> actions = new ArrayList<>();
424 actions.add(ab.build());
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));
437 List<Action> actions = new ArrayList<>();
438 actions.add(ab.build());
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));
451 List<Action> actions = new ArrayList<>();
452 actions.add(ab.build());
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));
465 List<Action> actions = new ArrayList<>();
466 actions.add(ab.build());
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));
479 List<Action> actions = new ArrayList<>();
480 actions.add(ab.build());
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));
493 List<Action> actions = new ArrayList<>();
494 actions.add(ab.build());
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));
507 List<Action> actions = new ArrayList<>();
508 actions.add(ab.build());
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());
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());
533 List<Action> actionList = new ArrayList<>();
534 actionList.add(ab.build());
538 private static List<Action> createNonAppyPushMplsAction() {
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());
549 private static List<Action> createNonAppyPushPbbAction() {
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());
562 private static List<Action> createNonAppyPushVlanAction() {
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());
573 public void _removeGroup(final CommandInterpreter ci) {
574 String nref = ci.nextArgument();
577 ci.println("test node added");
580 ci.println("User node added" + nref);
581 createUserNode(nref);
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>() {
591 public void onSuccess(Void notUsed) {
592 ci.println("Status of Group Data Loaded Transaction: success.");
596 public void onFailure(Throwable throwable) {
597 ci.println(String.format("Status of Group Data Loaded Transaction : failure. Reason : %s", throwable));
599 }, MoreExecutors.directExecutor());
602 public void _addGroup(CommandInterpreter ci) {
603 String nref = ci.nextArgument();
606 ci.println("test node added");
609 ci.println("User node added" + nref);
610 createUserNode(nref);
612 createTestGroup(ci.nextArgument(), ci.nextArgument(), "add");
613 writeGroup(ci, testGroup);
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>() {
626 public void onSuccess(Void notUsed) {
627 ci.println("Status of Group Data Loaded Transaction: success.");
631 public void onFailure(Throwable throwable) {
632 ci.println(String.format("Status of Group Data Loaded Transaction : failure. Reason : %s", throwable));
634 }, MoreExecutors.directExecutor());
637 public void _modifyGroup(CommandInterpreter ci) {
638 String nref = ci.nextArgument();
641 ci.println("test node added");
644 ci.println("User node added" + nref);
645 createUserNode(nref);
647 GroupBuilder group = createTestGroup(ci.nextArgument(), ci.nextArgument(), "modify");
648 writeGroup(ci, group.build());
650 // group.setGroupName(originalGroupName);
651 // writeGroup(ci, group.build());
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");
662 return help.toString();