Ejemplo n.º 1
0
 def setUp(self):
   self.test_state = mock.MagicMock(spec=TestState,
                                    plug_manager=plugs.PlugManager(),
                                    logger=mock.MagicMock())
   self.test_state.plug_manager.initialize_plugs([
       UnittestPlug, MoreRepeatsUnittestPlug])
   self.phase_executor = PhaseExecutor(self.test_state)
Ejemplo n.º 2
0
    def __init__(self, test_desc: 'test_descriptor.TestDescriptor',
                 execution_uid: Text,
                 test_options: 'test_descriptor.TestOptions'):
        """Initializer.

    Args:
      test_desc: openhtf.TestDescriptor instance describing the test to run,
        used to initialize some values here, but it is not modified.
      execution_uid: a unique uuid use to identify a test being run.
      test_options: test_options passed through from Test.
    """
        super(TestState, self).__init__()
        self._status = self.Status.WAITING_FOR_TEST_START  # type: TestState.Status

        self.test_record = test_record.TestRecord(
            dut_id=None,
            station_id=conf.station_id,
            code_info=test_desc.code_info,
            start_time_millis=0,
            # Copy metadata so we don't modify test_desc.
            metadata=copy.deepcopy(test_desc.metadata),
            diagnosers=test_options.diagnosers)
        logs.initialize_record_handler(execution_uid, self.test_record,
                                       self.notify_update)
        self.state_logger = logs.get_record_logger_for(execution_uid)
        self.plug_manager = plugs.PlugManager(test_desc.plug_types,
                                              self.state_logger)
        self.diagnoses_manager = diagnoses_lib.DiagnosesManager(
            self.state_logger.getChild('diagnoses'))
        self.running_phase_state = None  # type: Optional['PhaseState']
        self._running_test_api = None  # type: Optional['test_descriptor.TestApi']
        # TODO(arsharma): Change to Dict[Any, Any] when pytype handles it correctly.
        self.user_defined_state = {}  # type: Any
        self.execution_uid = execution_uid
        self.test_options = test_options
Ejemplo n.º 3
0
    def __init__(self, iterator, mock_plugs):
        """Create an iterator for iterating over Tests or phases to run.

    Args:
      iterator: Child iterator to use for obtaining Tests or test phases, must
          be a generator.
      mock_plugs: Dict mapping plug types to mock objects to use instead of
          actually instantiating that type.

    Raises:
      InvalidTestError: when iterator is not a generator.
    """
        if not isinstance(iterator, types.GeneratorType):
            raise InvalidTestError(
                'Methods decorated with patch_plugs or yields_phases must yield '
                'test phases or openhtf.Test objects.', iterator)

        # Since we want to run single phases, we instantiate our own PlugManager.
        # Don't do this sort of thing outside OpenHTF unless you really know what
        # you're doing (http://imgur.com/iwBCmQe).
        self.plug_manager = plugs.PlugManager(
            record_logger_name='test.PlugManager')
        self.iterator = iterator
        self.mock_plugs = mock_plugs
        self.last_result = None
Ejemplo n.º 4
0
 def setUp(self):
     super(TestExecutorExecuteBranchTest, self).setUp()
     self.diag_store = diagnoses_lib.DiagnosesStore()
     self.mock_test_record = mock.create_autospec(test_record.TestRecord)
     self.mock_logger = mock.create_autospec(logging.Logger)
     self.test_state = mock.MagicMock(
         spec=test_state.TestState,
         plug_manager=plugs.PlugManager(),
         diagnoses_manager=mock.MagicMock(
             spec=diagnoses_lib.DiagnosesManager, store=self.diag_store),
         execution_uid='01234567890',
         test_record=self.mock_test_record,
         state_logger=self.mock_logger)
     td = test_descriptor.TestDescriptor(
         phase_sequence=phase_collections.PhaseSequence(
             phase_group.PhaseGroup()),
         code_info=test_record.CodeInfo.uncaptured(),
         metadata={})
     self.test_exec = test_executor.TestExecutor(
         td,
         td.uid,
         None,
         test_descriptor.TestOptions(),
         run_with_profiling=False)
     self.test_exec.test_state = self.test_state
     patcher = mock.patch.object(self.test_exec, '_execute_sequence')
     self.mock_execute_sequence = patcher.start()
