diff --git a/tests/atests/build/Makefile b/tests/atests/build/Makefile
index 0041222..f18c6c2 100644
--- a/tests/atests/build/Makefile
+++ b/tests/atests/build/Makefile
@@ -125,9 +125,16 @@
 	done
 	rm /tmp/pon0_group_fwd_mask
 	touch $@
-
+	
 $(M)/voltha_ponsim_running: | $(M)/pon0_fwd
 	$(HOME)/cord/helm-charts/scripts/wait_for_pods.sh
+	until http -a karaf:karaf --ignore-stdin --check-status GET http://127.0.0.1:30120/onos/v1/configuration/org.opencord.olt.impl.Olt; \
+	do \
+		sleep 5; \
+	done
+	http -a karaf:karaf --ignore-stdin POST http://127.0.0.1:30120/onos/v1/configuration/org.opencord.olt.impl.Olt defaultVlan=65535
+	timeout 1m bash -c "until http GET http://127.0.0.1:30125/health|jq '.state'|grep -q HEALTHY; do echo 'Waiting for VOLTHA to be HEALTHY'; sleep 10; done"
+	echo "[passed] VOLTHA is HEALTHY"
 	touch $@
 	echo "Voltha Test Framework Ready!"
 
@@ -153,7 +160,7 @@
 
 remove-chart-milestones:
 	cd $(M); sudo rm -f setup kafka kafka-running onos voltha etcd-operator-ready etcd-cluster \
-		pon0_fwd voltha-running ponsim voltha_ponsim_running
+		voltha-running ponsim pon0_fwd voltha_ponsim_running
 remove-kube-milestones:
 	cd $(M); sudo rm -f kubeadm helm-init
 
diff --git a/tests/atests/build/sadis_json b/tests/atests/build/sadis_json
index 43838a1..fc613b7 100644
--- a/tests/atests/build/sadis_json
+++ b/tests/atests/build/sadis_json
@@ -10,10 +10,10 @@
          },
          "entries":[  
             {  
-               "id":"00:26:F2:F3:17:B0",
+               "id":"PSMO12345678",
                "cTag":33,
                "sTag":44,
-               "nasPortId":"uni-128"
+               "nasPortId":"PSMO12345678"
             },
             {  
                "id":"1d1d1d1d1d1d11",
@@ -23,7 +23,7 @@
             },
             {  
                "id":"olt.voltha.svc:50060",
-	       "uplinkPort":2
+               "uplinkPort":2
             }
          ]
       }
diff --git a/tests/atests/common/auto_test.py b/tests/atests/common/auto_test.py
index 709d218..e6d21db 100755
--- a/tests/atests/common/auto_test.py
+++ b/tests/atests/common/auto_test.py
@@ -24,12 +24,15 @@
 import argparse
 import volthaMngr
 import preprovisioning
+import discovery
+import logging
 
 DEFAULT_LOG_DIR = '/tmp/voltha_test_results'
+logging.basicConfig(level=logging.INFO)
 
 def dirInit(logDir=DEFAULT_LOG_DIR,
          volthaDir=os.environ['VOLTHA_BASE']):
