Add IT for netvirtsfc mdsal read/write/delete
authorSam Hague <shague@redhat.com>
Thu, 8 Oct 2015 20:34:14 +0000 (16:34 -0400)
committerSam Hague <shague@redhat.com>
Fri, 9 Oct 2015 00:13:32 +0000 (00:13 +0000)
To run the integration tests:
- cd ../ovsdb/openstack/net-virt-sfc
- mvn clean install -Pintegrationtest

Change-Id: I191ace9c510a63bca59d99009eca8e970566f3f9
Signed-off-by: Sam Hague <shague@redhat.com>
openstack/net-virt-sfc/it/pom.xml
openstack/net-virt-sfc/it/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/sfc/NetvirtSfcIT.java
openstack/net-virt-sfc/it/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/sfc/utils/AclUtils.java [new file with mode: 0644]
openstack/net-virt-sfc/it/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/sfc/utils/ClassifierUtils.java [new file with mode: 0644]
openstack/net-virt-sfc/it/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/sfc/utils/SfcUtils.java [new file with mode: 0644]

index 1a0ade18237e14d2fdac293c788ea017949f8f06..0ecf05e30361ec7a0158ec2d4ec633e44865daf0 100644 (file)
@@ -21,7 +21,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.opendaylight.ovsdb</groupId>
   <artifactId>openstack.net-virt-sfc-it</artifactId>
-  <version>1.0.0-SNAPSHOT</version>
+  <version>1.2.1-SNAPSHOT</version>
   <packaging>jar</packaging>
 
   <properties>
@@ -31,35 +31,36 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <karaf.distro.type>zip</karaf.distro.type>
   </properties>
 
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>${project.groupId}</groupId>
+        <artifactId>openstack.net-virt-sfc-artifacts</artifactId>
+        <version>${project.version}</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+
   <dependencies>
     <dependency>
       <groupId>${project.groupId}</groupId>
       <artifactId>openstack.net-virt-sfc-features</artifactId>
       <version>${project.version}</version>
     </dependency>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>utils.mdsal-utils</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.sonar-plugins.java</groupId>
+      <artifactId>sonar-jacoco-listeners</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
-  <profiles>
-    <profile>
-      <id>default</id>
-      <activation>
-        <activeByDefault>true</activeByDefault>
-      </activation>
-      <properties>
-        <skipITs>true</skipITs>
-      </properties>
-    </profile>
-    <profile>
-      <id>integrationtest</id>
-      <activation>
-        <activeByDefault>false</activeByDefault>
-      </activation>
-      <properties>
-        <skipITs>false</skipITs>
-      </properties>
-    </profile>
-  </profiles>
-
   <build>
     <plugins>
       <plugin>
index 86cec607f53a5cb7dbcbf5023cd45a1c733ccb07..cb5e49f3ec18103ade5a3a86a2e69fb8a7fe3047 100644 (file)
@@ -5,18 +5,48 @@
  * 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.ovsdb.openstack.netvirt.sfc;
 
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 import static org.ops4j.pax.exam.CoreOptions.composite;
 import static org.ops4j.pax.exam.CoreOptions.maven;
 import static org.ops4j.pax.exam.CoreOptions.vmOption;
 import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.editConfigurationFilePut;
 import static org.ops4j.pax.exam.karaf.options.KarafDistributionOption.keepRuntimeFolder;
 
-import org.junit.Assert;
+import java.util.concurrent.atomic.AtomicBoolean;
+import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.mdsal.it.base.AbstractMdsalTestBase;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
+import org.opendaylight.ovsdb.openstack.netvirt.sfc.utils.AclUtils;
+//import org.opendaylight.ovsdb.openstack.netvirt.sfc.utils.SfcUtils;
+import org.opendaylight.ovsdb.openstack.netvirt.sfc.utils.ClassifierUtils;
+import org.opendaylight.ovsdb.openstack.netvirt.sfc.utils.SfcUtils;
+import org.opendaylight.ovsdb.utils.mdsal.utils.MdsalUtils;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev141010.AccessLists;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev141010.AccessListsBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev141010.access.lists.AccessListBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev141010.access.lists.access.list.AccessListEntriesBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev141010.access.lists.access.list.access.list.entries.AccessListEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev141010.access.lists.access.list.access.list.entries.access.list.entry.ActionsBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev141010.access.lists.access.list.access.list.entries.access.list.entry.MatchesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.sfc.classifier.rev150105.Classifiers;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.sfc.classifier.rev150105.ClassifiersBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.sfc.classifier.rev150105.classifiers.ClassifierBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.sfc.classifier.rev150105.classifiers.classifier.SffsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.sfc.classifier.rev150105.classifiers.classifier.sffs.SffBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.sfc.rev150105.Sfc;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.sfc.rev150105.SfcBuilder;
+import org.opendaylight.yangtools.concepts.Builder;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
 import org.ops4j.pax.exam.Configuration;
 import org.ops4j.pax.exam.Option;
 import org.ops4j.pax.exam.junit.PaxExam;
