[ONOS-7408] Refactor HA suite to be able to run with trellis

- Better support for dual homed hosts
- Support parsing more types of flows from OVS of1.3 tables
- More specific error handling in Mininet driver
- Only check attachment points if that mapping is provided
- Minor refactoring of link up/down argument names for consistency
- Use list of hosts/switches in mn instead of hard coded ranges
- Add .params.fabric for testing with fabric
- Add .params.intents for testing with intents, classic/default version
  of the tests
- Add support for setting karaf log levels after startup
- Fix malformed command in cell file if no OCN is supplied
- Add back CFG for the ECFlowRuleStore now that it is the default impl
- Check Network config after connecting mininet

TODO:
- Set log levels in ONOS service files so we can set logging during startup
- Make sure we process all treatments in flows. eg drop and
  clear_treatment
- Does the topology come up the same each time?
    - same port numbers, etc...
- Jenkinsfiles
    - use .params.fabric for HA fabric tests

Notes:
- Uses Topology and config from the SegmentRouting tests

Change-Id: I08f08ba1d3d18f710f63a45b28ac3a2868a1a5cf
diff --git a/TestON/drivers/common/cli/onosdriver.py b/TestON/drivers/common/cli/onosdriver.py
index 8324677..37feab8 100755
--- a/TestON/drivers/common/cli/onosdriver.py
+++ b/TestON/drivers/common/cli/onosdriver.py
@@ -795,7 +795,8 @@
                 tempCount = tempCount + 1
 
             cellFile.write( "export OCI=$OC1\n" )
-            cellFile.write( mnString + "\"" + str(mnIpAddrs) + "\"\n" )
+            if mnString:
+                cellFile.write( mnString + "\"" + str( mnIpAddrs ) + "\"\n" )
             cellFile.write( appString + "\n" )
             cellFile.write( onosGroup + "\n" )
             cellFile.write( onosUser + "\n" )
@@ -836,20 +837,19 @@
                 # Note that this variable name is subject to change
                 #   and that this driver will have to change accordingly
                 self.handle.expect( str( cellname ) )
+                response = self.handle.before + self.handle.after
                 i = self.handle.expect( [ "No such cell",
-                                          self.prompt,
-                                          pexpect.TIMEOUT ], timeout=10 )
+                                          "command not found",
+                                          self.prompt ], timeout=10 )
+                response += self.handle.before + self.handle.after
                 if i == 0:
-                    main.log.error( self.name + ": No such cell. Response: " + str( self.handle.before ) )
+                    main.log.error( self.name + ": No such cell. Response: " + str( response ) )
                     main.cleanAndExit()
                 elif i == 1:
-                    main.log.info( self.name + ": Successfully set cell: " + str( self.handle.before ) )
+                    main.log.error( self.name + ": Error setting cell. Response: " + str( response ) )
+                    main.cleanAndExit()
                 elif i == 2:
-                    main.log.error( self.name + ": Set cell timed out. Response: " + str( self.handle.before ) )
-                    main.cleanAndExit()
-                else:
-                    main.log.error( self.name + ": Unexpected response: " + str( self.handle.before ) )
-                    main.cleanAndExit()
+                    main.log.info( self.name + ": Successfully set cell: " + str( response ) )
                 return main.TRUE
         except pexpect.TIMEOUT:
             main.log.error( self.name + ": TIMEOUT exception found" )