예제 #1
0
def create_run():
    try:
        url = request.args.get('build_url')
        user = request.args.get('user')
        password = request.args.get('password')
    except KeyError as err:
        return 'Wrong url parameters! \nExpecting %s from jenkins.' % err
    if url.endswith('/'):
        url = url[:-1]
    # make configurable
    try:
        json_resp = requests_get('%s/api/json' % url, auth=(user, password))
        subunit_data = requests_get('%s/artifact/subunit.stream' % url,
                                    auth=(user, password))
    except ValueError as err:
        return 'Failed getting build info... %s' % err
    try:
        url = get_url(json_resp)
    except ValueError as err:
        return 'Looks like your test json data is bad: %s' % err
    try:
        subunit_file = io.BytesIO(subunit_data.content)
    except ValueError as err:
        return 'Looks like your subunit stream is bad: %s' % err

    set_artifacts_link(url)
    set_metadata(url)
    stream = read_subunit.ReadSubunit(subunit_file)
    shell.process_results(stream.get_results())
    return "success for %s" % url
예제 #2
0
    def test_process_results_no_results(self):
        fake_run_time = 'run time'
        fake_results = dict(run_time=fake_run_time)
        fake_db_run_id = 'run id'
        fake_db_run = mock.Mock(name='db run')
        fake_db_run.id = fake_db_run_id
        self.db_api_mock.create_run.return_value = fake_db_run

        # Setup Configuration
        fake_run_at = '2016-08-17 10:58:00.000'
        cfg.CONF.set_override(name='run_at', override=fake_run_at)
        fake_artifacts = 'artifacts'
        cfg.CONF.set_override(name='artifacts', override=fake_artifacts)
        fake_run_id = 'run_id'
        cfg.CONF.set_override(name='run_id', override=fake_run_id)
        fake_run_meta = {'run_meta': 'value'}
        cfg.CONF.set_override(name='run_meta', override=fake_run_meta)
        # Run process_results
        shell.process_results(fake_results)
        self.db_api_mock.get_session.assert_called_once()
        expected_run_at = date_parser.parse(fake_run_at)
        self.db_api_mock.create_run.assert_called_once_with(
            self.fake_totals['skips'],
            self.fake_totals['fails'],
            self.fake_totals['success'],
            fake_run_time,
            fake_artifacts,
            id=fake_run_id,
            run_at=expected_run_at,
            session=self.fake_session)
        self.db_api_mock.add_run_metadata.assert_called_once_with(
            fake_run_meta, fake_db_run_id, self.fake_session)
        self.fake_session.close.assert_called_once()
예제 #3
0
 def test_process_results_existing_tests_invalid_status(self):
     fake_run_time = 'run time'
     # Setup a common fake DB test
     fake_db_test = mock.Mock(name='db test')
     fake_db_test.run_count = 3
     # Setup results
     fake_results = dict(test1={'status': 'invalid', 'start_time': 0,
                                'end_time': 1, 'metadata': None,
                                'attachments': None})
     fake_results_all = copy.deepcopy(fake_results)
     fake_results_all['run_time'] = fake_run_time
     # Tests are found in the DB
     self.db_api_mock.get_test_by_test_id.return_value = fake_db_test
     with testtools.ExpectedException(exceptions.UnknownStatus,
                                      '^.*\n.*%s$' % 'invalid'):
         # Run process_results
         shell.process_results(fake_results_all)
     # Check that we lookup all tests in the DB
     expected_test_by_id_calls = [mock.call(x, self.fake_session) for x in
                                  fake_results]
     self.db_api_mock.get_test_by_test_id.assert_has_calls(
         expected_test_by_id_calls, any_order=True)
     # Check that a run is created in the DB
     self.db_api_mock.create_run.assert_called_once_with(
         self.fake_totals['skips'], self.fake_totals['fails'],
         self.fake_totals['success'], fake_run_time, None, id=None,
         run_at=None, session=self.fake_session)
     # Check no test run was added to the DB
     self.db_api_mock.create_test_run.assert_not_called()
