text: """Exception classes for qemu runner."""
  
  
  class RunnerError(Exception):
      """Contains all kinds of errors .run() will intentionally throw."""
  
  
  class RunnerGenericError(RunnerError):
      """Generic runner error message."""
  
      def __init__(self, msg):
          super(RunnerGenericError, self).__init__()
          self.msg = msg
  
      def __str__(self):
          return "Runner failed: %s" % self.msg
  
  
  class ConfigError(RunnerError):
      """Invalid configuration."""
  
      def __init__(self, msg):
          super(ConfigError, self).__init__()
          self.msg = msg
  
      def __str__(self):
          return "Invalid configuration: %s" % self.msg
  
  
  class AdbFailure(RunnerError):
      """An adb invocation failed."""
  
      def __init__(self, adb_args, code):
          super(AdbFailure, self).__init__(self)
          self.adb_args = adb_args
          self.code = code
  
      def __str__(self):
          return "'adb %s' failed with %d" % (" ".join(self.adb_args), self.code)
  
  
  class Timeout(RunnerError):
      """A step timed out."""
  
      def __init__(self, step, timeout):
          super(Timeout, self).__init__(self)
          self.step = step
          self.timeout = timeout
  
      def __str__(self):
          return "%s timed out (%d s)" % (self.step, self.timeout)
  