-    print(__file__)
+    logging.info(__file__)
     """
     Init automated testing environment and return three directories: root dir,
     voltha sources dir and log dir
@@ -45,7 +48,7 @@
     
     os.system('mkdir -p ' + logDir + ' > /dev/null 2>&1')
     os.system('rm -rf %s/*' % logDir)
-    print('Start Provisioning Test at: %s\nRoot Directory: %s\n'
+    logging.info('Start Provisioning Test at: %s\nRoot Directory: %s\n'
           'VOLTHA Directory: %s\nLog Directory: %s' %
           (currentTime, rootDir, volthaDir, logDir))
 
@@ -70,5 +73,7 @@
     volthaMngr.voltha_Initialize(ROOT_DIR, VOLTHA_DIR, LOG_DIR)
 
     preprovisioning.runTest('olt.voltha.svc', 50060, 'ponsim_olt', 'ponsim_onu', LOG_DIR)
+    
+    discovery.runTest('ponsim_olt', 'ponsim_onu', LOG_DIR)
 
     time.sleep(5)
diff --git a/tests/atests/common/build.sh b/tests/atests/common/build.sh
index 203f59b..23e9adb 100755
--- a/tests/atests/common/build.sh
+++ b/tests/atests/common/build.sh
@@ -33,6 +33,7 @@
     sudo make reset-kubeadm
 elif [ $1 == "start" ]
   then
+    sudo service docker restart
     sudo make -f Makefile
 elif [ $1 == "stop" ]
   then
diff --git a/tests/atests/common/discovery.py b/tests/atests/common/discovery.py
new file mode 100755
index 0000000..0015e5a
--- /dev/null
+++ b/tests/atests/common/discovery.py
@@ -0,0 +1,156 @@
+#
+# 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 Discovery Test Case module
+"""
+
+import time
+import os
+import commands
+import testCaseUtils
+import logging
+
+class Discovery(object):
+
+    """
+    This class implements voltha discovery test
+    """
+    
+    def __init__(self):
+        self.dirs = {}
+        self.dirs ['log'] = None
+        self.dirs ['root'] = None
+        self.dirs ['voltha'] = None
+        
+        self.__oltType = None
+        self.__onuType = None
+        self.__fields = []
+        self.__oltDeviceId = None
+        self.__onuDeviceIds = []
+        self.__peers = None
+        
+    def dSetLogDirs(self, logDir):
+        testCaseUtils.configDirs(self, logDir)
+
+    def dConfigure(self, oltType, onuType):
+        self.__oltType = oltType
+        self.__onuType = onuType
+
+    def oltDiscovery(self):
+        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.parseFields(statusLines)
+        self.__oltDeviceId = self.__fields[1].strip()
+        testCaseUtils.send_command_to_voltha_cli(testCaseUtils.getDir(self, 'log'),
+            'voltha_olt_device.log', 'device ' + self.__oltDeviceId, 'voltha_olt_ports.log', 'ports', 'voltha_olt_flows.log', 'flows')
+        testCaseUtils.printLogFile (self, 'voltha_olt_ports.log')
+        testCaseUtils.printLogFile (self, 'voltha_olt_flows.log')
+            
+    def onuDiscovery(self):
+        logging.info('Onu Discovery')
+        statusLines = testCaseUtils.get_fields_from_grep_command(self, self.__onuType, 'voltha_devices_after_enable.log')
+        assert statusLines, 'No Onu listed under devices'
+        lines = statusLines.splitlines()
+        for line in lines:
+            self.__fields = testCaseUtils.parseFields(line)
+            onuDeviceId = self.__fields[1].strip()
+            self.__onuDeviceIds.append(onuDeviceId)
+            testCaseUtils.send_command_to_voltha_cli(testCaseUtils.getDir(self, 'log'),
+            'voltha_onu_device_' + str(self.__onuDeviceIds.index(onuDeviceId)) + '.log', 'device ' + onuDeviceId, 
+            'voltha_onu_ports_' +  str(self.__onuDeviceIds.index(onuDeviceId)) + '.log', 'ports', 
+            'voltha_onu_flows_' + str(self.__onuDeviceIds.index(onuDeviceId)) + '.log', 'flows')
+            testCaseUtils.printLogFile (self, 'voltha_onu_ports_' + str(self.__onuDeviceIds.index(onuDeviceId)) + '.log')
+            testCaseUtils.printLogFile (self, 'voltha_onu_flows_' + str(self.__onuDeviceIds.index(onuDeviceId)) + '.log')
+                
+    def olt_ports_should_be_enabled_and_active(self):
+        statusLines = testCaseUtils.get_fields_from_grep_command(self, self.__oltDeviceId, 'voltha_olt_ports.log')
+        assert statusLines, 'No Olt device listed under ports'
+        lines = statusLines.splitlines()
+        for line in lines:
+            self.__fields = testCaseUtils.parseFields(line)
+            assert self.check_states(self.__oltDeviceId) == True, 'States of %s does match expected ' % self.__oltDeviceId
+            portType = self.__fields[3].strip()
+            assert (portType == 'ETHERNET_NNI' or portType == 'PON_OLT'),\
+            'Port type for %s does not match expected ETHERNET_NNI or PON_OLT' % self.__oltDeviceId
+            if portType == 'PON_OLT':
+                self.__peers = self.__fields[7].strip()
+                peerFields = self.__peers.split(',')
+                peerDevices = peerFields[1::2]
+                for peerDevice in peerDevices:
+                    deviceFields = peerDevice.split(':')
+                    deviceId = deviceFields[1].replace("'","").replace('u','').rstrip("}]").strip()
+                    assert deviceId in self.__onuDeviceIds, 'ONU Device %s not found as Peer' % deviceId
+                    
+    def onu_ports_should_be_enabled_and_active(self):
+        for onuDeviceId in self.__onuDeviceIds:
+            statusLines = testCaseUtils.get_fields_from_grep_command(self, onuDeviceId, 'voltha_onu_ports_' + \
+            str(self.__onuDeviceIds.index(onuDeviceId)) + '.log')
+            assert statusLines, 'No Onu device listed under ports'
+            lines = statusLines.splitlines()
+            for line in lines:
+                self.__fields = testCaseUtils.parseFields(line)
+                assert self.check_states(onuDeviceId) == True, 'States of %s does match expected ' % onuDeviceId
+                portType = self.__fields[3].strip()
+                assert (portType == 'ETHERNET_UNI' or portType == 'PON_ONU'),\
+                'Port type for %s does not match expected ETHERNET_UNI or PON_ONU' % onuDeviceId
+                if portType == 'PON_ONU':
+                    self.__peers = self.__fields[7].strip()
+                    peerFields = self.__peers.split(',')
+                    peerDevice = peerFields[1]
+                    deviceFields = peerDevice.split(':')
+                    deviceId = deviceFields[1].replace("'","").replace('u','').rstrip("}]").strip()
+                    assert deviceId == self.__oltDeviceId, 'OLT Device %s not found as Peer' % deviceId
+                    
+                           
+    def check_states(self, deviceId):
+        result = True
+        adminState = self.__fields[4].strip()
+        assert adminState == 'ENABLED', 'Admin State of %s not ENABLED' % deviceId
+        operStatus = self.__fields[5].strip()
+        assert operStatus == 'ACTIVE', 'Oper Status of %s not ACTIVE' % deviceId
+        return result
+
+    def olt_should_have_at_least_one_flow(self):
+        statusLines = testCaseUtils.get_fields_from_grep_command(self, 'Flows', 'voltha_olt_flows.log')
+        assert statusLines, 'No Olt flows under device %s' % self.__oltDeviceId
+        before, flows, numFlows = statusLines.partition('Flows')
+        plainNumber = numFlows.strip().strip('():')
+        if plainNumber.isdigit():
+            assert int(plainNumber) > 0, 'Zero number of flows for Olt %s' % self.__oltDeviceId
+            
+    def onu_should_have_at_least_one_flow(self):
+        for onuDeviceId in self.__onuDeviceIds:
+            statusLines = testCaseUtils.get_fields_from_grep_command(self, 'Flows', 'voltha_onu_flows_' + \
+            str(self.__onuDeviceIds.index(onuDeviceId)) + '.log')
+            assert statusLines, 'No Onu flows under device %s' % onuDeviceId
+            before, flows, numFlows = statusLines.partition('Flows')
+            plainNumber = numFlows.strip().strip('():')
+            if plainNumber.isdigit():
+                assert int(plainNumber) > 0, 'Zero number of flows for Onu %s' % onuDeviceId
+                      
+
+def runTest(oltType, onuType, logDir):
+    discovery = Discovery()
+    discovery.dSetLogDirs(logDir)
+    discovery.dConfigure(oltType, onuType)
+    discovery.oltDiscovery()
+    discovery.onuDiscovery()
+    discovery.olt_ports_should_be_enabled_and_active()                                      
+    discovery.onu_ports_should_be_enabled_and_active()
+    discovery.olt_should_have_at_least_one_flow()
+    discovery.onu_should_have_at_least_one_flow()
diff --git a/tests/atests/common/preprovisioning.py b/tests/atests/common/preprovisioning.py
index 86c2048..81cfd8a 100755
--- a/tests/atests/common/preprovisioning.py
+++ b/tests/atests/common/preprovisioning.py
@@ -15,13 +15,14 @@
 #
 
 """
-vOLT-HA Pre-provisioning Test module
+vOLT-HA Pre-provisioning Test Case module
 """
 
 import time
 import os
 import commands
 import testCaseUtils