예제 #4
0
    def test_process_results_no_results(self):
        fake_run_time = 'run time'
        fake_results = dict(run_time=fake_run_time)
        fake_db_run_id = 'run id'
        fake_db_run = mock.Mock(name='db run')
        fake_db_run.id = fake_db_run_id
        self.db_api_mock.create_run.return_value = fake_db_run

        # Setup Configuration
        fake_run_at = '2016-08-17 10:58:00.000'
        cfg.CONF.set_override(name='run_at', override=fake_run_at)
        fake_artifacts = 'artifacts'
        cfg.CONF.set_override(name='artifacts', override=fake_artifacts)
        fake_run_id = 'run_id'
        cfg.CONF.set_override(name='run_id', override=fake_run_id)
        fake_run_meta = {'run_meta': 'value'}
        cfg.CONF.set_override(name='run_meta', override=fake_run_meta)
        # Run process_results
        shell.process_results(fake_results)
        self.db_api_mock.get_session.assert_called_once()
        expected_run_at = date_parser.parse(fake_run_at)
        self.db_api_mock.create_run.assert_called_once_with(
            self.fake_totals['skips'], self.fake_totals['fails'],
            self.fake_totals['success'], fake_run_time, fake_artifacts,
            id=fake_run_id, run_at=expected_run_at, session=self.fake_session)
        self.db_api_mock.add_run_metadata.assert_called_once_with(
            fake_run_meta, fake_db_run_id, self.fake_session)
        self.fake_session.close.assert_called_once()
    def _write_to_db(self, subunit):
        subunit_v2 = subunit.pop('subunit')
        # Set run metadata from gearman
        log_url = subunit.pop('log_url', None)
        subunit = self._uniquify_name(subunit)
        if log_url:
            log_dir = os.path.dirname(log_url)

            # log_dir should be the top-level directory containing a job run,
            # but the subunit file may be nested in 0 - 2 subdirectories (top,
            # logs/, or logs/old/), so we need to safely correct the path here
            log_base = os.path.basename(log_dir)
            if log_base == 'logs':
                log_dir = os.path.dirname(log_dir)
            elif log_base == 'old':
                log_dir = os.path.dirname(os.path.dirname(log_dir))

            shell.CONF.set_override('artifacts', log_dir)
        shell.CONF.set_override('run_meta', subunit)
        # Parse subunit stream and store in DB
        if subunit_v2.closed:
            logging.debug('Trying to convert closed subunit v2 stream: %s to '
                          'SQL' % subunit_v2)
        else:
            logging.debug('Converting Subunit V2 stream: %s to SQL' %
                          subunit_v2)
        stream = read_subunit.ReadSubunit(subunit_v2,
                                          targets=self.extra_targets,
                                          use_wall_time=True)
        results = stream.get_results()
        start_time = sorted(
            [results[x]['start_time'] for x in results if x != 'run_time'])[0]
        shell.CONF.set_override('run_at', start_time.isoformat())
        shell.process_results(results)
        subunit_v2.close()
예제 #6
0
 def test_process_results_test_metadata_new_remove_prefix(self):
     # Setup the metadata prefix configuration
     fake_meta_prefix = '_meta_'
     cfg.CONF.set_override(name='test_attr_prefix',
                           override=fake_meta_prefix)
     cfg.CONF.set_override(name='remove_test_attr_prefix', override=True)
     fake_run_time = 'run time'
     # Setup a common fake DB test
     fake_db_test = mock.Mock(name='db test')
     fake_db_test.id = 'test id'
     fake_db_test.run_count = 3
     fake_db_test.success = 2
     fake_db_test.failure = 1
     # Setup results
     expected_metadata_list = ['a', 'b']
     extra_metadata_list = ['c', 'd']
     full_metadata_list = [
         fake_meta_prefix + x for x in expected_metadata_list
     ] + extra_metadata_list
     fake_results = dict(
         test1={
             'status': 'fail',
             'start_time': 0,
             'end_time': 1,
             'metadata': {
                 'attrs': ','.join(full_metadata_list)
             },
             'attachments': None
         })
     fake_results_all = copy.deepcopy(fake_results)
     fake_results_all['run_time'] = fake_run_time
     # Mock create run
     fake_db_run_id = 'run id'
     fake_db_run = mock.Mock(name='db run')
     fake_db_run.id = fake_db_run_id
     self.db_api_mock.create_run.return_value = fake_db_run
     # Mock create test run
     fake_db_test_run_id = 'test run id'
     fake_db_test_run = mock.Mock(name='db test run')
     fake_db_test_run.id = fake_db_test_run_id
     self.db_api_mock.create_test_run.return_value = fake_db_test_run
     # Tests are found in the DB
     self.db_api_mock.get_test_by_test_id.return_value = fake_db_test
     # Test metadata is not found in the DB
     self.db_api_mock.get_test_metadata.return_value = []
     # Run process_results
     shell.process_results(fake_results_all)
     # Check only matching metadata is added to test_metadata
     expected_add_test_metadata_calls = [
         mock.call({'attr': x}, fake_db_test.id, session=self.fake_session)
         for x in expected_metadata_list
     ]
     self.db_api_mock.add_test_metadata.assert_has_calls(
         expected_add_test_metadata_calls, any_order=True)
     # Check all metadata is added to test_run_metadata
     self.db_api_mock.add_test_run_metadata.assert_has_calls([
         mock.call(fake_results['test1']['metadata'], fake_db_test_run_id,
                   self.fake_session)
     ])
     self.fake_session.close.assert_called_once()
