diff --git a/drivers/ovsdb/src/test/java/org/onosproject/drivers/ovsdb/OvsdbControllerConfigTest.java b/drivers/ovsdb/src/test/java/org/onosproject/drivers/ovsdb/OvsdbControllerConfigTest.java
new file mode 100644
index 0000000..c943a41
--- /dev/null
+++ b/drivers/ovsdb/src/test/java/org/onosproject/drivers/ovsdb/OvsdbControllerConfigTest.java
@@ -0,0 +1,97 @@
+/*
+ * 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.drivers.ovsdb;
+
+import com.google.common.collect.ImmutableMap;
+import org.junit.Before;
+import org.junit.Test;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.behaviour.ControllerConfig;
+import org.onosproject.net.device.DeviceServiceAdapter;
+import org.onosproject.net.driver.DefaultDriver;
+import org.onosproject.net.driver.DefaultDriverData;
+import org.onosproject.net.driver.DefaultDriverHandler;
+import org.onosproject.ovsdb.controller.driver.OvsdbClientServiceAdapter;
+import org.onosproject.ovsdb.controller.driver.OvsdbControllerAdapter;
+
+import java.util.ArrayList;
+
+/**
+ * Created by Andrea on 10/7/15.
+ */
+public class OvsdbControllerConfigTest {
+
+
+    private static final DeviceId DEVICE_ID = DeviceId.deviceId("foo");
+
+    private DefaultDriver ddc;
+    private DefaultDriverData data;
+    private DefaultDriverHandler handler;
+
+    private TestDeviceService deviceService = new TestDeviceService();
+    private TestOvsdbController controller = new TestOvsdbController();
+    private TestOvsdbClient client = new TestOvsdbClient();
+
+    private OvsdbControllerConfig controllerConfig;
+
+
+    @Before
+    public void setUp() {
+        controllerConfig = new OvsdbControllerConfig();
+
+        ddc = new DefaultDriver("foo.bar", new ArrayList<>(), "Circus", "lux", "1.2a",
+                                ImmutableMap.of(ControllerConfig.class,
+                                                OvsdbControllerConfig.class),
+                                ImmutableMap.of("foo", "bar"));
+        data = new DefaultDriverData(ddc, DEVICE_ID);
+        handler = new DefaultDriverHandler(data);
+        //handler.controllerConfig.setHandler(handler);
+        //TODO setTestService directory on handler
+        //TODO setup ovsdb fake controller with fake ovsdbclient
+        //TODO setup fake device service
+    }
+
+    @Test
+    public void testGetControllers() throws Exception {
+//        DriverService driverService = new Driv
+//        AbstractBehaviour ab = new AbstractBehaviour();
+//        DriverHandler handler = handler();
+//        List<ControllerInfo> controllersList =
+//              controllerConfig.getControllers(DeviceId.deviceId("0000000000000018"));
+//        log.info("controllers " + controllersList);
+
+    }
+
+    @Test
+    public void testSetControllers() throws Exception {
+
+    }
+
+
+    private class TestDeviceService extends DeviceServiceAdapter {
+
+    }
+
+    private class TestOvsdbController extends OvsdbControllerAdapter {
+
+
+    }
+
+    private class TestOvsdbClient extends OvsdbClientServiceAdapter {
+
+    }
+}
\ No newline at end of file
