diff --git a/tests/atests/common/auto_test.py b/tests/atests/common/auto_test.py
index f4b90ae..b43665a 100755
--- a/tests/atests/common/auto_test.py
+++ b/tests/atests/common/auto_test.py
@@ -26,6 +26,7 @@
 import preprovisioning
 import discovery
 import authentication
+import dhcp
 import logging
 
 DEFAULT_LOG_DIR = '/tmp/voltha_test_results'
@@ -79,4 +80,6 @@
 
     authentication.run_test(ROOT_DIR, VOLTHA_DIR, LOG_DIR)
 
+    dhcp.run_test(ROOT_DIR, VOLTHA_DIR, LOG_DIR)
+
     time.sleep(5)
diff --git a/tests/atests/common/dhcp.py b/tests/atests/common/dhcp.py
new file mode 100644
index 0000000..cedd7ee
--- /dev/null
+++ b/tests/atests/common/dhcp.py
@@ -0,0 +1,210 @@
+#
+# Copyright 2018 the original author or authors.
+#
+# 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.
+#
+
+"""
+vOLT-HA DHCP Test Case module
+"""
+
+import os
+import testCaseUtils
+import logging
+import subprocess
+
+
+class DHCP(object):
+    """
+    This class implements voltha DHCP test case
+    """
+
+    CHECK_IP_FILENAME = 'voltha_check_ip.log'
+    DE_ASSIGN_IP_FILENAME = 'voltha_de-assign_ip.log'
+    ASSIGN_DHCP_IP_FILENAME = 'voltha_assign_dhcp_ip.log'
+    CHECK_ASSIGNED_IP_FILENAME = 'voltha_check_assigned_dhcp_ip.log'
+
+    def __init__(self):
+        self.dirs = dict()
+        self.dirs['log'] = None
+        self.dirs['root'] = None
+        self.dirs['voltha'] = None
+
+        self.__rgName = None
+        self.__fields = None
+        self.__deviceId = None
+        self.__portNumber = None
+
+    def h_set_log_dirs(self, root_dir, voltha_dir, log_dir):
+        testCaseUtils.config_dirs(self, log_dir, root_dir, voltha_dir)
+
+    def lookup_rg_pod_name(self):
+        self.__rgName = testCaseUtils.extract_pod_name('rg-').strip()
+
+    def discover_authorized_users(self):
+        testCaseUtils.send_command_to_onos_cli(testCaseUtils.get_dir(self, 'log'),
+                                               'voltha_onos_users.log', 'aaa-users')
+
+    def retrieve_authorized_users_device_id_and_port_number(self):
+        statusLines = testCaseUtils.get_fields_from_grep_command(self, 'AUTHORIZED', 'voltha_onos_users.log')
+        assert statusLines, 'No Users Authorized'
+        self.__fields = testCaseUtils.parse_fields(statusLines, ',')
+        deviceField = self.__fields[2].strip()
+        deviceStr, equal, deviceId = deviceField.partition('=')
+        self.__deviceId = deviceId
+        portField = self.__fields[4].strip()
+        portNumStr, equal, portNum = portField.partition('=')
+        self.__portNumber = portNum
+
+    def add_subscriber_access(self):
+        testCaseUtils.send_command_to_onos_cli(testCaseUtils.get_dir(self, 'log'),
+                                               'voltha_add_subscriber_access.log', 'volt-add-subscriber-access %s %s'
+                                               % (self.__deviceId, self.__portNumber))
+
+    def should_now_have_two_dhcp_flows(self):
+        testCaseUtils.send_command_to_onos_cli(testCaseUtils.get_dir(self, 'log'),
+                                               'voltha_onos_flows.log', 'flows')
+        statusLines = testCaseUtils.get_fields_from_grep_command(self, 'IP_PROTO:17', 'voltha_onos_flows.log')
+        assert statusLines, 'No DHCP Detection flows'
+        lines = statusLines.splitlines()
+        for line in lines:
+            self.__fields = testCaseUtils.parse_fields(line, ',')
+            inPortStr = self.__fields[10].strip()
+            selector, delimiter, inPort = inPortStr.partition('=[')
+            assert (inPort == 'IN_PORT:2' or inPort == 'IN_PORT:128'), 'DHCP detection flows not associated with expected ports'
+
+    def add_dhcp_server_configuration_data_in_onos(self):
+        logging.info('Adding DHCP Configuration Data to Onos NetCfg')
+        logging.debug('curl --user karaf:karaf -X POST -H "Content-Type: application/json" '
+                      'http://localhost:30120/onos/v1/network/configuration/apps/ -d @%s/tests/atests/build/dhcp_json'
+                      % testCaseUtils.get_dir(self, 'voltha'))
+        os.system('curl --user karaf:karaf -X POST -H "Content-Type: application/json" '
+                  'http://localhost:30120/onos/v1/network/configuration/apps/ -d @%s/tests/atests/build/dhcp_json'
+                  % testCaseUtils.get_dir(self, 'voltha'))
+
+    def activate_dhcp_server_in_onos(self):
+        logging.info('Activating DHCP server on Onos')
+        testCaseUtils.send_command_to_onos_cli(testCaseUtils.get_dir(self, 'log'),
+                                               'voltha_dhcp_server_activate.log', 'app activate dhcp')
+        statusLines = testCaseUtils.get_fields_from_grep_command(self, 'Activated', 'voltha_dhcp_server_activate.log')
+        assert statusLines, 'DHCP server failed to be Activated'
+
+    def deactivate_dhcp_server_in_onos(self):
+        logging.info('Deactivating DHCP server on Onos')
+        testCaseUtils.send_command_to_onos_cli(testCaseUtils.get_dir(self, 'log'),
+                                               'voltha_dhcp_server_deactivate.log', 'app deactivate dhcp')
+        statusLines = testCaseUtils.get_fields_from_grep_command(self, 'Deactivated', 'voltha_dhcp_server_deactivate.log')
+        assert statusLines, 'DHCP server failed to be Deactivated'
+
+    def query_for_default_ip_on_rg(self):
+        logging.info('De-assigning default IP on RG')
+        process_output = open('%s/%s' % (testCaseUtils.get_dir(self, 'log'), self.CHECK_IP_FILENAME), 'w')
+        ifconfigCheck1 = subprocess.Popen(['/usr/bin/kubectl', 'exec', '-n', 'voltha', self.__rgName, '--', 'bash', '-c',
+                                          'ifconfig'],
+                                          stdout=subprocess.PIPE,
+                                          stderr=subprocess.PIPE)
+        ifconfigCheck2 = subprocess.Popen(['grep', '-e', 'eth0', '-A1'], stdin=ifconfigCheck1.stdout,
+                                          stdout=process_output,
+                                          stderr=process_output)
+
+        ifconfigCheck1.wait()
+        ifconfigCheck1.stdout.close()
+        ifconfigCheck2.wait()
+
+        process_output.close()
+
+        testCaseUtils.print_log_file(self, self.CHECK_IP_FILENAME)
+
+    def de_assign_default_ip_on_rg(self):
+
+        statusLines = testCaseUtils.get_fields_from_grep_command(self, 'inet', self.CHECK_IP_FILENAME)
+        if statusLines:
+            process_output = open('%s/%s' % (testCaseUtils.get_dir(self, 'log'), self.DE_ASSIGN_IP_FILENAME), 'w')
+            os.system('/usr/bin/kubectl exec -n voltha %s -- bash -c "ifconfig eth0 0.0.0.0"' % self.__rgName)
+            ifconfigDeassign1 = subprocess.Popen(['/usr/bin/kubectl', 'exec', '-n', 'voltha', self.__rgName, '--', 'bash', '-c',
+                                                 'ifconfig'],
+                                                 stdout=subprocess.PIPE,
+                                                 stderr=subprocess.PIPE)
+
+            ifconfigDeassign2 = subprocess.Popen(['grep', '-e', 'eth0', '-A1'], stdin=ifconfigDeassign1.stdout,
+                                                 stdout=process_output,
+                                                 stderr=process_output)
+            ifconfigDeassign1.wait()
+            ifconfigDeassign1.stdout.close()
+            ifconfigDeassign2.wait()
+
+            process_output.close()
+
+            statusLines = testCaseUtils.get_fields_from_grep_command(self, 'inet', self.DE_ASSIGN_IP_FILENAME)
+            assert not statusLines, 'IP addr not de-assigned'
+
+        else:
+            logging.info('No default IP addr assigned to eth0')
+
+    def assign_dhcp_ip_addr_to_rg(self):
+        logging.info('Assigning IP addr on RG using DHCP')
+        process_output = open('%s/%s' % (testCaseUtils.get_dir(self, 'log'), self.ASSIGN_DHCP_IP_FILENAME), 'w')
+        dhcpAssignIp1 = subprocess.Popen(['/usr/bin/kubectl', 'exec', '-it', '-n', 'voltha', self.__rgName, '--',
+                                         'dhclient', '-v', 'eth0'],
+                                         stdout=process_output,
+                                         stderr=process_output)
+
+        dhcpAssignIp1.wait()
+        process_output.close()
+
+        testCaseUtils.print_log_file(self, self.ASSIGN_DHCP_IP_FILENAME)
+
+    def should_have_dhcp_assigned_ip(self):
+        process_output = open('%s/%s' % (testCaseUtils.get_dir(self, 'log'), self.CHECK_ASSIGNED_IP_FILENAME), 'w')
+        ifConfigCheck1 = subprocess.Popen(['/usr/bin/kubectl', 'exec', '-n', 'voltha', self.__rgName, '--', 'bash', '-c',
+                                          'ifconfig'],
+                                          stdout=subprocess.PIPE,
+                                          stderr=subprocess.PIPE)
+
+        ifConfigCheck2 = subprocess.Popen(['grep', '-e', 'eth0', '-A1'], stdin=ifConfigCheck1.stdout,
+                                          stdout=process_output,
+                                          stderr=process_output)
+        ifConfigCheck1.wait()
+        ifConfigCheck1.stdout.close()
+        ifConfigCheck2.wait()
+
+        process_output.close()
+
+        testCaseUtils.print_log_file(self, self.CHECK_ASSIGNED_IP_FILENAME)
+
+        statusLines = testCaseUtils.get_fields_from_grep_command(self, 'inet', self.CHECK_ASSIGNED_IP_FILENAME)
+        assert statusLines, 'DHCP IP addr not assigned'
+
+
+def set_firewall_rules():
+    logging.info('Setting Firewall rules for DHCP test')
+    os.system('sudo iptables -P FORWARD ACCEPT')
+
+
+def run_test(root_dir, voltha_dir, log_dir):
+
+    set_firewall_rules()
+    dhcp = DHCP()
+    dhcp.h_set_log_dirs(root_dir, voltha_dir, log_dir)
+    dhcp.lookup_rg_pod_name()
+    dhcp.discover_authorized_users()
+    dhcp.retrieve_authorized_users_device_id_and_port_number()
+    dhcp.add_subscriber_access()
+    dhcp.should_now_have_two_dhcp_flows()
+    dhcp.deactivate_dhcp_server_in_onos()
+    dhcp.add_dhcp_server_configuration_data_in_onos()
+    dhcp.activate_dhcp_server_in_onos()
+    dhcp.query_for_default_ip_on_rg()
+    dhcp.de_assign_default_ip_on_rg()
+    dhcp.assign_dhcp_ip_addr_to_rg()
+    dhcp.should_have_dhcp_assigned_ip()
diff --git a/tests/atests/common/discovery.py b/tests/atests/common/discovery.py
index fb57a22..1c5234a 100755
--- a/tests/atests/common/discovery.py
+++ b/tests/atests/common/discovery.py
@@ -56,7 +56,7 @@
         logging.info('Logical Device Info')
         statusLines = testCaseUtils.get_fields_from_grep_command(self, self.__logicalDeviceType, 'voltha_devices_after_enable.log')
         assert statusLines, 'No Logical Devices listed under devices'