예제 #7
0
 def test_process_results_test_metadata_existing_remove_prefix(self):
     # Setup the metadata prefix configuration
     fake_meta_prefix = '_meta_'
     cfg.CONF.set_override(name='test_attr_prefix',
                           override=fake_meta_prefix)
     cfg.CONF.set_override(name='remove_test_attr_prefix',
                           override=True)
     fake_run_time = 'run time'
     # Setup a common fake DB test
     fake_db_test = mock.Mock(name='db test')
     fake_db_test.id = 'test id'
     fake_db_test.run_count = 3
     fake_db_test.success = 2
     fake_db_test.failure = 1
     # Setup results
     expected_metadata_list = ['a', 'b']
     existing_metadata_list = ['c', 'd']
     full_metadata_list = [fake_meta_prefix + x for x in (
         expected_metadata_list + existing_metadata_list)]
     fake_results = dict(
         test1={'status': 'fail', 'start_time': 0, 'end_time': 1,
                'metadata': {'attrs': ','.join(full_metadata_list)},
                'attachments': None})
     fake_results_all = copy.deepcopy(fake_results)
     fake_results_all['run_time'] = fake_run_time
     # Mock create run
     fake_db_run_id = 'run id'
     fake_db_run = mock.Mock(name='db run')
     fake_db_run.id = fake_db_run_id
     self.db_api_mock.create_run.return_value = fake_db_run
     # Mock create test run
     fake_db_test_run_id = 'test run id'
     fake_db_test_run = mock.Mock(name='db test run')
     fake_db_test_run.id = fake_db_test_run_id
     self.db_api_mock.create_test_run.return_value = fake_db_test_run
     # Tests are found in the DB
     self.db_api_mock.get_test_by_test_id.return_value = fake_db_test
     # Test metadata is found in the DB
     test_metadata_list = []
     for value in existing_metadata_list:
         test_metadata = mock.Mock()
         test_metadata.key = 'attr'
         test_metadata.value = value
         test_metadata_list.append(test_metadata)
     self.db_api_mock.get_test_metadata.return_value = test_metadata_list
     # Run process_results
     shell.process_results(fake_results_all)
     # Check only matching metadata is added to test_metadata
     expected_add_test_metadata_calls = [
         mock.call({'attr': x}, fake_db_test.id, session=self.fake_session)
         for x in expected_metadata_list]
     self.db_api_mock.add_test_metadata.assert_has_calls(
         expected_add_test_metadata_calls, any_order=True)
     # Check all metadata is added to test_run_metadata
     self.db_api_mock.add_test_run_metadata.assert_has_calls([
         mock.call(fake_results['test1']['metadata'], fake_db_test_run_id,
                   self.fake_session)])
     self.fake_session.close.assert_called_once()