@@ -31,6 +61,11 @@ import org.slf4j.LoggerFactory;
 @ExamReactorStrategy(PerClass.class)
 public class NetvirtSfcIT extends AbstractMdsalTestBase {
     private static final Logger LOG = LoggerFactory.getLogger(NetvirtSfcIT.class);
+    private static AclUtils aclUtils = new AclUtils();
+    private static ClassifierUtils classifierUtils = new ClassifierUtils();
+    private static SfcUtils sfcUtils = new SfcUtils();
+    private static MdsalUtils mdsalUtils;
+    private static AtomicBoolean setup = new AtomicBoolean(false);
 
     @Override
     public String getModuleName() {
@@ -84,8 +119,120 @@ public class NetvirtSfcIT extends AbstractMdsalTestBase {
         return option;
     }
 
+    @Before
+    @Override
+    public void setup() {
+        if (setup.get()) {
+            LOG.info("Skipping setUp, already initialized");
+            return;
+        }
+
+        try {
+            super.setup();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        DataBroker dataBroker = getDatabroker(getProviderContext());
+        mdsalUtils = new MdsalUtils(dataBroker);
+        assertNotNull("mdsalUtils should not be null", mdsalUtils);
+        setup.set(true);
+    }
+
+    private ProviderContext getProviderContext() {
+        ProviderContext providerContext = null;
+        for (int i=0; i < 20; i++) {
+            providerContext = getSession();
+            if (providerContext != null) {
+                break;
+            } else {
+                try {
+                    Thread.sleep(1000);
+                } catch (InterruptedException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        assertNotNull("providercontext should not be null", providerContext);
+        /* One more second to let the provider finish initialization */
+        try {
+            Thread.sleep(1000);
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+        return providerContext;
+    }
+
+    private DataBroker getDatabroker(ProviderContext providerContext) {
+        DataBroker dataBroker = providerContext.getSALService(DataBroker.class);
+        assertNotNull("dataBroker should not be null", dataBroker);
+        return dataBroker;
+    }
+
+    @Test
+    public void testNetvirtSfcFeatureLoad() {
+        assertTrue(true);
+    }
+
+    private AccessListsBuilder setAccessLists () {
+        MatchesBuilder matchesBuilder = aclUtils.createMatches(new MatchesBuilder(), 80);
+        ActionsBuilder actionsBuilder = aclUtils.createActions(new ActionsBuilder(), Boolean.TRUE);
+        AccessListEntryBuilder accessListEntryBuilder = aclUtils.createAccessListEntryBuilder(
+                new AccessListEntryBuilder(), "http", matchesBuilder, actionsBuilder);
+        AccessListEntriesBuilder accessListEntriesBuilder = aclUtils.createAccessListEntries(
+                new AccessListEntriesBuilder(), accessListEntryBuilder);
+        AccessListBuilder accessListBuilder = aclUtils.createAccessList(new AccessListBuilder(),
+                "http", accessListEntriesBuilder);
+        AccessListsBuilder accessListsBuilder = aclUtils.createAccessLists(new AccessListsBuilder(),
+                accessListBuilder);
+        LOG.info("AccessLists: {}", accessListsBuilder.build());
+        return accessListsBuilder;
+    }
+
+    @Test
+    public void testAcl() {
+        AccessListsBuilder accessListsBuilder = setAccessLists();
+        InstanceIdentifier<AccessLists> path = InstanceIdentifier.create(AccessLists.class);
+        assertTrue(mdsalUtils.put(LogicalDatastoreType.CONFIGURATION, path, accessListsBuilder.build()));
+        AccessLists accessLists = mdsalUtils.read(LogicalDatastoreType.CONFIGURATION, path);
+        assertNotNull("AccessLists should not be null", accessLists);
+        assertTrue("Failed to remove AccessLists", mdsalUtils.delete(LogicalDatastoreType.CONFIGURATION, path));
+        accessLists = mdsalUtils.read(LogicalDatastoreType.CONFIGURATION, path);
+        assertNull("AccessLists should be null", accessLists);
+    }
+
+    private ClassifiersBuilder setClassifiers() {
+        SffBuilder sffBuilder = classifierUtils.createSff(new SffBuilder(), "sffname");
+        SffsBuilder sffsBuilder = classifierUtils.createSffs(new SffsBuilder(), sffBuilder);
+        ClassifierBuilder classifierBuilder = classifierUtils.createClassifier(new ClassifierBuilder(),
+                "classifierName", "aclName", sffsBuilder);
+        ClassifiersBuilder classifiersBuilder = classifierUtils.createClassifiers(new ClassifiersBuilder(),
+                classifierBuilder);
+        LOG.info("Classifiers: {}", classifiersBuilder.build());
+        return classifiersBuilder;
+    }
+
+    @Test
+    public void testClassifier() {
+        ClassifiersBuilder classifiersBuilder = setClassifiers();
+        InstanceIdentifier<Classifiers> path = InstanceIdentifier.create(Classifiers.class);
+        assertTrue(mdsalUtils.put(LogicalDatastoreType.CONFIGURATION, path, classifiersBuilder.build()));
+        Classifiers classifiers = mdsalUtils.read(LogicalDatastoreType.CONFIGURATION, path);
+        assertNotNull("Classifiers should not be null", classifiers);
+        assertTrue("Failed to remove Classifiers", mdsalUtils.delete(LogicalDatastoreType.CONFIGURATION, path));
+        classifiers = mdsalUtils.read(LogicalDatastoreType.CONFIGURATION, path);
+        assertNull("Classifiers should be null", classifiers);
+    }
+
     @Test
-    public void testnetvirtsfcFeatureLoad() {
-        Assert.assertTrue(true);
+    public void testSfc() {
+        SfcBuilder sfcBuilder = sfcUtils.createSfc(new SfcBuilder(), "sfc");
+        InstanceIdentifier<Sfc> path = InstanceIdentifier.create(Sfc.class);
+        assertTrue(mdsalUtils.put(LogicalDatastoreType.CONFIGURATION, path, sfcBuilder.build()));
+        Sfc sfc = mdsalUtils.read(LogicalDatastoreType.CONFIGURATION, path);
+        assertNotNull("SfcUtils should not be null", sfc);
+        assertTrue("Failed to remove Sfc", mdsalUtils.delete(LogicalDatastoreType.CONFIGURATION, path));
+        sfc = mdsalUtils.read(LogicalDatastoreType.CONFIGURATION, path);
+        assertNull("Sfc should be null", sfc);
     }
 }
diff --git a/openstack/net-virt-sfc/it/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/sfc/utils/AclUtils.java b/openstack/net-virt-sfc/it/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/sfc/utils/AclUtils.java
new file mode 100644 (file)
index 0000000..ac214bb
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * Copyright © 2015 Red Hat, 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.ovsdb.openstack.netvirt.sfc.utils;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev141010.AccessListsBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev141010.access.lists.AccessList;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev141010.access.lists.AccessListBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev141010.access.lists.access.list.AccessListEntriesBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev141010.access.lists.access.list.access.list.entries.AccessListEntry;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev141010.access.lists.access.list.access.list.entries.AccessListEntryBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev141010.access.lists.access.list.access.list.entries.access.list.entry.ActionsBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev141010.access.lists.access.list.access.list.entries.access.list.entry.MatchesBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev141010.access.lists.access.list.access.list.entries.access.list.entry.actions.packet.handling.PermitBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.acl.rev141010.access.lists.access.list.access.list.entries.access.list.entry.matches.ace.type.AceIpBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.packet.fields.rev140625.acl.transport.header.fields.DestinationPortRangeBuilder;
+
+public class AclUtils {
+    public MatchesBuilder createMatches (MatchesBuilder matchesBuilder, int destPort) {
+        PortNumber portNumber = new PortNumber(destPort);
+        DestinationPortRangeBuilder destinationPortRangeBuilder = new DestinationPortRangeBuilder();
+        destinationPortRangeBuilder.setLowerPort(portNumber);
+        destinationPortRangeBuilder.setUpperPort(portNumber);
+
+        AceIpBuilder aceIpBuilder = new AceIpBuilder();
+        aceIpBuilder.setDestinationPortRange(destinationPortRangeBuilder.build());
+        matchesBuilder.setAceType(aceIpBuilder.build());
+
+        return matchesBuilder;
+    }
+
+    public ActionsBuilder createActions (ActionsBuilder actionsBuilder, Boolean permit) {
+        PermitBuilder permitBuilder = new PermitBuilder();
+        permitBuilder.setPermit(Boolean.TRUE);
+        actionsBuilder.setPacketHandling(permitBuilder.build());
+
+        return actionsBuilder;
+    }
+
+    public AccessListEntryBuilder createAccessListEntryBuilder(AccessListEntryBuilder accessListEntryBuilder,
+                                                               String ruleName,
+                                                               MatchesBuilder matchesBuilder,
+                                                               ActionsBuilder actionsBuilder) {
+        accessListEntryBuilder.setRuleName(ruleName);
+        accessListEntryBuilder.setMatches(matchesBuilder.build());
+        accessListEntryBuilder.setActions(actionsBuilder.build());
+
+        return accessListEntryBuilder;
+    }
+
+    public AccessListEntriesBuilder createAccessListEntries(AccessListEntriesBuilder accessListEntriesBuilder,
+                                                            AccessListEntryBuilder accessListEntryBuilder) {
+        List<AccessListEntry> accessListEntriesList = new ArrayList<>();
+        accessListEntriesList.add(accessListEntryBuilder.build());
+
+        return accessListEntriesBuilder;
+    }
+
+    public AccessListBuilder createAccessList(AccessListBuilder accessListBuilder,
+                                              String aclName,
+                                              AccessListEntriesBuilder accessListEntriesBuilder) {
+        accessListBuilder.setAclName(aclName);
+        accessListBuilder.setAccessListEntries(accessListEntriesBuilder.build());
+
+        return accessListBuilder;
+    }
+
+    public AccessListsBuilder createAccessLists(AccessListsBuilder accessListsBuilder,
+                                                AccessListBuilder accessListBuilder) {
+        List<AccessList> accessListList = new ArrayList<>();
+        accessListList.add(accessListBuilder.build());
+        accessListsBuilder.setAccessList(accessListList);
+
+        return accessListsBuilder;
+    }
+}
diff --git a/openstack/net-virt-sfc/it/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/sfc/utils/ClassifierUtils.java b/openstack/net-virt-sfc/it/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/sfc/utils/ClassifierUtils.java
new file mode 100644 (file)
index 0000000..f99ca66
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright © 2015 Red Hat, 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.ovsdb.openstack.netvirt.sfc.utils;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.sfc.classifier.rev150105.ClassifiersBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.sfc.classifier.rev150105.classifiers.Classifier;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.sfc.classifier.rev150105.classifiers.ClassifierBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.sfc.classifier.rev150105.classifiers.classifier.SffsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.sfc.classifier.rev150105.classifiers.classifier.sffs.Sff;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.sfc.classifier.rev150105.classifiers.classifier.sffs.SffBuilder;
+
+public class ClassifierUtils {
+    public SffBuilder createSff(SffBuilder sffBuilder, String sffName) {
+        sffBuilder.setName(sffName);
+
+        return sffBuilder;
+    }
+
+    public SffsBuilder createSffs(SffsBuilder sffsBuilder, SffBuilder sffBuilder) {
+        List<Sff> sffList = new ArrayList<>();
+        sffList.add(sffBuilder.build());
+        sffsBuilder.setSff(sffList);
+
+        return sffsBuilder;
+    }
+
+    public ClassifierBuilder createClassifier(ClassifierBuilder classifierBuilder,
+                                       String classifierName, String aclName,
+                                       SffsBuilder sffsBuilder) {
+        classifierBuilder.setName(classifierName);
+        classifierBuilder.setAcl(aclName);
+
+        return classifierBuilder;
+    }
+
+    public ClassifiersBuilder createClassifiers(ClassifiersBuilder classifiersBuilder,
+                                                ClassifierBuilder classifierBuilder) {
+        List<Classifier> classifierList = new ArrayList<>();
+        classifierList.add(classifierBuilder.build());
+        classifiersBuilder.setClassifier(classifierList);
+
+        return classifiersBuilder;
+    }
+}
diff --git a/openstack/net-virt-sfc/it/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/sfc/utils/SfcUtils.java b/openstack/net-virt-sfc/it/src/test/java/org/opendaylight/ovsdb/openstack/netvirt/sfc/utils/SfcUtils.java
new file mode 100644 (file)
index 0000000..99fd35e
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ * Copyright © 2015 Red Hat, 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.ovsdb.openstack.netvirt.sfc.utils;
+
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.netvirt.sfc.rev150105.SfcBuilder;
+
+public class SfcUtils {
+    public SfcBuilder createSfc(SfcBuilder sfcBuilder, String sfcName) {
+        sfcBuilder.setName(sfcName);
+
+        return sfcBuilder;
+    }
+}