diff --git a/src/test/utils/VolthaCtrl.py b/src/test/utils/VolthaCtrl.py
new file mode 100644
index 0000000..505f92a
--- /dev/null
+++ b/src/test/utils/VolthaCtrl.py
@@ -0,0 +1,46 @@
+import requests
+import json
+import time
+from CordTestUtils import log_test as log
+
+class VolthaCtrl(object):
+
+    def __init__(self, host, rest_port = 8881):
+        self.host = host
+        self.rest_port = rest_port
+        self.rest_url = 'http://{}:{}/api/v1'.format(host, rest_port)
+
+    def get_devices(self):
+        url = '{}/local/devices'.format(self.rest_url)
+        resp = requests.get(url)
+        if resp.ok is not True or resp.status_code != 200:
+            return None
+        return resp.json()
+
+    def enable_device(self, olt_type, olt_mac):
+        url = '{}/local/devices'.format(self.rest_url)
+        device_config = { 'type' : olt_type, 'mac_address' : olt_mac }
+        #pre-provision
+        log.info('Pre-provisioning %s with mac %s' %(olt_type, olt_mac))
+        resp = requests.post(url, data = json.dumps(device_config))
+        if resp.ok is not True or resp.status_code != 200:
+            return False
+        device_id = resp.json()['id']
+        log.info('Enabling device %s' %(device_id))
+        enable_url = '{}/{}/enable'.format(url, device_id)
+        resp = requests.post(enable_url)
+        if resp.ok is not True or resp.status_code != 200:
+            return False
+        #get operational status
+        time.sleep(5)
+        log.info('Checking operational status for device %s' %(device_id))
+        resp = requests.get('{}/{}'.format(url, device_id))
+        if resp.ok is not True or resp.status_code != 200:
+            return False
+        device_info = resp.json()
+        if device_info['oper_status'] != 'ACTIVE' or \
+           device_info['admin_state'] != 'ENABLED' or \
+           device_info['connect_status'] != 'REACHABLE':
+            return False
+
+        return True
diff --git a/src/test/voltha/__init__.py b/src/test/voltha/__init__.py
new file mode 100644
index 0000000..db4ad9c
--- /dev/null
+++ b/src/test/voltha/__init__.py
@@ -0,0 +1,26 @@
+# 
+# Copyright 2016-present Ciena Corporation
+#
+# 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.
+#
+import os,sys
+##add the python path to lookup the utils
+working_dir = os.path.dirname(os.path.realpath(sys.argv[-1]))
+utils_dir = os.path.join(working_dir, '../utils')
+fsm_dir = os.path.join(working_dir, '../fsm')
+subscriber_dir = os.path.join(working_dir, '../subscriber')
+__path__.append(utils_dir)
+__path__.append(fsm_dir)
+__path__.append(subscriber_dir)
+cli_dir = os.path.join(working_dir, '../cli')
+__path__.append(cli_dir)
diff --git a/src/test/voltha/volthaTest.json b/src/test/voltha/volthaTest.json
new file mode 100644
index 0000000..8ad1319
--- /dev/null
+++ b/src/test/voltha/volthaTest.json
@@ -0,0 +1,6 @@
+{
+    "OLT_TYPE" : "tibit_olt",
+    "OLT_MAC"  : "00:0c:e2:31:12:00",
+    "VOLTHA_HOST" : "172.17.0.1",
+    "VOLTHA_REST_PORT" : 8881
+}
diff --git a/src/test/voltha/volthaTest.py b/src/test/voltha/volthaTest.py
new file mode 100644
index 0000000..d7a6892
--- /dev/null
+++ b/src/test/voltha/volthaTest.py
@@ -0,0 +1,24 @@
+import os
+import sys
+import unittest
+from nose.tools import *
+from CordTestConfig import setup_module
+from CordTestUtils import log_test
+from VolthaCtrl import VolthaCtrl
+
+class voltha_exchange(unittest.TestCase):
+
+    OLT_TYPE = 'tibit_olt'
+    OLT_MAC = '00:0c:e2:31:12:00'
+    VOLTHA_HOST = 'localhost'
+    VOLTHA_REST_PORT = 8881
+    voltha = None
+
+    @classmethod
+    def setUpClass(cls):
+        cls.voltha = VolthaCtrl(cls.VOLTHA_HOST, rest_port = cls.VOLTHA_REST_PORT)
+
+    def test_olt_enable(self):
+        log_test.info('Enabling OLT type %s, MAC %s' %(self.OLT_TYPE, self.OLT_MAC))
+        status = self.voltha.enable_device(self.OLT_TYPE, self.OLT_MAC)
+        assert_equal(status, True)