Ejemplo n.º 5
0
 def setUp(self):
   self.test_state = mock.MagicMock(
       spec=test_state.TestState,
       plug_manager=plugs.PlugManager(logger_name='mock.logger.for.openhtf'),
       execution_uid='01234567890')
   self.test_state.plug_manager.initialize_plugs([
       UnittestPlug, MoreRepeatsUnittestPlug])
   self.phase_executor = phase_executor.PhaseExecutor(self.test_state)
Ejemplo n.º 6
0
 def setUp(self):
     super(PhaseExecutorTest, self).setUp()
     self.test_state = mock.MagicMock(spec=test_state.TestState,
                                      plug_manager=plugs.PlugManager(),
                                      execution_uid='01234567890',
                                      state_logger=mock.MagicMock())
     self.test_state.plug_manager.initialize_plugs(
         [UnittestPlug, MoreRepeatsUnittestPlug])
     self.phase_executor = phase_executor.PhaseExecutor(self.test_state)
Ejemplo n.º 7
0
 def setUp(self):
     super(TestExecutorExecutePhasesTest, self).setUp()
     self.test_state = mock.MagicMock(spec=test_state.TestState,
                                      plug_manager=plugs.PlugManager(),
                                      execution_uid='01234567890',
                                      state_logger=mock.MagicMock())
     self.test_exec = test_executor.TestExecutor(
         None, 'uid', None, test_descriptor.TestOptions())
     self.test_exec.test_state = self.test_state
     patcher = mock.patch.object(self.test_exec, '_handle_phase')
     self.mock_handle_phase = patcher.start()
Ejemplo n.º 8
0
 def setUp(self):
     self.test_state = mock.MagicMock(
         spec=test_state.TestState,
         plug_manager=plugs.PlugManager(
             record_logger_name='mock.logger.for.openhtf'),
         execution_uid='01234567890',
         logger=mock.MagicMock())
     self.test_exec = test_executor.TestExecutor(
         None, 'uid', None, test_descriptor.TestOptions())
     self.test_exec.test_state = self.test_state
     patcher = mock.patch.object(self.test_exec, '_handle_phase')
     self.mock_handle_phase = patcher.start()
Ejemplo n.º 9
0
  def __init__(self, test_desc, execution_uid):
    super(TestState, self).__init__()
    self._status = self.Status.WAITING_FOR_TEST_START

    self.test_record = test_record.TestRecord(
        dut_id=None, station_id=conf.station_id, code_info=test_desc.code_info,
        # Copy metadata so we don't modify test_desc.
        metadata=copy.deepcopy(test_desc.metadata))
    self.logger = logs.initialize_record_logger(
        execution_uid, self.test_record, self.notify_update)
    self.plug_manager = plugs.PlugManager(test_desc.plug_types, self.logger)
    self.running_phase_state = None
    self.user_defined_state = {}
    self.execution_uid = execution_uid
Ejemplo n.º 10
0
    def setUp(self):
        super(TestExecutorHandlePhaseTest, self).setUp()
        self.test_state = mock.MagicMock(
            spec=test_state.TestState,
            plug_manager=plugs.PlugManager(),
            execution_uid='01234567890',
            state_logger=mock.MagicMock(),
            test_options=test_descriptor.TestOptions(),
            test_record=mock.MagicMock())
        self.phase_exec = mock.MagicMock(spec=phase_executor.PhaseExecutor)
        self.test_exec = test_executor.TestExecutor(
            None, 'uid', None, test_descriptor.TestOptions())
        self.test_exec.test_state = self.test_state
        self.test_exec._phase_exec = self.phase_exec

        patcher = mock.patch.object(self.test_exec, '_execute_phase_group')
        self.mock_execute_phase_group = patcher.start()