예제 #8
0
    def test_process_results_no_conf(self):
        fake_run_time = 'run time'
        # Setup a common fake DB test
        fake_db_test = mock.Mock(name='db test')
        fake_db_test.id = 'test id'
        fake_db_test.run_count = 3
        fake_db_test.success = 2
        fake_db_test.failure = 1
        # Setup results
        fake_results = dict(test1={'status': 'success', 'start_time': 0,
                                   'end_time': 1, 'metadata': None,
                                   'attachments': None},
                            test2={'status': 'fail', 'start_time': 0,
                                   'end_time': 2, 'metadata': None,
                                   'attachments': None},
                            test3={'status': 'skip', 'start_time': 0,
                                   'end_time': 3, 'metadata': None,
                                   'attachments': None})

        fake_results_cpy = copy.deepcopy(fake_results)
        fake_results_cpy['run_time'] = fake_run_time
        # create mocked resources to use in testing
        fake_db_run_id = 'run id'
        fake_db_run = mock.Mock(name='db run')
        fake_db_run.id = fake_db_run_id
        self.db_api_mock.create_run.return_value = fake_db_run
        self.db_api_mock.get_test_by_test_id.return_value = fake_db_test

        # define config objects to use in our function call
        fake_run_at = '2018-04-03 00:01:00.000'
        fake_artifacts = 'artifacts'
        fake_run_id = 'run_id'
        fake_run_meta = {'run_meta': 'value'}

        # Run process_results
        shell.process_results(fake_results_cpy,
                              run_at=fake_run_at,
                              artifacts=fake_artifacts,
                              run_id=fake_run_id,
                              run_meta=fake_run_meta)
        # Check that we lookup all tests in the DB
        expected_test_by_id_calls = [mock.call(x, self.fake_session) for x in
                                     fake_results]
        self.db_api_mock.get_test_by_test_id.assert_has_calls(
            expected_test_by_id_calls, any_order=True)
        # Check that a test_run for each test is created in the DB
        expected_create_test_run_calls = [
            mock.call(fake_db_test.id, fake_db_run_id,
                      fake_results[x]['status'],
                      fake_results[x]['start_time'],
                      fake_results[x]['end_time'], self.fake_session)
            for x in fake_results]
        self.db_api_mock.create_test_run.assert_has_calls(
            expected_create_test_run_calls, any_order=True)
        self.fake_session.close.assert_called_once()
 def handle_subunit_event(self):
     # Pull subunit event from queue and separate stream from metadata
     subunit = self.subunitq.get()
     subunit_v2 = subunit.pop('subunit')
     # Set run metadata from gearman
     log_url = subunit.pop('log_url', None)
     if log_url:
         log_dir = os.path.dirname(os.path.dirname(log_url))
         shell.CONF.set_override('artifacts', log_dir)
     shell.CONF.set_override('run_meta', subunit)
     # Parse subunit stream and store in DB
     logging.debug('Converting Subunit V2 stream to SQL')
     stream = read_subunit.ReadSubunit(subunit_v2)
     shell.process_results(stream.get_results())
예제 #10
0
 def test_process_results_new_tests(self, get_duration_mock):
     fake_run_time = 'run time'
     fake_results = dict(test1={'status': 'success', 'start_time': 0,
                                'end_time': 1, 'metadata': None,
                                'attachments': None},
                         test2={'status': 'fail', 'start_time': 0,
                                'end_time': 2, 'metadata': None,
                                'attachments': None},
                         test3={'status': 'skip', 'start_time': 0,
                                'end_time': 3, 'metadata': None,
                                'attachments': None})
     fake_results_all = copy.deepcopy(fake_results)
     fake_results_all['run_time'] = fake_run_time
     # Mock create_run
     fake_db_run_id = 'run id'
     fake_db_run = mock.Mock(name='db run')
     fake_db_run.id = fake_db_run_id
     self.db_api_mock.create_run.return_value = fake_db_run
     # Tests are not found in the DB
     self.db_api_mock.get_test_by_test_id.return_value = None
     # Mock create test
     get_duration_mock.return_value = 'fake_duration'
     fake_db_test_id = 'test_db_id'
     fake_test_create = mock.Mock(name='db test')
     fake_test_create.id = fake_db_test_id
     self.db_api_mock.create_test.return_value = fake_test_create
     # Run process_results
     shell.process_results(fake_results_all)
     # Check that we lookup all tests in the DB
     expected_test_by_id_calls = [mock.call(x, self.fake_session) for x in
                                  fake_results]
     self.db_api_mock.get_test_by_test_id.assert_has_calls(
         expected_test_by_id_calls, any_order=True)
     # Check that all tests are created in the DB
     expected_create_test_calls = [
         mock.call('test1', 1, 1, 0, 'fake_duration', self.fake_session),
         mock.call('test2', 1, 0, 1, 'fake_duration', self.fake_session),
         mock.call('test3', 0, 0, 0, 'fake_duration', self.fake_session)]
     self.db_api_mock.create_test.assert_has_calls(
         expected_create_test_calls, any_order=True)
     # Check that a test_run for each test is created in the DB
     expected_create_test_run_calls = [
         mock.call(fake_db_test_id, fake_db_run_id,
                   fake_results[x]['status'], fake_results[x]['start_time'],
                   fake_results[x]['end_time'], self.fake_session)
         for x in fake_results]
     self.db_api_mock.create_test_run.assert_has_calls(
         expected_create_test_run_calls, any_order=True)
     self.fake_session.close.assert_called_once()
 def handle_subunit_event(self):
     # Pull subunit event from queue and separate stream from metadata
     subunit = self.subunitq.get()
     subunit_v2 = subunit.pop('subunit')
     # Set run metadata from gearman
     log_url = subunit.pop('log_url', None)
     if log_url:
         log_dir = os.path.dirname(os.path.dirname(log_url))
         shell.CONF.set_override('artifacts', log_dir)
     run_id = subunit.get('build_uuid', None)
     if run_id:
         shell.CONF.set_override('run_id', run_id)
     shell.CONF.set_override('run_meta', subunit)
     # Parse subunit stream and store in DB
     logging.debug('Converting Subunit V2 stream to SQL')
     stream = read_subunit.ReadSubunit(subunit_v2)
     shell.process_results(stream.get_results())