-        self.__fields = testCaseUtils.parse_fields(statusLines)
+        self.__fields = testCaseUtils.parse_fields(statusLines, '|')
         self.__logicalDeviceId = self.__fields[4].strip()
         testCaseUtils.send_command_to_voltha_cli(testCaseUtils.get_dir(self, 'log'),
                                                  'voltha_logical_device.log', 'logical_device ' + self.__logicalDeviceId,
@@ -70,7 +70,7 @@
     def logical_device_ports_should_exist(self):
         statusLines = testCaseUtils.get_fields_from_grep_command(self, self.__oltDeviceId, 'voltha_logical_device_ports.log')
         assert statusLines, 'No Olt device listed under logical device ports'
-        self.__fields = testCaseUtils.parse_fields(statusLines)
+        self.__fields = testCaseUtils.parse_fields(statusLines, '|')
         portType = self.__fields[1].strip()
         assert portType == 'nni', 'Port type for %s does not match expected nni' % self.__oltDeviceId
         for onuDeviceId in self.__onuDeviceIds:
@@ -78,7 +78,7 @@
             assert statusLines, 'No Onu device %s listed under logical device ports' % onuDeviceId
             lines = statusLines.splitlines()
             for line in lines:
-                self.__fields = testCaseUtils.parse_fields(line)
+                self.__fields = testCaseUtils.parse_fields(line, '|')
                 portType = self.__fields[1].strip()
                 assert portType == 'uni-128', 'Port type for %s does not match expected uni-128' % onuDeviceId
 
@@ -94,7 +94,7 @@
         logging.info('Olt Discovery')
         statusLines = testCaseUtils.get_fields_from_grep_command(self, self.__oltType, 'voltha_devices_after_enable.log')
         assert statusLines, 'No Olt listed under devices'
-        self.__fields = testCaseUtils.parse_fields(statusLines)
+        self.__fields = testCaseUtils.parse_fields(statusLines, '|')
         self.__oltDeviceId = self.__fields[1].strip()
         testCaseUtils.send_command_to_voltha_cli(testCaseUtils.get_dir(self, 'log'),
                                                  'voltha_olt_device.log', 'device ' + self.__oltDeviceId, 'voltha_olt_ports.log',
@@ -108,7 +108,7 @@
         assert statusLines, 'No Onu listed under devices'
         lines = statusLines.splitlines()
         for line in lines:
-            self.__fields = testCaseUtils.parse_fields(line)
+            self.__fields = testCaseUtils.parse_fields(line, '|')
             onuDeviceId = self.__fields[1].strip()
             self.__onuDeviceIds.append(onuDeviceId)
             testCaseUtils.send_command_to_voltha_cli(testCaseUtils.get_dir(self, 'log'),
@@ -124,7 +124,7 @@
         assert statusLines, 'No Olt device listed under ports'
         lines = statusLines.splitlines()
         for line in lines:
-            self.__fields = testCaseUtils.parse_fields(line)
+            self.__fields = testCaseUtils.parse_fields(line, '|')
             assert (self.check_states(self.__oltDeviceId) is True), 'States of %s does match expected ' % self.__oltDeviceId
             portType = self.__fields[3].strip()
             assert (portType == 'ETHERNET_NNI' or portType == 'PON_OLT'),\
@@ -145,7 +145,7 @@
             assert statusLines, 'No Onu device listed under ports'
             lines = statusLines.splitlines()
             for line in lines:
-                self.__fields = testCaseUtils.parse_fields(line)
+                self.__fields = testCaseUtils.parse_fields(line, '|')
                 assert (self.check_states(onuDeviceId) is True), 'States of %s does match expected ' % onuDeviceId
                 portType = self.__fields[3].strip()
                 assert (portType == 'ETHERNET_UNI' or portType == 'PON_ONU'),\
diff --git a/tests/atests/common/preprovisioning.py b/tests/atests/common/preprovisioning.py
index affa991..a7f8a7f 100755
--- a/tests/atests/common/preprovisioning.py
+++ b/tests/atests/common/preprovisioning.py
@@ -71,7 +71,7 @@
     def check_olt_fields_before_enabling(self):
         statusLines = testCaseUtils.get_fields_from_grep_command(self, self.__oltType, 'voltha_devices_before_enable.log')
         assert statusLines, 'No Olt listed under devices'
-        self.__fields = testCaseUtils.parse_fields(statusLines)
+        self.__fields = testCaseUtils.parse_fields(statusLines, '|')
         self.__oltDeviceId = self.__fields[1].strip()
         logging.debug("OLT device id = %s" % self.__oltDeviceId)
         adminState = self.__fields[3].strip()
@@ -95,7 +95,7 @@
     def check_olt_fields_after_enabling(self):
         statusLines = testCaseUtils.get_fields_from_grep_command(self, self.__oltType, 'voltha_devices_after_enable.log')
         assert statusLines, 'No Olt listed under devices'
-        self.__fields = testCaseUtils.parse_fields(statusLines)
+        self.__fields = testCaseUtils.parse_fields(statusLines, '|')
         assert self.check_states(self.__oltType), 'States of %s does match expected' % self.__oltType
         hostPort = self.__fields[11].strip()
         assert hostPort, 'hostPort field is empty'
@@ -110,7 +110,7 @@
         lenLines = len(lines)
         assert lenLines == 1, 'Fixed single onu does not match, ONU Count was %d' % lenLines
         for line in lines:
-            self.__fields = testCaseUtils.parse_fields(line)
+            self.__fields = testCaseUtils.parse_fields(line, '|')
             assert (self.check_states(self.__onuType) is True), 'States of %s does match expected' % self.__onuType
         
     def enable(self):
diff --git a/tests/atests/common/testCaseUtils.py b/tests/atests/common/testCaseUtils.py
index e51199d..ff13db6 100755
--- a/tests/atests/common/testCaseUtils.py
+++ b/tests/atests/common/testCaseUtils.py
@@ -77,14 +77,14 @@
     child.close()
 
 
-def send_command_to_onos_cli(log_dir, cmd, log_file):
+def send_command_to_onos_cli(log_dir, log_file, cmd):
     output = open(log_dir + '/' + log_file, 'w')
     child = pexpect.spawn('ssh -p 30115 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no karaf@localhost')
     child.expect('[pP]assword:')
     child.sendline('karaf')
-    child.expect('(\\x1b\[\d*;?\d+m){1,2}onos>(\\x1b\[\d*;?\d+m){1,2}')
+    child.expect('(\\x1b\[\d*;?\d+m){1,2}onos> (\\x1b\[\d*;?\d+m){1,2}')
     child.sendline(cmd)
-    child.expect('(\\x1b\[\d*;?\d+m){1,2}onos>(\\x1b\[\d*;?\d+m){1,2}')
+    child.expect('(\\x1b\[\d*;?\d+m){1,2}onos> (\\x1b\[\d*;?\d+m){1,2}')
 
     output.write(child.before)
     
@@ -99,8 +99,8 @@
     return statusLines
     
 
-def parse_fields(status_line):
-    statusList = status_line.split("|")
+def parse_fields(status_line, delimiter):
+    statusList = status_line.split(delimiter)
     return statusList
 
 