+import logging
 
 class Preprovisioning(object):
 
@@ -39,48 +40,41 @@
         self.__oltPort = None
         self.__oltType = None
         self.__onuType = None
-        self.__statusLines = ""
         self.__fields = []
         self.__oltDeviceId = None
         
     def pSetLogDirs(self, logDir):
         testCaseUtils.configDirs(self, logDir)
 
-    def configure(self, oltIpAddress, oltPort, oltType, onuType):
+    def pConfigure(self, oltIpAddress, oltPort, oltType, onuType):
         self.__oltIpAddress = oltIpAddress       
         self.__oltPort = oltPort
         self.__oltType = oltType
         self.__onuType = onuType
 
-    def get_fields_from_grep_command(self, searchWord, logFile):
-        grepCommand =\
-            "grep %s %s/%s" % (searchWord, testCaseUtils.getDir(self, 'log'), logFile)  
-        self.__statusLines = commands.getstatusoutput(grepCommand)[1]
-        
     def preprovisionOlt(self):
-        print('Do PROVISIONING')
+        logging.info('Do PROVISIONING')
         testCaseUtils.send_command_to_voltha_cli(testCaseUtils.getDir(self, 'log'),
-            'preprovision_olt -t ponsim_olt -H %s:%s' %
-            (self.__oltIpAddress, self.__oltPort),
-            'voltha_preprovision_olt.log')
+            'voltha_preprovision_olt.log', 'preprovision_olt -t ponsim_olt -H %s:%s' %
+            (self.__oltIpAddress, self.__oltPort))
         time.sleep(5)
         
     def status_should_be_success_after_preprovision_command(self):
