Add HApowerFailure test
This requires at least one patch to ONOS for the `onos-power` script to
support non-default cell usernames and another patch to the onos warden
to allow multiple node failures.
Also included:
- logging changes to help debug multithreadded sections of the test.
- Some input validation in functions that don't directly call the cli
- Remove some verbose logging
- Distribute some onos commands amongst the active nodes
- Refactor out clearing the ONOS cli pexpect buffer before sending a
command into it's own function
Change-Id: If1b868b399878209ab0394956f3b3918c0176909
diff --git a/TestON/drivers/common/cli/onosdriver.py b/TestON/drivers/common/cli/onosdriver.py
index 0cb30a5..be64d99 100755
--- a/TestON/drivers/common/cli/onosdriver.py
+++ b/TestON/drivers/common/cli/onosdriver.py
@@ -2557,7 +2557,7 @@
"""
Run onos-diagnostics with given ONOS instance IPs and save output to dstDir
with suffix specified E.g. onos-diags-suffix.tar.gz
- required argDuments:
+ required arguments:
onosIPs - list of ONOS IPs for collecting diags
dstDir - diags file will be saved under the directory specified
suffix - diags file will be named with the suffix specified
@@ -2599,3 +2599,41 @@
except Exception:
main.log.exception( self.name + ": Uncaught exception!" )
main.cleanAndExit()
+
+ def onosPower( self, onosIP, toggle, userName=None ):
+ """
+ Run onos-power script to tell the cell warden to simulate a power faulure
+ for the given container.
+ required :
+ onosIP - ONOS node IP
+ toggle - either "off" or "on", used to indicate whether
+ the node should be powered off or on
+ returns:
+ main.FALSE if there's an error executing the command, and main.TRUE otherwise
+ """
+ try:
+ cmd = "onos-power {} {}".format( onosIP, toggle )
+ if userName:
+ cmd += " {}".format( userName )
+ self.handle.sendline( cmd )
+ self.handle.expect( self.prompt )
+ handle = self.handle.before
+ main.log.debug( handle )
+ assert handle is not None, "Error in sendline"
+ assert "Command not found:" not in handle, handle
+ assert "Exception:" not in handle, handle
+ assert "usage:" not in handle, handle
+ return main.TRUE
+ except AssertionError:
+ main.log.exception( "{} Error in onos-power output:".format( self.name ) )
+ return main.FALSE
+ except TypeError:
+ main.log.exception( self.name + ": Object not as expected" )
+ return main.FALSE
+ except pexpect.EOF:
+ main.log.error( self.name + ": EOF exception found" )
+ main.log.error( self.name + ": " + self.handle.before )
+ main.cleanAndExit()
+ except Exception:
+ main.log.exception( self.name + ": Uncaught exception!" )
+ main.cleanAndExit()