diff --git a/providers/ovsdb/device/src/test/java/org/onosproject/ovsdb/providers/device/OvsdbDeviceProviderTest.java b/providers/ovsdb/device/src/test/java/org/onosproject/ovsdb/providers/device/OvsdbDeviceProviderTest.java
new file mode 100644
index 0000000..5e4c567
--- /dev/null
+++ b/providers/ovsdb/device/src/test/java/org/onosproject/ovsdb/providers/device/OvsdbDeviceProviderTest.java
@@ -0,0 +1,198 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.ovsdb.providers.device;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.onlab.packet.IpAddress;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.MastershipRole;
+import org.onosproject.net.device.DeviceDescription;
+import org.onosproject.net.device.DeviceProvider;
+import org.onosproject.net.device.DeviceProviderRegistry;
+import org.onosproject.net.device.DeviceProviderService;
+import org.onosproject.net.device.PortDescription;
+import org.onosproject.net.device.PortStatistics;
+import org.onosproject.net.provider.ProviderId;
+import org.onosproject.ovsdb.controller.OvsdbClientService;
+import org.onosproject.ovsdb.controller.OvsdbController;
+import org.onosproject.ovsdb.controller.OvsdbEventListener;
+import org.onosproject.ovsdb.controller.OvsdbNodeId;
+import org.onosproject.ovsdb.controller.OvsdbNodeListener;
+
+import com.google.common.collect.HashMultimap;
+import com.google.common.collect.Multimap;
+
+/**
+ * Test for ovsdb device provider.
+ */
+public class OvsdbDeviceProviderTest {
+    private final OvsdbDeviceProvider provider = new OvsdbDeviceProvider();
+    private final TestDeviceRegistry registry = new TestDeviceRegistry();
+    private final TestController controller = new TestController();
+
+    @Before
+    public void startUp() {
+        provider.providerRegistry = registry;
+        provider.controller = controller;
+        provider.activate();
+        assertNotNull("provider should be registered", registry.provider);
+    }
+
+    @After
+    public void tearDown() {
+        provider.deactivate();
+        provider.controller = null;
+        provider.providerRegistry = null;
+    }
+
+    @Test
+    public void triggerProbe() {
+
+    }
+
+    @Test
+    public void testNodeAdded() {
+        controller.listener.nodeAdded(new OvsdbNodeId(IpAddress
+                .valueOf("192.168.202.36"), 5000));
+        assertEquals("ovsdb node added", 1, registry.connected.size());
+    }
+
+    @Test
+    public void testNodeRemoved() {
+        controller.listener.nodeAdded(new OvsdbNodeId(IpAddress
+                .valueOf("192.168.202.36"), 5000));
+        controller.listener.nodeRemoved(new OvsdbNodeId(IpAddress
+                .valueOf("192.168.202.36"), 5000));
+        assertEquals("ovsdb node removded", 0, registry.connected.size());
+    }
+
+    private class TestDeviceRegistry implements DeviceProviderRegistry {
+        DeviceProvider provider;
+
+        Set<DeviceId> connected = new HashSet<>();
+        Multimap<DeviceId, PortDescription> ports = HashMultimap.create();
+        PortDescription descr = null;
+
+        @Override
+        public DeviceProviderService register(DeviceProvider provider) {
+            this.provider = provider;
+            return new TestProviderService();
+        }
+
+        @Override
+        public void unregister(DeviceProvider provider) {
+        }
+
+        @Override
+        public Set<ProviderId> getProviders() {
+            return null;
+        }
+
+        private class TestProviderService implements DeviceProviderService {
+
+            @Override
+            public DeviceProvider provider() {
+                return null;
+            }
+
+            @Override
+            public void deviceConnected(DeviceId deviceId,
+                                        DeviceDescription deviceDescription) {
+                connected.add(deviceId);
+            }
+
+            @Override
+            public void deviceDisconnected(DeviceId deviceId) {
+                connected.remove(deviceId);
+                ports.removeAll(deviceId);
+            }
+
+            @Override
+            public void updatePorts(DeviceId deviceId,
+                                    List<PortDescription> portDescriptions) {
+                for (PortDescription p : portDescriptions) {
+                    ports.put(deviceId, p);
+                }
+            }
+
+            @Override
+            public void portStatusChanged(DeviceId deviceId,
+                                          PortDescription portDescription) {
+                ports.put(deviceId, portDescription);
+                descr = portDescription;
+            }
+
+            @Override
+            public void receivedRoleReply(DeviceId deviceId,
+                                          MastershipRole requested,
+                                          MastershipRole response) {
+            }
+
+            @Override
+            public void updatePortStatistics(DeviceId deviceId,
+                                             Collection<PortStatistics> portStatistics) {
+
+            }
+
+        }
+    }
+
+    private class TestController implements OvsdbController {
+        OvsdbNodeListener listener = null;
+
+        @Override
+        public void addNodeListener(OvsdbNodeListener listener) {
+            this.listener = listener;
+        }
+
+        @Override
+        public void removeNodeListener(OvsdbNodeListener listener) {
+            this.listener = null;
+        }
+
+        @Override
+        public void addOvsdbEventListener(OvsdbEventListener listener) {
+
+        }
+
+        @Override
+        public void removeOvsdbEventListener(OvsdbEventListener listener) {
+
+        }
+
+        @Override
+        public List<OvsdbNodeId> getNodeIds() {
+            return null;
+        }
+
+        @Override
+        public OvsdbClientService getOvsdbClient(OvsdbNodeId nodeId) {
+            return null;
+        }
+
+    }
+
+}