Ejemplo n.º 11
0
    def setUp(self):
        super(TestExecutorExecutePhaseGroupTest, self).setUp()
        self.test_state = mock.MagicMock(spec=test_state.TestState,
                                         plug_manager=plugs.PlugManager(),
                                         execution_uid='01234567890',
                                         state_logger=mock.MagicMock())
        td = test_descriptor.TestDescriptor(
            phase_sequence=phase_collections.PhaseSequence(
                phase_group.PhaseGroup()),
            code_info=test_record.CodeInfo.uncaptured(),
            metadata={})
        self.test_exec = test_executor.TestExecutor(
            td,
            td.uid,
            None,
            test_descriptor.TestOptions(),
            run_with_profiling=False)
        self.test_exec.test_state = self.test_state
        patcher = mock.patch.object(self.test_exec, '_execute_sequence')
        self.mock_execute_sequence = patcher.start()

        @phase_descriptor.PhaseOptions()
        def setup():
            pass

        self._setup = phase_collections.PhaseSequence((setup, ))

        @phase_descriptor.PhaseOptions()
        def main():
            pass

        self._main = phase_collections.PhaseSequence((main, ))

        @openhtf.PhaseOptions(timeout_s=30)
        def teardown():
            pass

        self._teardown = phase_collections.PhaseSequence((teardown, ))

        self.group = phase_group.PhaseGroup(setup=self._setup,
                                            main=self._main,
                                            teardown=self._teardown,
                                            name='group')
Ejemplo n.º 12
0
    def Execute(self, test_start=None, loop=None):
        """Starts the framework and executes the given test.

    Args:
      test_start: Trigger for starting the test, defaults to not setting the DUT
          serial number.
      loop: DEPRECATED
    """
        # TODO(madsci): Remove this after a transitionary period.
        if loop is not None:
            raise ValueError(
                'DEPRECATED. Looping is no longer natively supported by OpenHTF, '
                'use a while True: loop around Test.Execute() instead.')

        # We have to lock this section to ensure we don't call
        # TestExecutor.StopFromSigInt() in self.Stop() between instantiating it and
        # .Start()'ing it.
        with self._lock:
            self._executor = exe.TestExecutor(
                self._test_data, plugs.PlugManager(),
                self._test_options.teardown_function)
            _LOG.info('Executing test: %s', self.data.code_info.name)
            self._executor.SetTestStart(test_start)
            http_server = None
            if self._test_options.http_port:
                http_server = http_api.Server(self._executor,
                                              self._test_options.http_port)
                http_server.Start()

            self._executor.Start()

        try:
            self._executor.Wait()
        finally:
            # If the framework doesn't transition from INITIALIZING to EXECUTING
            # then test state isn't set and there's no record to output.
            if self._executor and self._executor.GetState():
                record = self._executor.GetState().GetFinishedRecord()
                self.OutputTestRecord(record)
            if http_server:
                http_server.Stop()
            self._executor = None
Ejemplo n.º 13
0
 def setUp(self):
     super(TestExecutorExecuteSequencesTest, self).setUp()
     self.test_state = mock.MagicMock(spec=test_state.TestState,
                                      plug_manager=plugs.PlugManager(),
                                      execution_uid='01234567890',
                                      state_logger=mock.MagicMock())
     td = test_descriptor.TestDescriptor(
         phase_sequence=phase_collections.PhaseSequence(
             phase_group.PhaseGroup()),
         code_info=test_record.CodeInfo.uncaptured(),
         metadata={})
     self.test_exec = test_executor.TestExecutor(
         td,
         td.uid,
         None,
         test_descriptor.TestOptions(),
         run_with_profiling=False)
     self.test_exec.test_state = self.test_state
     patcher = mock.patch.object(self.test_exec, '_execute_node')
     self.mock_execute_node = patcher.start()
Ejemplo n.º 14
0
    def setUp(self):
        super(TestExecutorExecutePhaseGroupTest, self).setUp()
        self.test_state = mock.MagicMock(spec=test_state.TestState,
                                         plug_manager=plugs.PlugManager(),
                                         execution_uid='01234567890',
                                         state_logger=mock.MagicMock())
        self.test_exec = test_executor.TestExecutor(
            None,
            'uid',
            None,
            test_descriptor.TestOptions(),
            run_with_profiling=False)
        self.test_exec.test_state = self.test_state
        patcher = mock.patch.object(self.test_exec,
                                    '_execute_abortable_phases')
        self.mock_execute_abortable = patcher.start()

        patcher = mock.patch.object(self.test_exec, '_execute_teardown_phases')
        self.mock_execute_teardown = patcher.start()

        def setup():
            pass

        self._setup = setup

        def main():
            pass

        self._main = main

        @openhtf.PhaseOptions(timeout_s=30)
        def teardown():
            pass

        self._teardown = teardown

        self.group = phase_group.PhaseGroup(setup=[setup],
                                            main=[main],
                                            teardown=[teardown],
                                            name='group')
