# Copyright 2015 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """Defines the test controller base library. This module is the basis on which test controllers are built and executed. """ import logging import sys #pylint: disable=relative-import import common_lib import task_controller import task_registration_server class TestController(object): """The base test controller class.""" def __init__(self): self._registration_server = ( task_registration_server.TaskRegistrationServer()) def SetUp(self): """Setup method used by the subclass.""" pass def RunTest(self): """Main test method used by the subclass.""" raise NotImplementedError() def TearDown(self): """Teardown method used by the subclass.""" pass def CreateNewTask(self, *args, **kwargs): task = task_controller.TaskController(*args, **kwargs) self._registration_server.RegisterTaskCallback( task.otp, task.OnConnect) return task def RunController(self): """Main entry point for the controller.""" print ' '.join(sys.argv) common_lib.InitLogging() self._registration_server.Start() error = None tb = None try: self.SetUp() self.RunTest() except Exception as e: # Defer raising exceptions until after TearDown is called. error = e tb = sys.exc_info()[-1] try: self.TearDown() except Exception as e: if not tb: error = e tb = sys.exc_info()[-1] self._registration_server.Shutdown() task_controller.TaskController.ReleaseAllTasks() if error: raise error, None, tb #pylint: disable=raising-bad-type