예제 #12
0
 def test_process_result_test_metadata_no_prefix(self):
     # Setup the metadata prefix configuration
     cfg.CONF.set_override(name='test_attr_prefix', override='')
     fake_run_time = 'run time'
     # Setup a common fake DB test
     fake_db_test = mock.Mock(name='db test')
     fake_db_test.id = 'test id'
     fake_db_test.run_count = 3
     fake_db_test.success = 2
     fake_db_test.failure = 1
     # Setup results
     expected_metadata_list = ['a', 'b', 'c']
     fake_results = dict(
         test1={
             'status': 'fail',
             'start_time': 0,
             'end_time': 1,
             'metadata': {
                 'attrs': ','.join(expected_metadata_list)
             },
             'attachments': None
         })
     fake_results_all = copy.deepcopy(fake_results)
     fake_results_all['run_time'] = fake_run_time
     # Mock create run
     fake_db_run_id = 'run id'
     fake_db_run = mock.Mock(name='db run')
     fake_db_run.id = fake_db_run_id
     self.db_api_mock.create_run.return_value = fake_db_run
     # Mock create test run
     fake_db_test_run_id = 'test run id'
     fake_db_test_run = mock.Mock(name='db test run')
     fake_db_test_run.id = fake_db_test_run_id
     self.db_api_mock.create_test_run.return_value = fake_db_test_run
     # Tests are found in the DB
     self.db_api_mock.get_test_by_test_id.return_value = fake_db_test
     # Run process_results
     shell.process_results(fake_results_all)
     # Check test metadata is not added
     self.db_api_mock.add_test_metadata.assert_not_called()
     # Check all metadata is added to test_run_metadata
     self.db_api_mock.add_test_run_metadata.assert_has_calls([
         mock.call(fake_results['test1']['metadata'], fake_db_test_run_id,
                   self.fake_session)
     ])
     self.fake_session.close.assert_called_once()
예제 #13
0
 def test_process_result_test_metadata_no_prefix(self):
     # Setup the metadata prefix configuration
     cfg.CONF.set_override(name='test_attr_prefix',
                           override='')
     fake_run_time = 'run time'
     # Setup a common fake DB test
     fake_db_test = mock.Mock(name='db test')
     fake_db_test.id = 'test id'
     fake_db_test.run_count = 3
     fake_db_test.success = 2
     fake_db_test.failure = 1
     # Setup results
     expected_metadata_list = ['a', 'b', 'c']
     fake_results = dict(
         test1={'status': 'fail', 'start_time': 0, 'end_time': 1,
                'metadata': {'attrs': ','.join(expected_metadata_list)},
                'attachments': None})
     fake_results_all = copy.deepcopy(fake_results)
     fake_results_all['run_time'] = fake_run_time
     # Mock create run
     fake_db_run_id = 'run id'
     fake_db_run = mock.Mock(name='db run')
     fake_db_run.id = fake_db_run_id
     self.db_api_mock.create_run.return_value = fake_db_run
     # Mock create test run
     fake_db_test_run_id = 'test run id'
     fake_db_test_run = mock.Mock(name='db test run')
     fake_db_test_run.id = fake_db_test_run_id
     self.db_api_mock.create_test_run.return_value = fake_db_test_run
     # Tests are found in the DB
     self.db_api_mock.get_test_by_test_id.return_value = fake_db_test
     # Run process_results
     shell.process_results(fake_results_all)
     # Check test metadata is not added
     self.db_api_mock.add_test_metadata.assert_not_called()
     # Check all metadata is added to test_run_metadata
     self.db_api_mock.add_test_run_metadata.assert_has_calls([
         mock.call(fake_results['test1']['metadata'],
                   fake_db_test_run_id,
                   self.fake_session)])
     self.fake_session.close.assert_called_once()
