Added group and meter test methods. 44/3244/11
authorAnilkumar Vishnoi <avishnoi@in.ibm.com>
Sat, 30 Nov 2013 10:50:53 +0000 (16:20 +0530)
committerAnilkumar Vishnoi <avishnoi@in.ibm.com>
Sat, 30 Nov 2013 19:45:44 +0000 (01:15 +0530)
Signed-off-by: Prasanna Huddar <prasanna.huddar@ericsson.com>
Change-Id: If90067d8aa69b54c0b4b1eaf7b95213e8eb21d4e
Signed-off-by: Anilkumar Vishnoi <avishnoi@in.ibm.com>
test-provider/src/main/java/org/opendaylight/openflowplugin/test/OpenflowpluginGroupTestCommandProvider.java [new file with mode: 0644]
test-provider/src/main/java/org/opendaylight/openflowplugin/test/OpenflowpluginGroupTestServiceProvider.xtend [new file with mode: 0644]
test-provider/src/main/java/org/opendaylight/openflowplugin/test/OpenflowpluginMeterTestCommandProvider.java [new file with mode: 0644]
test-provider/src/main/java/org/opendaylight/openflowplugin/test/OpenflowpluginMeterTestServiceProvider.xtend [new file with mode: 0644]
test-provider/src/main/java/org/opendaylight/openflowplugin/test/OpenflowpluginTestActivator.xtend
test-provider/src/main/java/org/opendaylight/openflowplugin/test/OpenflowpluginTestCommandProvider.java