-        self.get_fields_from_grep_command('success', 'voltha_preprovision_olt.log')
-        assert self.__statusLines, 'Preprovision Olt command should have returned success but did not'
+        statusLines = testCaseUtils.get_fields_from_grep_command(self, 'success', 'voltha_preprovision_olt.log')
+        assert statusLines, 'Preprovision Olt command should have returned success but did not'
         
     def query_devices_before_enabling(self):
-        testCaseUtils.send_command_to_voltha_cli(testCaseUtils.getDir(self, 'log'), 'devices',
-                                        'voltha_devices_before_enable.log')
+        testCaseUtils.send_command_to_voltha_cli(testCaseUtils.getDir(self, 'log'), 
+                    'voltha_devices_before_enable.log', 'devices')
+        testCaseUtils.printLogFile (self, 'voltha_devices_before_enable.log')
         time.sleep(5)
         
     def check_olt_fields_before_enabling(self):
-        result = True
-        self.get_fields_from_grep_command(self.__oltType, 'voltha_devices_before_enable.log')
-        assert self.__statusLines, 'No Olt listed under devices'
-        self.__fields = testCaseUtils.parseFields(self.__statusLines)
+        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.parseFields(statusLines)
         self.__oltDeviceId = self.__fields[1].strip()
-        print ("OLT device id = %s" % self.__oltDeviceId)
+        logging.debug("OLT device id = %s" % self.__oltDeviceId)
         adminState = self.__fields[3].strip()
         assert adminState == 'PREPROVISIONED', 'Admin State not PREPROVISIONED'
         hostPort = self.__fields[4].strip()
@@ -100,9 +94,9 @@
         return result
 
     def check_olt_fields_after_enabling(self):