예제 #14
0
 def test_process_result_test_run_attachments(self):
     fake_run_time = 'run time'
     # Setup a common fake DB test
     fake_db_test = mock.Mock(name='db test')
     fake_db_test.id = 'test id'
     fake_db_test.run_count = 3
     fake_db_test.success = 2
     fake_db_test.failure = 1
     # Setup results
     fake_attachment = 'some text'
     fake_results = dict(
         test1={
             'status': 'fail',
             'start_time': 0,
             'end_time': 1,
             'metadata': None,
             'attachments': fake_attachment
         })
     fake_results_all = copy.deepcopy(fake_results)
     fake_results_all['run_time'] = fake_run_time
     # Mock create run
     fake_db_run_id = 'run id'
     fake_db_run = mock.Mock(name='db run')
     fake_db_run.id = fake_db_run_id
     self.db_api_mock.create_run.return_value = fake_db_run
     # Mock create test run
     fake_db_test_run_id = 'test run id'
     fake_db_test_run = mock.Mock(name='db test run')
     fake_db_test_run.id = fake_db_test_run_id
     self.db_api_mock.create_test_run.return_value = fake_db_test_run
     # Tests are found in the DB
     self.db_api_mock.get_test_by_test_id.return_value = fake_db_test
     # Run process_results
     shell.process_results(fake_results_all)
     # Check attachments are added to the test run
     self.db_api_mock.add_test_metadata.assert_not_called()
     # Check all metadata is added to test_run_metadata
     self.db_api_mock.add_test_run_attachments.assert_has_calls([
         mock.call(fake_attachment, fake_db_test_run_id, self.fake_session)
     ])
     self.fake_session.close.assert_called_once()
예제 #15
0
 def test_process_results_existing_tests_invalid_status(self):
     fake_run_time = 'run time'
     # Setup a common fake DB test
     fake_db_test = mock.Mock(name='db test')
     fake_db_test.run_count = 3
     # Setup results
     fake_results = dict(
         test1={
             'status': 'invalid',
             'start_time': 0,
             'end_time': 1,
             'metadata': None,
             'attachments': None
         })
     fake_results_all = copy.deepcopy(fake_results)
     fake_results_all['run_time'] = fake_run_time
     # Tests are found in the DB
     self.db_api_mock.get_test_by_test_id.return_value = fake_db_test
     with testtools.ExpectedException(exceptions.UnknownStatus,
                                      '^.*\n.*%s$' % 'invalid'):
         # Run process_results
         shell.process_results(fake_results_all)
     # Check that we lookup all tests in the DB
     expected_test_by_id_calls = [
         mock.call(x, self.fake_session) for x in fake_results
     ]
     self.db_api_mock.get_test_by_test_id.assert_has_calls(
         expected_test_by_id_calls, any_order=True)
     # Check that a run is created in the DB
     self.db_api_mock.create_run.assert_called_once_with(
         self.fake_totals['skips'],
         self.fake_totals['fails'],
         self.fake_totals['success'],
         fake_run_time,
         None,
         id=None,
         run_at=None,
         session=self.fake_session)
     # Check no test run was added to the DB
     self.db_api_mock.create_test_run.assert_not_called()
예제 #16
0
 def test_process_result_test_run_attachments(self):
     fake_run_time = 'run time'
     # Setup a common fake DB test
     fake_db_test = mock.Mock(name='db test')
     fake_db_test.id = 'test id'
     fake_db_test.run_count = 3
     fake_db_test.success = 2
     fake_db_test.failure = 1
     # Setup results
     fake_attachment = 'some text'
     fake_results = dict(
         test1={'status': 'fail', 'start_time': 0, 'end_time': 1,
                'metadata': None, 'attachments': fake_attachment})
     fake_results_all = copy.deepcopy(fake_results)
     fake_results_all['run_time'] = fake_run_time
     # Mock create run
     fake_db_run_id = 'run id'
     fake_db_run = mock.Mock(name='db run')
     fake_db_run.id = fake_db_run_id
     self.db_api_mock.create_run.return_value = fake_db_run
     # Mock create test run
     fake_db_test_run_id = 'test run id'
     fake_db_test_run = mock.Mock(name='db test run')
     fake_db_test_run.id = fake_db_test_run_id
     self.db_api_mock.create_test_run.return_value = fake_db_test_run
     # Tests are found in the DB
     self.db_api_mock.get_test_by_test_id.return_value = fake_db_test
     # Run process_results
     shell.process_results(fake_results_all)
     # Check attachments are added to the test run
     self.db_api_mock.add_test_metadata.assert_not_called()
     # Check all metadata is added to test_run_metadata
     self.db_api_mock.add_test_run_attachments.assert_has_calls([
         mock.call(fake_attachment, fake_db_test_run_id,
                   self.fake_session)])
     self.fake_session.close.assert_called_once()
