Stability fixes for SR Tests and small fixes for running ONOS in docker

- move checkOptions to component driver
- use karafTimeout for SR tests
- Fix some docker options
- Make sure mn docker can resolve own hostname
- Fix config file ip format for DHCP relay app

Change-Id: I85e8c52384e0fb478462fa9bbaf0b31a599b632b
(cherry picked from commit 521ecde3f8d28288303ea11129faa0cfd86b9bcd)
diff --git a/TestON/drivers/common/cli/onosdriver.py b/TestON/drivers/common/cli/onosdriver.py
index 6b13e3a..18540f0 100755
--- a/TestON/drivers/common/cli/onosdriver.py
+++ b/TestON/drivers/common/cli/onosdriver.py
@@ -39,6 +39,11 @@
         """
         self.name = None
         self.home = None
+        self.maxNodes = None
+        self.karafUser = None
+        self.karafPass = None
+        self.webUser = None
+        self.webPass = None
         self.handle = None
         self.nicAddr = None
         super( OnosDriver, self ).__init__()
@@ -55,26 +60,26 @@
 
             for key in connectargs:
                 vars( self )[ key ] = connectargs[ key ]
-            self.home = "~/onos"
-            for key in self.options:
-                if key == "home":
-                    self.home = self.options[ 'home' ]
-                    break
-            if self.home is None or self.home == "":
-                self.home = "~/onos"
-
             self.name = self.options[ 'name' ]
 
             # The 'nodes' tag is optional and it is not required in .topo file
             for key in self.options:
-                if key == "nodes":
+                if key == "home":
+                    self.home = self.options[ 'home' ]
+                elif key == "nodes":
                     # Maximum number of ONOS nodes to run, if there is any
                     self.maxNodes = int( self.options[ 'nodes' ] )
-                    break
-                self.maxNodes = None
+                elif key == "web_user":
+                    self.webUser = self.options[ key ]
+                elif key == "web_pass":
+                    self.webPass = self.options[ key ]
 
-            if self.maxNodes is None or self.maxNodes == "":
-                self.maxNodes = 100
+            self.home = self.checkOptions( self.home, "~/onos" )
+            self.maxNodes = self.checkOptions( self.maxNodes, 100 )
+            self.karafUser = self.checkOptions( self.karafUser, self.user_name )
+            self.karafPass = self.checkOptions( self.karafPass, self.pwd )
+            self.webUser = self.checkOptions( self.webUser, "onos" )
+            self.webPass = self.checkOptions( self.webPass, "rocks" )
 
             # Grabs all OC environment variables based on max number of nodes
             self.onosIps = {}  # Dictionary of all possible ONOS ip
@@ -826,6 +831,8 @@
             # on here.
             appString = "export ONOS_APPS=" + appString
             onosGroup = "export ONOS_GROUP=" + onosUser
+            onosWebUser = "export ONOS_WEB_USER=" + self.webUser
+            onosWebPass = "export ONOS_WEB_PASS=" + self.webPass
             onosUser = "export ONOS_USER=" + onosUser
             if useSSH:
                 onosUseSSH = "export ONOS_USE_SSH=true"
@@ -871,6 +878,8 @@
             cellFile.write( appString + "\n" )
             cellFile.write( onosGroup + "\n" )
             cellFile.write( onosUser + "\n" )
+            cellFile.write( onosWebUser + "\n" )
+            cellFile.write( onosWebPass + "\n" )
             if useSSH:
                 cellFile.write( onosUseSSH + "\n" )
             cellFile.close()
@@ -2718,10 +2727,15 @@
             for ip in onosIPs:
                 cmd += " " + str( ip )
             self.handle.sendline( cmd )
-            self.handle.expect( self.prompt, timeout=timeout )
-            handle = self.handle.before
-            main.log.debug( handle )
+            i = 0
+            while i == 0:
+                i = self.handle.expect( [ "Password", self.prompt ], timeout=timeout )
+                handle = self.handle.before
+                main.log.debug( "%s: %s" % ( self.name, handle ) )
+                if i == 0:
+                    self.handle.sendline( self.pwd )
             assert handle is not None, "Error in sendline"
+            assert "The requested URL returned error" not in handle, handle
             assert "Command not found:" not in handle, handle
             assert "Exception:" not in handle, handle
             # Rename and move diags file to dstDir from /tmp
@@ -2730,7 +2744,7 @@
             self.handle.sendline( "mv /tmp/onos-diags.tar.gz " + str( dstDir ) + "onos-diags" + str( suffix ) + ".tar.gz" )
             self.handle.expect( self.prompt )
             handle = self.handle.before
-            main.log.debug( handle )
+            main.log.debug( "%s: %s" % ( self.name, handle ) )
             assert handle is not None, "Error in sendline"
             assert "No such file or directory" not in handle, handle
             return main.TRUE