Ejemplo n.º 15
0
    def __init__(self, test_case, iterator, mock_plugs,
                 phase_user_defined_state, phase_diagnoses):
        """Create an iterator for iterating over Tests or phases to run.

    This should only be instantiated internally.

    Args:
      test_case: TestCase subclass where the test case function is defined.
      iterator: Child iterator to use for obtaining Tests or test phases, must
        be a generator.
      mock_plugs: Dict mapping plug types to mock objects to use instead of
        actually instantiating that type.
      phase_user_defined_state: If not None, a dictionary that will be added to
        the test_state.user_defined_state when handling phases.
      phase_diagnoses: If not None, must be a list of Diagnosis instances; these
        are added to the DiagnosesManager when handling phases.

    Raises:
      InvalidTestError: when iterator is not a generator.
    """
        if not isinstance(iterator, types.GeneratorType):
            raise InvalidTestError(
                'Methods decorated with patch_plugs or yields_phases must yield '
                'test phases or openhtf.Test objects.', iterator)

        # Since we want to run single phases, we instantiate our own PlugManager.
        # Don't do this sort of thing outside OpenHTF unless you really know what
        # you're doing (http://imgur.com/iwBCmQe).
        self.plug_manager = plugs.PlugManager()
        self.test_case = test_case
        self.iterator = iterator
        self.mock_plugs = mock_plugs
        self.last_result = None
        if not phase_user_defined_state:
            phase_user_defined_state = {}
        self.phase_user_defined_state = phase_user_defined_state
        if not phase_diagnoses:
            phase_diagnoses = []
        self.phase_diagnoses = phase_diagnoses
Ejemplo n.º 16
0
    def __init__(self, test_desc, execution_uid, test_options):
        super(TestState, self).__init__()
        self._status = self.Status.WAITING_FOR_TEST_START

        self.test_record = test_record.TestRecord(
            dut_id=None,
            station_id=conf.station_id,
            code_info=test_desc.code_info,
            start_time_millis=0,
            # Copy metadata so we don't modify test_desc.
            metadata=copy.deepcopy(test_desc.metadata),
            diagnosers=test_options.diagnosers)
        logs.initialize_record_handler(execution_uid, self.test_record,
                                       self.notify_update)
        self.state_logger = logs.get_record_logger_for(execution_uid)
        self.plug_manager = plugs.PlugManager(test_desc.plug_types,
                                              self.state_logger)
        self.diagnoses_manager = diagnoses_lib.DiagnosesManager(
            self.state_logger.getChild('diagnoses'))
        self.running_phase_state = None
        self._running_test_api = None
        self.user_defined_state = {}
        self.execution_uid = execution_uid
        self.test_options = test_options
Ejemplo n.º 17
0
 def setUp(self):
     self.plug_manager = plugs.PlugManager(
         {AdderPlug}, record_logger_name='mock.logger.for.openhtf')
     AdderPlug.INSTANCE_COUNT = 0
Ejemplo n.º 18
0
 def setUp(self):
     super(TestPhaseDescriptor, self).setUp()
     self._phase_data = mock.Mock(
         plug_manager=plugs.PlugManager(),
         execution_uid='01234567890')
Ejemplo n.º 19
0
 def setUp(self):
     self.plug_manager = plugs.PlugManager({AdderPlug})
     AdderPlug.INSTANCE_COUNT = 0
Ejemplo n.º 20
0
 def setUp(self):
     self._phase_data = mock.Mock(plug_manager=plugs.PlugManager(
         record_logger_name='mock.logger.for.openhtf'),
                                  execution_uid='01234567890')
Ejemplo n.º 21
0
 def setUp(self):
     super(PlugsTest, self).setUp()
     self.plug_manager = plugs.PlugManager({AdderPlug})
     AdderPlug.INSTANCE_COUNT = 0
Ejemplo n.º 22
0
 def setUp(self):
     self._phase_data = mock.Mock(plug_manager=plugs.PlugManager())
Ejemplo n.º 23
0
 def setUp(self):
     self.logger = mock.MagicMock()
     self.plug_manager = plugs.PlugManager({AdderPlug}, self.logger)
     AdderPlug.INSTANCE_COUNT = 0