예제 #17
0
    def test_process_results_existing_tests(self, running_avg_mock):
        fake_run_time = 'run time'
        # Setup a common fake DB test
        fake_db_test = mock.Mock(name='db test')
        fake_db_test.id = 'test id'
        fake_db_test.run_count = 3
        fake_db_test.success = 2
        fake_db_test.failure = 1
        # Setup results
        fake_results = dict(test1={
            'status': 'success',
            'start_time': 0,
            'end_time': 1,
            'metadata': None,
            'attachments': None
        },
                            test2={
                                'status': 'fail',
                                'start_time': 0,
                                'end_time': 2,
                                'metadata': None,
                                'attachments': None
                            },
                            test3={
                                'status': 'skip',
                                'start_time': 0,
                                'end_time': 3,
                                'metadata': None,
                                'attachments': None
                            })
        fake_results_all = copy.deepcopy(fake_results)
        fake_results_all['run_time'] = fake_run_time
        # Mock create run
        fake_db_run_id = 'run id'
        fake_db_run = mock.Mock(name='db run')
        fake_db_run.id = fake_db_run_id
        self.db_api_mock.create_run.return_value = fake_db_run
        # Tests are found in the DB
        self.db_api_mock.get_test_by_test_id.return_value = fake_db_test
        # Mock running avg
        fake_running_avg = 'running average'

        def fake_running_avg_method(test, values, result):
            values['run_time'] = fake_running_avg
            return values

        running_avg_mock.side_effect = fake_running_avg_method

        # Run process_results
        shell.process_results(fake_results_all)
        # Check that we lookup all tests in the DB
        expected_test_by_id_calls = [
            mock.call(x, self.fake_session) for x in fake_results
        ]
        self.db_api_mock.get_test_by_test_id.assert_has_calls(
            expected_test_by_id_calls, any_order=True)
        # Check that counters for tests are updated (if not skip)
        expected_update_test_calls = [
            mock.call(
                {
                    'run_count': 4,
                    'success': 3,
                    'run_time': fake_running_avg
                }, fake_db_test.id, self.fake_session),
            mock.call({
                'run_count': 4,
                'failure': 2
            }, fake_db_test.id, self.fake_session)
        ]
        self.db_api_mock.update_test.assert_has_calls(
            expected_update_test_calls, any_order=True)
        # Check that a test_run for each test is created in the DB
        expected_create_test_run_calls = [
            mock.call(fake_db_test.id, fake_db_run_id,
                      fake_results[x]['status'], fake_results[x]['start_time'],
                      fake_results[x]['end_time'], self.fake_session)
            for x in fake_results
        ]
        self.db_api_mock.create_test_run.assert_has_calls(
            expected_create_test_run_calls, any_order=True)
        self.fake_session.close.assert_called_once()
