Change in sal.connectionservice.notifyNodeDisconnectFromMaster
[controller.git] / opendaylight / md-sal / clustered-data-store / integrationtest / src / test / java / org / opendaylight / controller / datastore / ClusteredDataStoreIT.java
index ddf275ec14897d9059cd2fc61236418fa06b694d..a1fa9e31b8b2ad3b6c3c4fc9f712ef8227e4bec9 100644 (file)
@@ -8,34 +8,51 @@
 
 package org.opendaylight.controller.datastore;
 
+import static junit.framework.Assert.assertNotNull;
+import static junit.framework.Assert.assertNull;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+import static org.ops4j.pax.exam.CoreOptions.junitBundles;
+import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
+import static org.ops4j.pax.exam.CoreOptions.options;
+import static org.ops4j.pax.exam.CoreOptions.systemPackages;
+import static org.ops4j.pax.exam.CoreOptions.systemProperty;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import javax.inject.Inject;
+
+import org.junit.Assert;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler.DataCommitTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.DataModification;
+import org.opendaylight.controller.test.sal.binding.it.TestHelper;
+import org.opendaylight.yangtools.yang.data.api.CompositeNode;
+import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier;
 import org.ops4j.pax.exam.Configuration;
 import org.ops4j.pax.exam.Option;
 import org.ops4j.pax.exam.junit.PaxExam;
+import org.ops4j.pax.exam.util.Filter;
 import org.ops4j.pax.exam.util.PathUtils;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.inject.Inject;
-
-import static junit.framework.Assert.assertTrue;
-import static org.ops4j.pax.exam.CoreOptions.junitBundles;
-import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
-import static org.ops4j.pax.exam.CoreOptions.options;
-import static org.ops4j.pax.exam.CoreOptions.systemPackages;
-import static org.ops4j.pax.exam.CoreOptions.systemProperty;
-
-
 @RunWith(PaxExam.class)
+//@ExamReactorStrategy(PerClass.class)
 public class ClusteredDataStoreIT {
-    private Logger log = LoggerFactory
-            .getLogger(ClusteredDataStoreIT.class);
+    private Logger log = LoggerFactory.getLogger(ClusteredDataStoreIT.class);
     // get the OSGI bundle context
     @Inject
     private BundleContext bc;
+    @Inject
+    @Filter(timeout=60*1000)
+    private ClusteredDataStore clusteredDS;
 
     // Configure the OSGi container
     @Configuration
@@ -43,12 +60,12 @@ public class ClusteredDataStoreIT {
         return options(
                 //
                 systemProperty("logback.configurationFile").value(
-                        "file:" + PathUtils.getBaseDir()
-                                + "/src/test/resources/logback.xml"),
+                        "file:" + PathUtils.getBaseDir() + "/src/test/resources/logback.xml"),
                 // To start OSGi console for inspection remotely
                 systemProperty("osgi.console").value("2401"),
                 // Set the systemPackages (used by clustering)
                 systemPackages("sun.reflect", "sun.reflect.misc", "sun.misc"),
+                systemProperty("org.ops4j.pax.logging.DefaultServiceLog.level").value("DEBUG"),
                 // List framework bundles
                 mavenBundle("equinoxSDK381", "org.eclipse.equinox.console").versionAsInProject(),
                 mavenBundle("equinoxSDK381", "org.eclipse.equinox.util").versionAsInProject(),
@@ -59,40 +76,36 @@ public class ClusteredDataStoreIT {
                 mavenBundle("equinoxSDK381", "org.apache.felix.gogo.shell").versionAsInProject(),
                 // List logger bundles
                 mavenBundle("org.slf4j", "slf4j-api").versionAsInProject(),
-                mavenBundle("org.slf4j", "log4j-over-slf4j")
-                        .versionAsInProject(),
-                mavenBundle("ch.qos.logback", "logback-core")
-                        .versionAsInProject(),
-                mavenBundle("ch.qos.logback", "logback-classic")
-                        .versionAsInProject(),
+                mavenBundle("org.slf4j", "log4j-over-slf4j").versionAsInProject(),
+                mavenBundle("ch.qos.logback", "logback-core").versionAsInProject(),
+                mavenBundle("ch.qos.logback", "logback-classic").versionAsInProject(),
                 // needed by statisticsmanager
-                mavenBundle("org.opendaylight.controller", "containermanager")
-                    .versionAsInProject(),
-                mavenBundle("org.opendaylight.controller", "containermanager.it.implementation")
-                    .versionAsInProject(),
-                mavenBundle("org.opendaylight.controller", "clustering.services")
-                    .versionAsInProject(),
-                mavenBundle("org.opendaylight.controller", "clustering.stub")
-                    .versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "containermanager").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "containermanager.it.implementation").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "clustering.services").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "clustering.stub").versionAsInProject(),
 
                 // List all the bundles on which the test case depends
