package org.opendaylight.openflowplugin.test; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import org.eclipse.osgi.framework.console.CommandInterpreter; import org.eclipse.osgi.framework.console.CommandProvider; import org.opendaylight.controller.md.sal.common.api.TransactionStatus; import org.opendaylight.controller.md.sal.common.api.data.DataModification; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext; import org.opendaylight.controller.sal.binding.api.data.DataBrokerService; import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCaseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.vlan.action._case.PopVlanActionBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action; import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.BucketId; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Groups; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.Group; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.GroupBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.GroupKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.RpcResult; import org.osgi.framework.BundleContext; public class OpenflowpluginGroupTestCommandProvider implements CommandProvider { private DataBrokerService dataBrokerService; private ProviderContext pc; private final BundleContext ctx; private Group testGroup; private Node testNode; private final String originalGroupName = "Foo"; private final String updatedGroupName = "Bar"; public OpenflowpluginGroupTestCommandProvider(BundleContext ctx) { this.ctx = ctx; } public void onSessionInitiated(ProviderContext session) { pc = session; dataBrokerService = session.getSALService(DataBrokerService.class); ctx.registerService(CommandProvider.class.getName(), this, null); createTestNode(); } private void createUserNode(String nodeRef) { NodeRef nodeOne = createNodeRef(nodeRef); NodeBuilder builder = new NodeBuilder(); builder.setId(new NodeId(nodeRef)); builder.setKey(new NodeKey(builder.getId())); testNode = builder.build(); } private void createTestNode() { NodeRef nodeOne = createNodeRef(OpenflowpluginTestActivator.NODE_ID); NodeBuilder builder = new NodeBuilder(); builder.setId(new NodeId(OpenflowpluginTestActivator.NODE_ID)); builder.setKey(new NodeKey(builder.getId())); testNode = builder.build(); } private InstanceIdentifier nodeToInstanceId(Node node) { return InstanceIdentifier.builder(Nodes.class).child(Node.class, node.getKey()).toInstance(); } private GroupBuilder createTestGroup() { // Sample data , committing to DataStore DataModification modification = dataBrokerService.beginTransaction(); long id = 123; GroupKey key = new GroupKey(new GroupId(id)); GroupBuilder group = new GroupBuilder(); BucketBuilder bucket = new BucketBuilder(); bucket.setBucketId(new BucketId((long) 12)); group.setKey(key); group.setInstall(false); group.setGroupId(new GroupId(id)); PopVlanActionBuilder vlanAction = new PopVlanActionBuilder(); ActionBuilder action = new ActionBuilder(); action.setAction(new PopVlanActionCaseBuilder().setPopVlanAction(vlanAction.build()).build()); action.setOrder(0); List actions = new ArrayList(); actions.add(action.build()); bucket.setAction(actions); bucket.setWatchGroup((long) 14); bucket.setWatchPort((long) 1234); bucket.setWeight(15); group.setGroupType(GroupTypes.GroupSelect); group.setGroupName(originalGroupName); group.setBarrier(false); BucketsBuilder value = new BucketsBuilder(); List value1 = new ArrayList(); value1.add(bucket.build()); value.setBucket(value1); group.setBuckets(value.build()); testGroup = group.build(); return group; } public void _removeGroup(CommandInterpreter ci) { String nref = ci.nextArgument(); if (nref == null) { ci.println("test node added"); createTestNode(); } else { ci.println("User node added" + nref); createUserNode(nref); } GroupBuilder gbuilder = createTestGroup(); DataModification modification = dataBrokerService.beginTransaction(); InstanceIdentifier path1 = InstanceIdentifier.builder(Nodes.class) .child(Node.class, testNode.getKey()).augmentation(FlowCapableNode.class) .child(Group.class, new GroupKey(testGroup.getGroupId())) .build(); DataObject cls = (DataObject) modification.readConfigurationData(path1); //modification.removeOperationalData(nodeToInstanceId(testNode)); modification.removeOperationalData(path1); //modification.removeConfigurationData(nodeToInstanceId(testNode)); modification.removeConfigurationData(path1); Future> commitFuture = modification.commit(); try { RpcResult result = commitFuture.get(); TransactionStatus status = result.getResult(); ci.println("Status of Group Data Loaded Transaction: " + status); ci.println("Status of Group Data Loaded Transaction: "); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void _addGroup(CommandInterpreter ci) { String nref = ci.nextArgument(); if (nref == null) { ci.println("test node added"); createTestNode(); } else { ci.println("User node added" + nref); createUserNode(nref); } createTestGroup(); writeGroup(ci, testGroup); } private void writeGroup(CommandInterpreter ci, Group group) { DataModification modification = dataBrokerService.beginTransaction(); InstanceIdentifier path1 = InstanceIdentifier.builder(Nodes.class) .child(Node.class, testNode.getKey()).augmentation(FlowCapableNode.class) .child(Group.class, new GroupKey(group.getGroupId())) .build(); modification.putOperationalData(nodeToInstanceId(testNode), testNode); modification.putOperationalData(path1, group); modification.putConfigurationData(nodeToInstanceId(testNode), testNode); modification.putConfigurationData(path1, group); Future> commitFuture = modification.commit(); try { RpcResult result = commitFuture.get(); TransactionStatus status = result.getResult(); ci.println("Status of Group Data Loaded Transaction: " + status); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void _modifyGroup(CommandInterpreter ci) { String nref = ci.nextArgument(); if (nref == null) { ci.println("test node added"); createTestNode(); } else { ci.println("User node added" + nref); createUserNode(nref); } GroupBuilder group = createTestGroup(); group.setGroupName(updatedGroupName); writeGroup(ci, group.build()); group.setGroupName(originalGroupName); writeGroup(ci, group.build()); } @Override public String getHelp() { StringBuffer help = new StringBuffer(); help.append("---FRM MD-SAL Group test module---\n"); help.append("\t addGroup - node ref\n"); help.append("\t modifyGroup - node ref\n"); help.append("\t removeGroup - node ref\n"); return help.toString(); } private static NodeRef createNodeRef(String string) { NodeKey key = new NodeKey(new NodeId(string)); InstanceIdentifier path = InstanceIdentifier.builder(Nodes.class).child(Node.class, key).toInstance(); return new NodeRef(path); } }