예제 #18
0
 def test_process_results_new_tests(self, get_duration_mock):
     fake_run_time = 'run time'
     fake_results = dict(test1={
         'status': 'success',
         'start_time': 0,
         'end_time': 1,
         'metadata': None,
         'attachments': None
     },
                         test2={
                             'status': 'fail',
                             'start_time': 0,
                             'end_time': 2,
                             'metadata': None,
                             'attachments': None
                         },
                         test3={
                             'status': 'skip',
                             'start_time': 0,
                             'end_time': 3,
                             'metadata': None,
                             'attachments': None
                         })
     fake_results_all = copy.deepcopy(fake_results)
     fake_results_all['run_time'] = fake_run_time
     # Mock create_run
     fake_db_run_id = 'run id'
     fake_db_run = mock.Mock(name='db run')
     fake_db_run.id = fake_db_run_id
     self.db_api_mock.create_run.return_value = fake_db_run
     # Tests are not found in the DB
     self.db_api_mock.get_test_by_test_id.return_value = None
     # Mock create test
     get_duration_mock.return_value = 'fake_duration'
     fake_db_test_id = 'test_db_id'
     fake_test_create = mock.Mock(name='db test')
     fake_test_create.id = fake_db_test_id
     self.db_api_mock.create_test.return_value = fake_test_create
     # Run process_results
     shell.process_results(fake_results_all)
     # Check that we lookup all tests in the DB
     expected_test_by_id_calls = [
         mock.call(x, self.fake_session) for x in fake_results
     ]
     self.db_api_mock.get_test_by_test_id.assert_has_calls(
         expected_test_by_id_calls, any_order=True)
     # Check that all tests are created in the DB
     expected_create_test_calls = [
         mock.call('test1', 1, 1, 0, 'fake_duration', self.fake_session),
         mock.call('test2', 1, 0, 1, 'fake_duration', self.fake_session),
         mock.call('test3', 0, 0, 0, 'fake_duration', self.fake_session)
     ]
     self.db_api_mock.create_test.assert_has_calls(
         expected_create_test_calls, any_order=True)
     # Check that a test_run for each test is created in the DB
     expected_create_test_run_calls = [
         mock.call(fake_db_test_id, fake_db_run_id,
                   fake_results[x]['status'], fake_results[x]['start_time'],
                   fake_results[x]['end_time'], self.fake_session)
         for x in fake_results
     ]
     self.db_api_mock.create_test_run.assert_has_calls(
         expected_create_test_run_calls, any_order=True)
     self.fake_session.close.assert_called_once()
예제 #19
0
    def test_process_results_existing_tests(self, running_avg_mock):
        fake_run_time = 'run time'
        # Setup a common fake DB test
        fake_db_test = mock.Mock(name='db test')
        fake_db_test.id = 'test id'
        fake_db_test.run_count = 3
        fake_db_test.success = 2
        fake_db_test.failure = 1
        # Setup results
        fake_results = dict(test1={'status': 'success', 'start_time': 0,
                                   'end_time': 1, 'metadata': None,
                                   'attachments': None},
                            test2={'status': 'fail', 'start_time': 0,
                                   'end_time': 2, 'metadata': None,
                                   'attachments': None},
                            test3={'status': 'skip', 'start_time': 0,
                                   'end_time': 3, 'metadata': None,
                                   'attachments': None})
        fake_results_all = copy.deepcopy(fake_results)
        fake_results_all['run_time'] = fake_run_time
        # Mock create run
        fake_db_run_id = 'run id'
        fake_db_run = mock.Mock(name='db run')
        fake_db_run.id = fake_db_run_id
        self.db_api_mock.create_run.return_value = fake_db_run
        # Tests are found in the DB
        self.db_api_mock.get_test_by_test_id.return_value = fake_db_test
        # Mock running avg
        fake_running_avg = 'running average'

        def fake_running_avg_method(test, values, result):
            values['run_time'] = fake_running_avg
            return values

        running_avg_mock.side_effect = fake_running_avg_method

        # Run process_results
        shell.process_results(fake_results_all)
        # Check that we lookup all tests in the DB
        expected_test_by_id_calls = [mock.call(x, self.fake_session) for x in
                                     fake_results]
        self.db_api_mock.get_test_by_test_id.assert_has_calls(
            expected_test_by_id_calls, any_order=True)
        # Check that counters for tests are updated (if not skip)
        expected_update_test_calls = [
            mock.call({'run_count': 4, 'success': 3,
                       'run_time': fake_running_avg},
                      fake_db_test.id, self.fake_session),
            mock.call({'run_count': 4, 'failure': 2},
                      fake_db_test.id, self.fake_session)]
        self.db_api_mock.update_test.assert_has_calls(
            expected_update_test_calls, any_order=True)
        # Check that a test_run for each test is created in the DB
        expected_create_test_run_calls = [
            mock.call(fake_db_test.id, fake_db_run_id,
                      fake_results[x]['status'],
                      fake_results[x]['start_time'],
                      fake_results[x]['end_time'], self.fake_session)
            for x in fake_results]
        self.db_api_mock.create_test_run.assert_has_calls(
            expected_create_test_run_calls, any_order=True)
        self.fake_session.close.assert_called_once()