-                mavenBundle("org.opendaylight.controller", "sal")
-                    .versionAsInProject(),
-                mavenBundle("org.opendaylight.controller", "sal.implementation")
-                    .versionAsInProject(),
-                mavenBundle("org.opendaylight.controller", "protocol_plugins.stub")
-                    .versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "sal").versionAsInProject(),
+                TestHelper.baseModelBundles(),
+                TestHelper.configMinumumBundles(),
+                TestHelper.bindingIndependentSalBundles(),
+                TestHelper.bindingAwareSalBundles(),
+                TestHelper.mdSalCoreBundles(),
+                mavenBundle("org.opendaylight.controller", "config-api").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "sal.implementation").versionAsInProject(),
+                mavenBundle("org.opendaylight.controller", "protocol_plugins.stub").versionAsInProject(),
+
+                mavenBundle("org.osgi", "org.osgi.core").versionAsInProject(),
+                // adding new maven bundles
+                mavenBundle("org.mockito", "mockito-all").versionAsInProject(),
 
                 // needed by hosttracker
-                mavenBundle("org.opendaylight.controller", "clustered-datastore-implementation")
-                        .versionAsInProject(),
-                mavenBundle("org.jboss.spec.javax.transaction",
-                        "jboss-transaction-api_1.1_spec").versionAsInProject(),
-                mavenBundle("org.apache.commons", "commons-lang3")
-                        .versionAsInProject(),
-                mavenBundle("org.apache.felix",
-                        "org.apache.felix.dependencymanager")
-                        .versionAsInProject(), junitBundles());
+                mavenBundle("org.opendaylight.controller", "clustered-datastore-implementation").versionAsInProject(),
+                mavenBundle("org.jboss.spec.javax.transaction", "jboss-transaction-api_1.1_spec").versionAsInProject(),
+                mavenBundle("org.apache.commons", "commons-lang3").versionAsInProject(),
+                mavenBundle("org.apache.felix", "org.apache.felix.dependencymanager").versionAsInProject(),
+                junitBundles());
     }
 
     private String stateToString(int state) {
@@ -111,8 +124,118 @@ public class ClusteredDataStoreIT {
     }
 
     @Test
-    public void testDoNothing() throws Exception{
-        assertTrue(true);
+    public void testBundleContextClusteredDS_NotNull() throws Exception {
+        ServiceReference serviceReference = bc.getServiceReference(ClusteredDataStore.class);
+        ClusteredDataStore store = ClusteredDataStore.class.cast(bc.getService(serviceReference));
+        assertNotNull(store);
+    }
+
+    @Test
+    public void testInjected_ClusteredDS_NotNull() {
+        assertNotNull(clusteredDS);
+    }
+
+    @Test
+    public void requestCommit_readConfigurationData_ShouldVerifyDataAndNoException() {
+        DataModification dataModification = mock(DataModification.class);
+        HashMap map = new HashMap();
+        List list = new ArrayList();
+        list.add("key");
+        InstanceIdentifier key = new InstanceIdentifier(list);
+        map.put(key, mock(CompositeNode.class));
+        when(dataModification.getUpdatedConfigurationData()).thenReturn(map);
+        DataCommitTransaction dataCommitTrans = clusteredDS.requestCommit(dataModification);
+        dataCommitTrans.finish();
+        Object value = clusteredDS.readConfigurationData(key);
+        Assert.assertNotNull(value);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void requestCommit_ShouldThrowException() {
+        DataModification dataModification = null;
+        DataCommitTransaction dataCommitTrans = clusteredDS.requestCommit(dataModification);
+        dataCommitTrans.finish();
+    }
+
+    @Test
+    public void requestCommit_readOperationalData_ShouldVerifyDataAndNoException() {
+        DataModification dataModification = mock(DataModification.class);
+        HashMap map = new HashMap();
+        List list = new ArrayList();
+        list.add("key");
+        InstanceIdentifier key = new InstanceIdentifier(list);
+        map.put(key, mock(CompositeNode.class));
+        when(dataModification.getUpdatedOperationalData()).thenReturn(map);
+        DataCommitTransaction dataCommitTrans = clusteredDS.requestCommit(dataModification);
+        dataCommitTrans.finish();
+        Object value = clusteredDS.readOperationalData(key);
+        Assert.assertNotNull(value);
+    }
+
+    @Test
+    public void requestCommit_readConfigurationData_NonExistingKey_ShouldVerifyNoMappedValueAndNoException() {
+        DataModification dataModification = mock(DataModification.class);
+        HashMap map = new HashMap();
+        List list = new ArrayList();
+        list.add("key");
+        InstanceIdentifier key = new InstanceIdentifier(list);
+        map.put(key, "value");
+        when(dataModification.getUpdatedConfigurationData()).thenReturn(map);
+        DataCommitTransaction dataCommitTrans = clusteredDS.requestCommit(dataModification);
+        dataCommitTrans.finish();
+        list = new ArrayList();
+        list.add("key1");
+        InstanceIdentifier key1 = new InstanceIdentifier(list);
+
+        Object value = clusteredDS.readConfigurationData(key1);
+        assertNull(value);
+    }
+
+    @Test
+    public void requestCommit_readOperationalData_NonExistingKey_ShouldVerifyNoMappedValueAndNoException() {
+        DataModification dataModification = mock(DataModification.class);
+        HashMap map = new HashMap();
+        List list = new ArrayList();
+        list.add("key");
+        InstanceIdentifier key = new InstanceIdentifier(list);
+        map.put(key, mock(CompositeNode.class));
+        when(dataModification.getUpdatedOperationalData()).thenReturn(map);
+        DataCommitTransaction dataCommitTrans = clusteredDS.requestCommit(dataModification);
+        dataCommitTrans.finish();
+        list = new ArrayList();
+        list.add("key1");
+        InstanceIdentifier key1 = new InstanceIdentifier(list);
+
+        Object value = clusteredDS.readOperationalData(key1);
+        assertNull(value);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void requestCommit_readConfigurationData_WithNullPathShouldThrowException() {
+        DataModification dataModification = mock(DataModification.class);
+        HashMap map = new HashMap();
+        List list = new ArrayList();
+        list.add("key");
+        InstanceIdentifier key = new InstanceIdentifier(list);
+        map.put(key, "value");
+        when(dataModification.getUpdatedConfigurationData()).thenReturn(map);
+        DataCommitTransaction dataCommitTrans = clusteredDS.requestCommit(dataModification);
+        dataCommitTrans.finish();
+        Object value = clusteredDS.readConfigurationData(null);
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void requestCommit_readOperationalData_WithNullPathShouldThrowException() {
+        DataModification dataModification = mock(DataModification.class);
+        HashMap map = new HashMap();
+        List list = new ArrayList();
+        list.add("key");
+        InstanceIdentifier key = new InstanceIdentifier(list);
+        map.put(key, "value");
+        when(dataModification.getOriginalOperationalData()).thenReturn(map);
+        DataCommitTransaction dataCommitTrans = clusteredDS.requestCommit(dataModification);
+        dataCommitTrans.finish();
+        Object value = clusteredDS.readOperationalData(null);
     }
 
 }