-        self.get_fields_from_grep_command(self.__oltType, 'voltha_devices_after_enable.log')
-        assert self.__statusLines, 'No Olt listed under devices'
-        self.__fields = testCaseUtils.parseFields(self.__statusLines)
+        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.parseFields(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'
@@ -111,9 +105,9 @@
             'Olt IP or Port does not match'
                       
     def check_onu_fields_after_enabling(self):        
-        self.get_fields_from_grep_command(self.__onuType, 'voltha_devices_after_enable.log')
-        assert self.__statusLines, 'No Onu listed under devices'
-        lines = self.__statusLines.splitlines()
+        statusLines = testCaseUtils.get_fields_from_grep_command(self, self.__onuType, 'voltha_devices_after_enable.log')
+        assert statusLines, 'No Onu listed under devices'
+        lines = statusLines.splitlines()
         lenLines = len(lines)
         assert lenLines == 1, 'Fixed single onu does not match, ONU Count was %d' % lenLines
         for line in lines:
@@ -121,22 +115,23 @@
             assert self.check_states(self.__onuType) == True, 'States of %s does match expected' % self.__onuType
         
     def enable(self):
-        print('Enable %s OLT device' % self.__oltDeviceId)
-        testCaseUtils.send_command_to_voltha_cli(testCaseUtils.getDir(self, 'log'), 'enable ' + self.__oltDeviceId,
-                                        'voltha_enable.log')
+        logging.info('Enable %s OLT device' % self.__oltDeviceId)
+        testCaseUtils.send_command_to_voltha_cli(testCaseUtils.getDir(self, 'log'),
+              'voltha_enable.log', 'enable ' + self.__oltDeviceId)
 
     def status_should_be_success_after_enable_command(self):
-        self.get_fields_from_grep_command('success', 'voltha_enable.log')
-        assert self.__statusLines, 'Enable command should have returned success but did not'
+        statusLines = testCaseUtils.get_fields_from_grep_command(self, 'success', 'voltha_enable.log')
+        assert statusLines, 'Enable command should have returned success but did not'
               
     def query_devices_after_enabling(self):
-        testCaseUtils.send_command_to_voltha_cli(testCaseUtils.getDir(self, 'log'), 'devices',
-                                        'voltha_devices_after_enable.log')
+        testCaseUtils.send_command_to_voltha_cli(testCaseUtils.getDir(self, 'log'),
+              'voltha_devices_after_enable.log', 'devices')
+        testCaseUtils.printLogFile (self, 'voltha_devices_after_enable.log')
 
 def runTest(oltIpAddress, oltPort, oltType, onuType, logDir):
     preprovisioning = Preprovisioning()
     preprovisioning.pSetLogDirs(logDir)
-    preprovisioning.configure(oltIpAddress, oltPort, oltType, onuType)
+    preprovisioning.pConfigure(oltIpAddress, oltPort, oltType, onuType)
     preprovisioning.preprovisionOlt()
     preprovisioning.status_should_be_success_after_preprovision_command()
     preprovisioning.query_devices_before_enabling()
diff --git a/tests/atests/common/testCaseUtils.py b/tests/atests/common/testCaseUtils.py
index 72ba087..ead244d 100755
--- a/tests/atests/common/testCaseUtils.py
+++ b/tests/atests/common/testCaseUtils.py
@@ -22,6 +22,7 @@
 import commands
 import subprocess
 import pexpect
+import sys
    
 def configDirs(self, logDir, rootDir = None, volthaDir = None):
     self.dirs ['log'] = logDir
@@ -41,30 +42,40 @@
         file.truncate()
         file.close()      
 
-def send_command_to_voltha_cli(logDir, cmd, logFile):
-    vcliIp = extractIpAddr('vcli')
-    print (vcliIp)
-    print (cmd)
-    output = open(logDir + '/' + logFile, 'w')
-    child = pexpect.spawn('ssh -p 5022 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no voltha@' + vcliIp)
+def send_command_to_voltha_cli(logDir, logFile1, cmd1, logFile2 = None, cmd2 = None, logFile3 = None, cmd3 = None):
+    output = open(logDir + '/' + logFile1, 'w')
+    child = pexpect.spawn('ssh -p 30110 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no voltha@localhost')
     child.expect('[pP]assword:')
     child.sendline('admin')
     child.expect('\((\\x1b\[\d*;?\d+m){1,2}voltha(\\x1b\[\d*;?\d+m){1,2}\)')
     time.sleep(10)
-    bytes = child.sendline(cmd)
-    child.expect('\((\\x1b\[\d*;?\d+m){1,2}voltha(\\x1b\[\d*;?\d+m){1,2}\)')
-    print (child.before)
-    output.write(child.before)
-    output.close()
-    removeLeadingLine(logDir, logFile)
+    bytes = child.sendline(cmd1)
+    i = child.expect(['\((\\x1b\[\d*;?\d+m){1,2}voltha(\\x1b\[\d*;?\d+m){1,2}\)',
+    '\((\\x1b\[\d*;?\d+m){1,2}.*device [0-9a-f]{16}(\\x1b\[\d*;?\d+m){1,2}\)'])
+    if i == 0:
+        output.write(child.before)
+        output.close()
+        removeLeadingLine(logDir, logFile1)
+    elif i == 1:
+        if logFile2 != None and cmd2 != None:
+            output = open(logDir + '/' + logFile2, 'w')
+            bytes = child.sendline(cmd2)
+            child.expect('\((\\x1b\[\d*;?\d+m){1,2}.*device [0-9a-f]{16}(\\x1b\[\d*;?\d+m){1,2}\)')
+            output.write(child.before)
+            output.close()
+            removeLeadingLine(logDir, logFile2)
+        if logFile3 != None and cmd3 != None:
+            output = open(logDir + '/' + logFile3, 'w')
+            bytes = child.sendline(cmd3)
+            child.expect('\((\\x1b\[\d*;?\d+m){1,2}.*device [0-9a-f]{16}(\\x1b\[\d*;?\d+m){1,2}\)')
+            output.write(child.before)
+            output.close()
+            removeLeadingLine(logDir, logFile3)
     child.close()
 
 def send_command_to_onos_cli(logDir, cmd, logFile):
-    onosIp = extractIpAddr('onos-ssh')
-    print (onosIp)
     output = open(logDir + '/' + logFile, 'w')
-    child = pexpect.spawn('ssh -p 8101 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no karaf@' + onosIp)
-    
+    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}')
@@ -77,10 +88,23 @@
     output.close()
     child.close()
 