diff --git a/test-provider/src/main/java/org/opendaylight/openflowplugin/test/OpenflowpluginGroupTestCommandProvider.java b/test-provider/src/main/java/org/opendaylight/openflowplugin/test/OpenflowpluginGroupTestCommandProvider.java
new file mode 100644 (file)
index 0000000..02623f7
--- /dev/null
@@ -0,0 +1,204 @@
+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.group.config.rev131024.Groups;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.config.rev131024.groups.Group;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.config.rev131024.groups.GroupBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.config.rev131024.groups.GroupKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
+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.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<Node> nodeToInstanceId(Node node) {
+        return InstanceIdentifier.builder(Nodes.class).child(Node.class, node.getKey()).toInstance();
+    }
+
+    private void createTestGroup() {
+        // Sample data , committing to DataStore
+        DataModification modification = dataBrokerService.beginTransaction();
+        long id = 123;
+        GroupKey key = new GroupKey(id, new NodeRef(new NodeRef(nodeToInstanceId(testNode))));
+        GroupBuilder group = new GroupBuilder();
+        BucketBuilder bucket = new BucketBuilder();
+        bucket.setOrder(12);
+        group.setKey(key);
+        group.setInstall(false);
+        group.setId(id);
+        group.setGroupType(GroupTypes.GroupSelect);
+        group.setGroupName(originalGroupName);
+        group.setBarrier(false);
+        BucketsBuilder value = new BucketsBuilder();
+        List<Bucket> value1 = new ArrayList<Bucket>();
+        value1.add(bucket.build());
+        value.setBucket(value1);
+        group.setBuckets(value.build());
+        testGroup = group.build();
+    }
+
+    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);
+        }
+        createTestGroup();
+        DataModification modification = dataBrokerService.beginTransaction();
+        InstanceIdentifier<Group> path1 = InstanceIdentifier.builder(Groups.class)
+                .child(Group.class, testGroup.getKey()).toInstance();
+        DataObject cls = (DataObject) modification.readConfigurationData(path1);
+        modification.removeOperationalData(nodeToInstanceId(testNode));
+        modification.removeOperationalData(path1);
+        modification.removeConfigurationData(nodeToInstanceId(testNode));
+        modification.removeConfigurationData(path1);
+        Future<RpcResult<TransactionStatus>> commitFuture = modification.commit();
+        try {
+            RpcResult<TransactionStatus> 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 _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<Group> path1 = InstanceIdentifier.builder(Groups.class).child(Group.class, group.getKey())
+                .toInstance();
+        DataObject cls = (DataObject) modification.readConfigurationData(path1);
+        modification.putOperationalData(nodeToInstanceId(testNode), testNode);
+        modification.putOperationalData(path1, group);
+        modification.putConfigurationData(nodeToInstanceId(testNode), testNode);
+        modification.putConfigurationData(path1, group);
+        Future<RpcResult<TransactionStatus>> commitFuture = modification.commit();
+        try {
+            RpcResult<TransactionStatus> 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);
+        }
+        createTestGroup();
+        GroupBuilder group = new GroupBuilder(testGroup);
+        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 id>        - node ref\n");
+        help.append("\t modifyGroup <node id>        - node ref\n");
+        help.append("\t removeGroup <node id>        - node ref\n");
+       
+        return help.toString();
+    }
+    
+    private static NodeRef createNodeRef(String string) {
+        NodeKey key = new NodeKey(new NodeId(string));
+        InstanceIdentifier<Node> path =
+                InstanceIdentifier.builder(Nodes.class).child(Node.class, key).toInstance();
+
+        return new NodeRef(path);
+    }
+}
diff --git a/test-provider/src/main/java/org/opendaylight/openflowplugin/test/OpenflowpluginGroupTestServiceProvider.xtend b/test-provider/src/main/java/org/opendaylight/openflowplugin/test/OpenflowpluginGroupTestServiceProvider.xtend
new file mode 100644 (file)
index 0000000..6904bac
--- /dev/null
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.openflowplugin.test
+
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RoutedRpcRegistration
+import org.opendaylight.controller.sal.binding.api.NotificationProviderService
+import org.opendaylight.controller.sal.binding.api.data.DataProviderService
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInput
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowInput
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.UpdateFlowInput
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeContext
+import org.opendaylight.yangtools.concepts.CompositeObjectRegistration
+import org.opendaylight.yangtools.concepts.Registration
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier
+import org.opendaylight.yangtools.yang.binding.NotificationListener
+import org.slf4j.LoggerFactory
+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.NodeKey
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.SalGroupService
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.AddGroupInput
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.RemoveGroupInput
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.UpdateGroupInput
+
+class OpenflowpluginTestServiceProvider implements AutoCloseable, SalGroupService {
+
+
+    static val LOG = LoggerFactory.getLogger(OpenflowpluginTestServiceProvider);
+
+    @Property
+    DataProviderService dataService;
+    
+    @Property
+    RoutedRpcRegistration<SalGroupService> groupRegistration;
+        
+
+    @Property
+    NotificationProviderService notificationService;
+
+
+    def void start() {
+        LOG.info("SalGroupServiceProvider Started.");
+        
+    }
+
+
+    override close() {
+       LOG.info("SalGroupServiceProvide stopped.");
+        groupRegistration.close;
+    }
+    
+    override addGroup(AddGroupInput input) {
+        LOG.info("addGroup - " + input);
+        return null;
+        
+    }
+    
+    override removeGroup(RemoveGroupInput input) {
+        LOG.info("removeGroup - " + input);
+        return null;
+    }
+    
+    override updateGroup(UpdateGroupInput input) {
+        LOG.info("updateGroup - " + input);
+        return null;
+    }
+    
+    
+    def CompositeObjectRegistration<OpenflowpluginTestServiceProvider> register(ProviderContext ctx) {
+        val builder = CompositeObjectRegistration
+                .<OpenflowpluginTestServiceProvider> builderFor(this);
+
+        groupRegistration = ctx.addRoutedRpcImplementation(SalGroupService, this);
+        val nodeIndentifier = InstanceIdentifier.builder(Nodes).child(Node, new NodeKey(new NodeId(OpenflowpluginTestActivator.NODE_ID)));
+        groupRegistration.registerPath(NodeContext, nodeIndentifier.toInstance());
+        builder.add(groupRegistration);
+
+        return builder.toInstance();
+    }
+    
+}
+
+
diff --git a/test-provider/src/main/java/org/opendaylight/openflowplugin/test/OpenflowpluginMeterTestCommandProvider.java b/test-provider/src/main/java/org/opendaylight/openflowplugin/test/OpenflowpluginMeterTestCommandProvider.java
new file mode 100644 (file)
index 0000000..ba30155
--- /dev/null
@@ -0,0 +1,205 @@
+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.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.yang.gen.v1.urn.opendaylight.meter.config.rev131024.Meters;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.config.rev131024.meters.Meter;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.config.rev131024.meters.MeterBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.config.rev131024.meters.MeterKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.BandType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterFlags;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.DscpRemark;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.DscpRemarkBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.MeterBandHeaders;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.MeterBandHeadersBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeader;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeaderBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.meter.band.header.MeterBandTypesBuilder;
+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 OpenflowpluginMeterTestCommandProvider implements CommandProvider {
+
+    private DataBrokerService dataBrokerService;
+    private ProviderContext pc;
+    private final BundleContext ctx;
+    private Meter testMeter;
+    private Node testNode;
+    private final String originalMeterName = "Foo";
+    private final String updatedMeterName = "Bar";
+
+    public OpenflowpluginMeterTestCommandProvider(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();
+        createTestMeter();
+    }
+
+    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<Node> nodeToInstanceId(Node node) {
+        return InstanceIdentifier.builder(Nodes.class).child(Node.class, node.getKey()).toInstance();
+    }
+
+    private void createTestMeter() {
+        // Sample data , committing to DataStore
+        DataModification modification = dataBrokerService.beginTransaction();
+        long id = 123;
+        MeterKey key = new MeterKey(id, new NodeRef(new NodeRef(nodeToInstanceId(testNode))));
+        MeterBuilder meter = new MeterBuilder();
+        meter.setContainerName("abcd");     
+        meter.setId((long) 123);
+        meter.setKey(key);
+        meter.setMeterName(originalMeterName);
+        meter.setFlags(new MeterFlags(true, false, false, false));   
+        MeterBandHeadersBuilder bandHeaders = new MeterBandHeadersBuilder();
+        List<MeterBandHeader> bandHdr = new ArrayList<MeterBandHeader>();
+        MeterBandHeaderBuilder bandHeader = new MeterBandHeaderBuilder();
+        bandHeader.setRate((long) 234);
+        bandHeader.setBurstSize((long) 444);
+        DscpRemarkBuilder dscpRemark = new DscpRemarkBuilder();
+        dscpRemark.setBurstSize((long) 5);
+        dscpRemark.setPercLevel((short) 1);
+        dscpRemark.setRate((long) 12);
+        bandHeader.setBandType(dscpRemark.build());
+        bandHdr.add(bandHeader.build());
+        bandHeaders.setMeterBandHeader(bandHdr);
+        meter.setMeterBandHeaders(bandHeaders.build());
+        testMeter = meter.build();
+    }
+
+    public void _removeMeter(CommandInterpreter ci) {
+        String nref = ci.nextArgument();
+        
+        if (nref == null) {
+            ci.println("test node added");
+            createTestNode();
+        } else {
+            ci.println("User node added" + nref);
+            createUserNode(nref);
+        }
+        DataModification modification = dataBrokerService.beginTransaction();
+        InstanceIdentifier<Meter> path1 = InstanceIdentifier.builder(Meters.class)
+                .child(Meter.class, testMeter.getKey()).toInstance();
+        DataObject cls = (DataObject) modification.readConfigurationData(path1);
+        modification.removeOperationalData(nodeToInstanceId(testNode));
+        modification.removeOperationalData(path1);
+        modification.removeConfigurationData(nodeToInstanceId(testNode));
+        modification.removeConfigurationData(path1);
+        Future<RpcResult<TransactionStatus>> commitFuture = modification.commit();
+        try {
+            RpcResult<TransactionStatus> result = commitFuture.get();
+            TransactionStatus status = result.getResult();
+            ci.println("Status of Meter 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 _addMeter(CommandInterpreter ci) {
+        writeMeter(ci, testMeter);
+    }
+
+    private void writeMeter(CommandInterpreter ci, Meter meter) {
+        DataModification modification = dataBrokerService.beginTransaction();
+        InstanceIdentifier<Meter> path1 = InstanceIdentifier.builder(Meters.class).
+                child(Meter.class, meter.getKey())
+                .toInstance();
+        DataObject cls = (DataObject) modification.readConfigurationData(path1);
+        modification.putOperationalData(nodeToInstanceId(testNode), testNode);
+        modification.putOperationalData(path1, meter);
+        modification.putConfigurationData(nodeToInstanceId(testNode), testNode);
+        modification.putConfigurationData(path1, meter);
+        Future<RpcResult<TransactionStatus>> commitFuture = modification.commit();
+        try {
+            RpcResult<TransactionStatus> result = commitFuture.get();
+            TransactionStatus status = result.getResult();
+            ci.println("Status of Meter 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 _modifyMeter(CommandInterpreter ci) {
+        String nref = ci.nextArgument();
+        
+        if (nref == null) {
+            ci.println("test node added");
+            createTestNode();
+        } else {
+            ci.println("User node added" + nref);
+            createUserNode(nref);
+        }
+        createTestMeter();
+        MeterBuilder meter = new MeterBuilder(testMeter);
+        meter.setMeterName(updatedMeterName);
+        writeMeter(ci, meter.build());
+        meter.setMeterName(originalMeterName);
+        writeMeter(ci, meter.build());
+    }
+    
+    @Override
+    public String getHelp() {
+        StringBuffer help = new StringBuffer();
+        help.append("---FRM MD-SAL Group test module---\n");
+        help.append("\t addMeter <node id>        - node ref\n");
+        help.append("\t modifyMeter <node id>        - node ref\n");
+        help.append("\t removeMeter <node id>        - node ref\n");
+       
+        return help.toString();
+    }
+    
+    private static NodeRef createNodeRef(String string) {
+        NodeKey key = new NodeKey(new NodeId(string));
+        InstanceIdentifier<Node> path =
+                InstanceIdentifier.builder(Nodes.class).child(Node.class, key).toInstance();
+
+        return new NodeRef(path);
+    }
+}
diff --git a/test-provider/src/main/java/org/opendaylight/openflowplugin/test/OpenflowpluginMeterTestServiceProvider.xtend b/test-provider/src/main/java/org/opendaylight/openflowplugin/test/OpenflowpluginMeterTestServiceProvider.xtend
new file mode 100644 (file)
index 0000000..95b5be3
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ * 
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.openflowplugin.test
+
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RoutedRpcRegistration
+import org.opendaylight.controller.sal.binding.api.NotificationProviderService
+import org.opendaylight.controller.sal.binding.api.data.DataProviderService
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeContext
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId
+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.NodeKey
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterInput
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.RemoveMeterInput
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.SalMeterService
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.UpdateMeterInput
+import org.opendaylight.yangtools.concepts.CompositeObjectRegistration
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier
+import org.slf4j.LoggerFactory
+
+class OpenflowpluginTestServiceProvider implements AutoCloseable, SalMeterService {
+
+
+    static val LOG = LoggerFactory.getLogger(OpenflowpluginTestServiceProvider);
+
+    @Property
+    DataProviderService dataService;
+    
+    @Property
+    RoutedRpcRegistration<SalMeterService> meterRegistration;
+        
+
+    @Property
+    NotificationProviderService notificationService;
+
+
+    def void start() {
+        LOG.info("SalMeterServiceProvider Started.");
+        
+    }
+
+
+    override close() {
+       LOG.info("SalMeterServiceProvide stopped.");
+        meterRegistration.close;
+    }
+    
+    override addMeter(AddMeterInput input) {
+        LOG.info("addMeter - " + input);
+        return null;
+        
+    }
+    
+    override removeMeter(RemoveMeterInput input) {
+        LOG.info("removeMeter - " + input);
+        return null;
+    }
+    
+    override updateMeter(UpdateMeterInput input) {
+        LOG.info("updateMeter - " + input);
+        return null;
+    }
+    
+    
+    def CompositeObjectRegistration<OpenflowpluginTestServiceProvider> register(ProviderContext ctx) {
+        val builder = CompositeObjectRegistration
+                .<OpenflowpluginTestServiceProvider> builderFor(this);
+
+        meterRegistration = ctx.addRoutedRpcImplementation(SalMeterService, this);
+        val nodeIndentifier = InstanceIdentifier.builder(Nodes).child(Node, new NodeKey(new NodeId(OpenflowpluginTestActivator.NODE_ID)));
+        meterRegistration.registerPath(NodeContext, nodeIndentifier.toInstance());
+        builder.add(meterRegistration);
+
+        return builder.toInstance();
+    }
+    
+}
+
+
index 7cd12d2cb672988ae49516d3fd90a551a3a6bf2b..fd69becdb6f90fd8d377ca1c58c372e3eefe9f02 100644 (file)
@@ -17,6 +17,8 @@ class OpenflowpluginTestActivator extends AbstractBindingAwareProvider {
 
     static var OpenflowpluginTestServiceProvider provider = new OpenflowpluginTestServiceProvider();
     var OpenflowpluginTestCommandProvider cmdProvider;
+    var OpenflowpluginGroupTestCommandProvider cmdGroupProvider;
+    var OpenflowpluginMeterTestCommandProvider cmdMeterProvider;
     public static final String NODE_ID =  "foo:node:1";
 
     override onSessionInitiated(ProviderContext session) {
@@ -25,13 +27,15 @@ class OpenflowpluginTestActivator extends AbstractBindingAwareProvider {
         provider.start();
         provider.register(session);
         cmdProvider.onSessionInitiated(session);
-        
+        cmdGroupProvider.onSessionInitiated(session);
+        cmdMeterProvider.onSessionInitiated(session);
     }
     
     override startImpl(BundleContext ctx) {
         super.startImpl(ctx);
         cmdProvider = new OpenflowpluginTestCommandProvider(ctx);
-        
+        cmdGroupProvider = new OpenflowpluginGroupTestCommandProvider(ctx);
+        cmdMeterProvider = new OpenflowpluginMeterTestCommandProvider(ctx);
     }
 
     override protected stopImpl(BundleContext context) {
index 514ac3142d0fb91ce542fe9f3b24d022096c8657..a1fd88de82c191614a538b206aaf50ca42768dc5 100644 (file)
@@ -1,4 +1,3 @@
-
 /*
  * Copyright (c) 2013 Ericsson , Inc. and others.  All rights reserved.
  *
@@ -9,7 +8,6 @@
 
 package org.opendaylight.openflowplugin.test;
 
-
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.ExecutionException;
@@ -22,8 +20,8 @@ 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.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtl;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtlBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DropAction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DropActionBuilder;
 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.config.rev130819.Flows;
@@ -41,116 +39,119 @@ 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.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetTypeBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatchBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4Match;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.EthType;
 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 OpenflowpluginTestCommandProvider implements CommandProvider {
 
-       private DataBrokerService dataBrokerService;
-       private ProviderContext pc;
-       private BundleContext ctx;
-       private FlowBuilder testFlow;
-    private NodeBuilder testNode;
+    private DataBrokerService dataBrokerService;
+    private ProviderContext pc;
+    private BundleContext ctx;
+    private Flow testFlow;
+    private Node testNode;
     private String originalFlowName = "Foo";
     private String updatedFlowName = "Bar";
 
-       public OpenflowpluginTestCommandProvider(BundleContext ctx) {
-           this.ctx = ctx;
-       }
+    public OpenflowpluginTestCommandProvider(BundleContext ctx) {
+        this.ctx = ctx;
+    }
 
-       public void onSessionInitiated(ProviderContext session) {
-           pc = session;
-               dataBrokerService = session.getSALService(DataBrokerService.class);
-               ctx.registerService(CommandProvider.class.getName(), this, null);
-               createTestFlow(createTestNode(null));
+    public void onSessionInitiated(ProviderContext session) {
+        pc = session;
+        dataBrokerService = session.getSALService(DataBrokerService.class);
+        ctx.registerService(CommandProvider.class.getName(), this, null);
     }
 
-       private NodeBuilder createTestNode(String nodeId) {
-           if(nodeId == null) {
-               nodeId = OpenflowpluginTestActivator.NODE_ID;
-           }
-           NodeRef nodeOne = createNodeRef(nodeId);
+    private void createTestNode() {
+        NodeRef nodeOne = createNodeRef(OpenflowpluginTestActivator.NODE_ID);
         NodeBuilder builder = new NodeBuilder();
-        builder.setId(new NodeId(nodeId));
+        builder.setId(new NodeId(OpenflowpluginTestActivator.NODE_ID));
         builder.setKey(new NodeKey(builder.getId()));
-        testNode = builder;
-        return builder;
-       }
+        testNode = builder.build();
+    }
 
-       private InstanceIdentifier<Node> nodeBuilderToInstanceId(NodeBuilder node) {
-           return InstanceIdentifier.builder(Nodes.class).child(Node.class, node.getKey()).toInstance();
-       }
+    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 FlowBuilder createTestFlow(NodeBuilder nodeBuilder) {
+    private InstanceIdentifier<Node> nodeToInstanceId(Node node) {
+        return InstanceIdentifier.builder(Nodes.class).child(Node.class, node.getKey()).toInstance();
+    }
 
+    private void createTestFlow() {
+        // Sample data , committing to DataStore
+        DataModification modification = (DataModification) dataBrokerService.beginTransaction();
         long id = 123;
-        FlowKey key = new FlowKey(id, new NodeRef(new NodeRef(nodeBuilderToInstanceId(nodeBuilder))));
+        FlowKey key = new FlowKey(id, new NodeRef(new NodeRef(nodeToInstanceId(testNode))));
         FlowBuilder flow = new FlowBuilder();
         flow.setKey(key);
         MatchBuilder match = new MatchBuilder();
-        Ipv4MatchBuilder ipv4Match = new Ipv4MatchBuilder();
+        EthernetMatchBuilder eth = new EthernetMatchBuilder();
+        EthernetTypeBuilder ethTypeBuilder = new EthernetTypeBuilder();
+        ethTypeBuilder.setType(new EtherType((long) 0x86dd));
+        eth.setEthernetType(ethTypeBuilder.build());
+        // Ipv4MatchBuilder ipv4Match = new Ipv4MatchBuilder();
         // ipv4Match.setIpv4Destination(new Ipv4Prefix(cliInput.get(4)));
-        Ipv4Prefix prefix = new Ipv4Prefix("10.0.0.1/24");
-        ipv4Match.setIpv4Destination(prefix);
-        Ipv4Match i4m = ipv4Match.build();
-        match.setLayer3Match(i4m);
+        // Ipv4Prefix prefix = new Ipv4Prefix("10.0.0.1/24");
+        // ipv4Match.setIpv4Destination(prefix);
+        // Ipv4Match i4m = ipv4Match.build();
+        // match.setLayer3Match(i4m);
         flow.setMatch(match.build());
-
-        // Create a drop action
-        /*
-         * Note: We are mishandling drop actions
         DropAction dropAction = new DropActionBuilder().build();
+        ApplyActionsBuilder aab = new ApplyActionsBuilder();
         ActionBuilder ab = new ActionBuilder();
         ab.setAction(dropAction);
-        */
-
-        DecNwTtlBuilder ta = new DecNwTtlBuilder();
-        DecNwTtl decNwTtl = ta.build();
-        ActionBuilder ab = new ActionBuilder();
-        ab.setAction(decNwTtl);
-
-        // Add our drop action to a list
         List<Action> actionList = new ArrayList<Action>();
         actionList.add(ab.build());
-
-        // Create an Apply Action
-        ApplyActionsBuilder aab = new ApplyActionsBuilder();
         aab.setAction(actionList);
-
-        // Wrap our Apply Action in an Instruction
         InstructionBuilder ib = new InstructionBuilder();
         ib.setInstruction(aab.build());
-
-        // Put our Instruction in a list of Instructions
+        flow.setTableId((short) 0);
         InstructionsBuilder isb = new InstructionsBuilder();
         List<Instruction> instructions = new ArrayList<Instruction>();
-        instructions.add(ib.build());
         isb.setInstruction(instructions);
-
-        // Add our instructions to the flow
         flow.setInstructions(isb.build());
+        // ActionBuilder action = new ActionBuilder();
 
-
+        // List<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev130819.flow.Action>
+        // actions = Collections
+        // .singletonList(action.build());
+        // flow.setAction(actions);
         flow.setPriority(2);
         flow.setFlowName(originalFlowName);
-        testFlow = flow;
-        return flow;
-       }
-
-       public void _removeMDFlow(CommandInterpreter ci) {
-           DataModification<InstanceIdentifier<?>, DataObject> modification = dataBrokerService.beginTransaction();
-           NodeBuilder tn = createTestNode(ci.nextArgument());
-           FlowBuilder tf = createTestFlow(tn);
-        InstanceIdentifier<Flow> path1 = InstanceIdentifier.builder(Flows.class).child(Flow.class, tf.getKey()).toInstance();
-        modification.removeOperationalData(nodeBuilderToInstanceId(tn));
+        testFlow = flow.build();
+    }
+
+    public void _mdremoveFlow(CommandInterpreter ci) {
+        String nref = ci.nextArgument();
+
+        if (nref == null) {
+            ci.println("test node added");
+            createTestNode();
+        } else {
+            ci.println("User node added" + nref);
+            createUserNode(nref);
+        }
+        createTestFlow();
+        DataModification modification = (DataModification) dataBrokerService.beginTransaction();
+        InstanceIdentifier<Flow> path1 = InstanceIdentifier.builder(Flows.class).child(Flow.class, testFlow.getKey())
+                .toInstance();
+        DataObject cls = (DataObject) modification.readConfigurationData(path1);
+        modification.removeOperationalData(nodeToInstanceId(testNode));
         modification.removeOperationalData(path1);
-        modification.removeConfigurationData(nodeBuilderToInstanceId(tn));
+        modification.removeConfigurationData(nodeToInstanceId(testNode));
         modification.removeConfigurationData(path1);
         Future<RpcResult<TransactionStatus>> commitFuture = modification.commit();
         try {
@@ -165,21 +166,31 @@ public class OpenflowpluginTestCommandProvider implements CommandProvider {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
-       }
+    }
 
-       public void _addMDFlow(CommandInterpreter ci) {
-        NodeBuilder tn = createTestNode(ci.nextArgument());
-        FlowBuilder tf = createTestFlow(tn);
-        writeFlow(ci, tf, tn);
+    public void _mdaddFlow(CommandInterpreter ci) {
+        String nref = ci.nextArgument();
+
+        if (nref == null) {
+            ci.println("test node added");
+            createTestNode();
+        } else {
+            ci.println("User node added" + nref);
+            createUserNode(nref);
+        }
+        createTestFlow();
+        writeFlow(ci, testFlow);
     }
 
-       private void writeFlow(CommandInterpreter ci,FlowBuilder flow, NodeBuilder nodeBuilder) {
-           DataModification<InstanceIdentifier<?>, DataObject> modification = dataBrokerService.beginTransaction();
-        InstanceIdentifier<Flow> path1 = InstanceIdentifier.builder(Flows.class).child(Flow.class, flow.getKey()).toInstance();
-        modification.putOperationalData(nodeBuilderToInstanceId(nodeBuilder), nodeBuilder.build());
-        modification.putOperationalData(path1, flow.build());
-        modification.putConfigurationData(nodeBuilderToInstanceId(nodeBuilder), nodeBuilder.build());
-        modification.putConfigurationData(path1, flow.build());
+    private void writeFlow(CommandInterpreter ci, Flow flow) {
+        DataModification modification = (DataModification) dataBrokerService.beginTransaction();
+        InstanceIdentifier<Flow> path1 = InstanceIdentifier.builder(Flows.class).child(Flow.class, flow.getKey())
+                .toInstance();
+        DataObject cls = (DataObject) modification.readConfigurationData(path1);
+        modification.putOperationalData(nodeToInstanceId(testNode), testNode);
+        modification.putOperationalData(path1, flow);
+        modification.putConfigurationData(nodeToInstanceId(testNode), testNode);
+        modification.putConfigurationData(path1, flow);
         Future<RpcResult<TransactionStatus>> commitFuture = modification.commit();
         try {
             RpcResult<TransactionStatus> result = commitFuture.get();
@@ -193,28 +204,41 @@ public class OpenflowpluginTestCommandProvider implements CommandProvider {
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
-       }
-
-       public void _modifyMDFlow(CommandInterpreter ci) {
-        NodeBuilder tn = createTestNode(ci.nextArgument());
-           FlowBuilder tf = createTestFlow(tn);
-           tf.setFlowName(updatedFlowName);
-           writeFlow(ci, tf,tn);
-           tf.setFlowName(originalFlowName);
-           writeFlow(ci, tf,tn);
-       }
-
-       private static NodeRef createNodeRef(String string) {
+    }
+
+    public void _mdmodifyFlow(CommandInterpreter ci) {
+        String nref = ci.nextArgument();
+
+        if (nref == null) {
+            ci.println("test node added");
+            createTestNode();
+        } else {
+            ci.println("User node added" + nref);
+            createUserNode(nref);
+        }
+        createTestFlow();
+        FlowBuilder flow = new FlowBuilder(testFlow);
+        flow.setFlowName(updatedFlowName);
+        writeFlow(ci, flow.build());
+        flow.setFlowName(originalFlowName);
+        writeFlow(ci, flow.build());
+    }
+
+    private static NodeRef createNodeRef(String string) {
         NodeKey key = new NodeKey(new NodeId(string));
-        InstanceIdentifier<Node> path =
-               InstanceIdentifier.builder().node(Nodes.class).node(Node.class, key).toInstance();
+        InstanceIdentifier<Node> path = InstanceIdentifier.builder(Nodes.class).child(Node.class, key).toInstance();
 
         return new NodeRef(path);
     }
 
     @Override
     public String getHelp() {
-        return "No help";
+        StringBuffer help = new StringBuffer();
+        help.append("---FRM MD-SAL test module---\n");
+        help.append("\t mdaddFlow <node id>        - node ref\n");
+        help.append("\t mdmodifyFlow <node id>        - node ref\n");
+        help.append("\t mdremoveFlow <node id>        - node ref\n");
+
+        return help.toString();
     }
 }
-