diff --git a/providers/lisp/device/BUCK b/providers/lisp/device/BUCK
index 240d54f..14d1d09 100644
--- a/providers/lisp/device/BUCK
+++ b/providers/lisp/device/BUCK
@@ -3,6 +3,11 @@
     '//protocols/lisp/api:onos-protocols-lisp-api',
 ]
 
+TEST_DEPS = [
+    '//lib:TEST_ADAPTERS',
+]
+
 osgi_jar_with_tests (
     deps = COMPILE_DEPS,
+    test_deps = TEST_DEPS,
 )
diff --git a/providers/lisp/device/pom.xml b/providers/lisp/device/pom.xml
index 2370a53..1416189 100644
--- a/providers/lisp/device/pom.xml
+++ b/providers/lisp/device/pom.xml
@@ -46,6 +46,11 @@
             <artifactId>onos-lisp-ctl</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.easymock</groupId>
+            <artifactId>easymock</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/providers/lisp/device/src/test/java/org/onosproject/provider/lisp/device/impl/LispControllerAdapter.java b/providers/lisp/device/src/test/java/org/onosproject/provider/lisp/device/impl/LispControllerAdapter.java
new file mode 100644
index 0000000..22c651f
--- /dev/null
+++ b/providers/lisp/device/src/test/java/org/onosproject/provider/lisp/device/impl/LispControllerAdapter.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2017-present 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.provider.lisp.device.impl;
+
+import org.onosproject.lisp.ctl.LispController;
+import org.onosproject.lisp.ctl.LispMessageListener;
+import org.onosproject.lisp.ctl.LispRouter;
+import org.onosproject.lisp.ctl.LispRouterId;
+import org.onosproject.lisp.ctl.LispRouterListener;
+
+/**
+ * Test Adapter for LispController.
+ */
+public class LispControllerAdapter implements LispController {
+    @Override
+    public Iterable<LispRouter> getRouters() {
+        return null;
+    }
+
+    @Override
+    public Iterable<LispRouter> getSubscribedRouters() {
+        return null;
+    }
+
+    @Override
+    public LispRouter connectRouter(LispRouterId routerId) {
+        return null;
+    }
+
+    @Override
+    public void disconnectRouter(LispRouterId routerId, boolean remove) {
+
+    }
+
+    @Override
+    public LispRouter getRouter(LispRouterId routerId) {
+        return null;
+    }
+
+    @Override
+    public void addRouterListener(LispRouterListener listener) {
+
+    }
+
+    @Override
+    public void removeRouterListener(LispRouterListener listener) {
+
+    }
+
+    @Override
+    public void addMessageListener(LispMessageListener listener) {
+
+    }
+
+    @Override
+    public void removeMessageListener(LispMessageListener listener) {
+
+    }
+}
diff --git a/providers/lisp/device/src/test/java/org/onosproject/provider/lisp/device/impl/LispDeviceProviderTest.java b/providers/lisp/device/src/test/java/org/onosproject/provider/lisp/device/impl/LispDeviceProviderTest.java
new file mode 100644
index 0000000..c040ca3
--- /dev/null
+++ b/providers/lisp/device/src/test/java/org/onosproject/provider/lisp/device/impl/LispDeviceProviderTest.java
@@ -0,0 +1,175 @@
+/*
+ * Copyright 2017-present 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.provider.lisp.device.impl;
+
+import com.google.common.collect.Sets;
+import org.junit.Before;
+import org.junit.Test;
+import org.onosproject.core.ApplicationId;
+import org.onosproject.core.CoreService;
+import org.onosproject.core.DefaultApplicationId;
+import org.onosproject.lisp.ctl.LispController;
+import org.onosproject.lisp.ctl.LispRouter;
+import org.onosproject.lisp.ctl.LispRouterListener;
+import org.onosproject.net.device.DeviceListener;
+import org.onosproject.net.device.DeviceProvider;
+import org.onosproject.net.device.DeviceProviderRegistry;
+import org.onosproject.net.device.DeviceProviderRegistryAdapter;
+import org.onosproject.net.device.DeviceProviderService;
+import org.onosproject.net.device.DeviceProviderServiceAdapter;
+import org.onosproject.net.device.DeviceService;
+import org.onosproject.net.device.DeviceServiceAdapter;
+import org.onosproject.net.provider.ProviderId;
+
+import java.util.Set;
+
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * LISP device provider unit test.
+ */
+public class LispDeviceProviderTest {
+
+    private static final String APP_NAME = "org.onosproject.lisp";
+
+    private final LispDeviceProvider provider = new LispDeviceProvider();
+    private final LispController controller = new MockLispController();
+
+    // provider mocks
+    private final DeviceProviderRegistry providerRegistry = new MockDeviceProviderRegistry();
+    private final DeviceProviderService providerService = new MockDeviceProviderService();
+    private final DeviceService deviceService = new MockDeviceService();
+
+    private final Set<LispRouterListener> routerListeners = Sets.newCopyOnWriteArraySet();
+
+    private CoreService coreService;
+    private ApplicationId appId = new DefaultApplicationId(200, APP_NAME);
+    private Set<DeviceListener> deviceListeners = Sets.newHashSet();
+
+    @Before
+    public void setUp() {
+        coreService = createMock(CoreService.class);
+        expect(coreService.registerApplication(APP_NAME))
+                .andReturn(appId).anyTimes();
+        replay(coreService);
+        provider.coreService = coreService;
+        provider.providerRegistry = providerRegistry;
+        provider.deviceService = deviceService;
+        provider.controller = controller;
+        provider.activate();
+    }
+
+    @Test
+    public void activate() throws Exception {
+
+        assertEquals("Provider should be registered", 1,
+                            providerRegistry.getProviders().size());
+        assertTrue("LISP device provider should be registered",
+                            providerRegistry.getProviders().contains(provider.id()));
+        assertEquals("Incorrect provider service",
+                            providerService, provider.providerService);
+        assertEquals("LISP router listener should be registered", 1,
+                            routerListeners.size());
+    }
+
+    @Test
+    public void deactivate() throws Exception {
+        provider.deactivate();
+
+        assertFalse("Provider should not be registered",
+                            providerRegistry.getProviders().contains(provider));
+        assertNull("Provider service should be null",
+                            provider.providerService);
+        assertEquals("Controller listener should be removed", 0,
+                            routerListeners.size());
+    }
+
+    /**
+     * Mock class for LispController.
+     */
+    private class MockLispController extends LispControllerAdapter {
+
+        Iterable<LispRouter> routers = Sets.newHashSet();
+
+        @Override
+        public Iterable<LispRouter> getRouters() {
+            return routers;
+        }
+
+        @Override
+        public void addRouterListener(LispRouterListener listener) {
+            if (!routerListeners.contains(listener)) {
+                routerListeners.add(listener);
+            }
+        }
+
+        @Override
+        public void removeRouterListener(LispRouterListener listener) {
+            routerListeners.remove(listener);
+        }
+    }
+
+    /**
+     * Mock class for DeviceProviderRegistry.
+     */
+    private class MockDeviceProviderRegistry extends DeviceProviderRegistryAdapter {
+        Set<ProviderId> providers = Sets.newHashSet();
+
+        @Override
+        public DeviceProviderService register(DeviceProvider provider) {
+            providers.add(provider.id());
+            return providerService;
+        }
+
+        @Override
+        public void unregister(DeviceProvider provider) {
+            providers.remove(provider.id());
+        }
+
+        @Override
+        public Set<ProviderId> getProviders() {
+            return providers;
+        }
+    }
+
+    /**
+     * Mock class for DeviceService.
+     */
+    private class MockDeviceService extends DeviceServiceAdapter {
+        @Override
+        public void addListener(DeviceListener listener) {
+            deviceListeners.add(listener);
+        }
+
+        @Override
+        public void removeListener(DeviceListener listener) {
+            deviceListeners.remove(listener);
+        }
+    }
+
+    /**
+     * Mock class for DeviceProviderService.
+     */
+    private class MockDeviceProviderService extends DeviceProviderServiceAdapter {
+
+    }
+}