+def get_fields_from_grep_command(self, searchWord, logFile):
+    grepCommand =\
+        "grep %s %s/%s" % (searchWord, getDir(self, 'log'), logFile)  
+    statusLines = commands.getstatusoutput(grepCommand)[1]
+    return statusLines
+    
 def parseFields(statusLine):
     statusList = statusLine.split("|")
     return statusList
 
+def printLogFile(self, logFile):
+    with open(getDir(self, 'log') + '/' + logFile, 'r+') as file:
+        lines = file.readlines()
+        print
+        for line in lines:
+            sys.stdout.write (line)
+
 def extractIpAddr(podName):
     proc1 = subprocess.Popen(['/usr/bin/kubectl', 'get', 'svc', '--all-namespaces'],
                              stdout=subprocess.PIPE,
diff --git a/tests/atests/common/volthaMngr.py b/tests/atests/common/volthaMngr.py
index 5257dfa..1978f82 100755
--- a/tests/atests/common/volthaMngr.py
+++ b/tests/atests/common/volthaMngr.py
@@ -23,7 +23,7 @@
 import time
 import subprocess
 import testCaseUtils
-import urlparse
+import logging
 
 class VolthaMngr(object):
 
@@ -70,17 +70,20 @@
     One is to add to device list and the other is to add the missing Sadis section
     """        
     def alterOnosNetCfg(self):
-        print ('Altering the Onos NetCfg to suit Voltha\'s needs')
-        time.sleep(30)
-        onosIp = testCaseUtils.extractIpAddr("onos-ui")
-        netloc = onosIp.rstrip() + ":8181"
-        devUrl = urlparse.urlunparse(('http', netloc, '/onos/v1/network/configuration/devices/', '', '', ''))
-        sadisUrl = urlparse.urlunparse(('http', netloc, '/onos/v1/network/configuration/apps/', '', '', ''))
+        logging.info ('Altering the Onos NetCfg to suit Voltha\'s needs')
+        logging.debug ('curl --user karaf:karaf -X POST -H "Content-Type: application/json" '
+            'http://localhost:30120/onos/v1/network/configuration/devices/ -d @%s/tests/atests/build/devices_json'
+            % testCaseUtils.getDir(self, 'voltha'))
         os.system('curl --user karaf:karaf -X POST -H "Content-Type: application/json" '
-            '%s -d @%s/tests/atests/build/devices_json' % (devUrl, testCaseUtils.getDir(self, 'voltha')))
+            'http://localhost:30120/onos/v1/network/configuration/devices/ -d @%s/tests/atests/build/devices_json'
+            % testCaseUtils.getDir(self, 'voltha'))
+        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/sadis_json'
+            % testCaseUtils.getDir(self, 'voltha'))
         os.system('curl --user karaf:karaf -X POST -H "Content-Type: application/json" '
-            '%s -d @%s/tests/atests/build/sadis_json' % (sadisUrl, testCaseUtils.getDir(self, 'voltha')))
-            
+            'http://localhost:30120/onos/v1/network/configuration/apps/ -d @%s/tests/atests/build/sadis_json'
+            % testCaseUtils.getDir(self, 'voltha'))
+                    
     def getAllRunningPods(self):
         allRunningPods = []
         proc1 = subprocess.Popen(['/usr/bin/kubectl', 'get', 'pods', '--all-namespaces'],
@@ -91,7 +94,7 @@
                                  stderr=subprocess.PIPE)
         proc1.stdout.close
         out, err = proc2.communicate()
-        print (out)
+        print(out)
         if out:
             for line in out.split('\n'):
                 items = line.split()
@@ -104,7 +107,7 @@
         return allRunningPods
  
     def collectPodLogs(self):
-        print('Collect logs from all Pods')
+        logging.info('Collect logs from all Pods')
         allRunningPods = self.getAllRunningPods()
         for nsName in allRunningPods:
             Namespace = nsName.get('NS')
diff --git a/tests/atests/robot/voltha_automated_test_suite.robot b/tests/atests/robot/voltha_automated_test_suite.robot
index 68cd305..66a15bd 100755
--- a/tests/atests/robot/voltha_automated_test_suite.robot
+++ b/tests/atests/robot/voltha_automated_test_suite.robot
@@ -18,11 +18,13 @@
 Library           ../common/auto_test.py
 Library           ../common/volthaMngr.py
 Library           ../common/preprovisioning.py
+Library           ../common/discovery.py
 Library           volthaMngr.VolthaMngr
 Library           preprovisioning.Preprovisioning
+Library           discovery.Discovery
 
-Test Setup        Start Voltha      
-Test Teardown     Stop Voltha
+Suite Setup        Start Voltha      
+Suite Teardown     Stop Voltha
 
 *** Variables ***
 ${LOG_DIR}        /tmp/voltha_test_results
@@ -35,14 +37,14 @@
 ${ONU_TYPE}       ponsim_onu
 
 *** Test Cases ***
-Provisioning
-    [Documentation]     VOLTHA Pre-provisioning
+Olt Pre Provisioning
+    [Documentation]     Olt Pre Provisioning
     ...                 This test preprovisions a ponsim-OLT with given IP address and TCP port 
     ...                 and then enables both it and a number of ponsim-ONUs with predefined IP/port
     ...                 information. It then verifies that all the physical and logical devices are ACTIVE
     ...                 and REACHEABLE
     PSet Log Dirs    ${LOG_DIR}
-    Configure   ${OLT_IP_ADDR}    ${OLT_PORT_ID}    ${OLT_TYPE}    ${ONU_TYPE} 
+    PConfigure   ${OLT_IP_ADDR}    ${OLT_PORT_ID}    ${OLT_TYPE}    ${ONU_TYPE} 
     Preprovision Olt
     Wait Until Keyword Succeeds    60s    2s    Query Devices Before Enabling
     Status Should Be Success After Preprovision Command
@@ -52,7 +54,23 @@
     Status Should Be Success After Enable Command
     Check Olt Fields After Enabling
     Check Onu Fields After Enabling
-
+    
+Olt Onu Discovery
+    [Documentation]     Olt Onu Discovery
+    ...                 This test covers both Onu Discovery and yet to be developped Olt Discovery
+    ...                 It aims to verify the integrity of all port fields under each discrete device.
+    ...                 It also insures that the peers fields contains device Id entries for the corresponding 
+    ...                 Olt or Onu device. Functionality to support multiple ONU accomodated
+    ...                 The extent of the flow validation is limited to checking whether number of Flows is > 0
+    DSet Log Dirs    ${LOG_DIR}
+    DConfigure      ${OLT_TYPE}    ${ONU_TYPE}
+    Olt Discovery
+    Onu Discovery
+    Olt Ports Should Be Enabled and Active
+    Onu Ports Should Be Enabled and Active
+    Olt Should Have At Least One Flow
+    Onu Should Have At Least One Flow
+    
 *** Keywords ***
 Start Voltha
     [Documentation]     Start Voltha infrastructure to run test(s). This includes starting all 
