def save_result_in_datastore(self, test_result, benchmark_results,
                              test_plan):
     datastore = DataStore.get(self.args.results_dir, self.args.bucket,
                               self.args.s3_creds, self.args.s3_public)
     svg_data = fetch_svg(test_result.bundle_yaml)
     with datastore.lock():
         index = self.load_index(datastore)
         report = self.load_report(datastore, index, test_plan)
         report.upsert_result(test_result)
         report.upsert_benchmarks(benchmark_results)
         index.upsert_report(report)
         datastore.write(
             'css/base.css',
             resource_string(__name__,
                             'static/css/base.css').decode('utf8'))
         datastore.write(
             'css/vanilla.min.css',
             resource_string(__name__,
                             'static/css/vanilla.min.css').decode('utf8'))
         datastore.write(index.full_index_filename_json, index.as_json())
         datastore.write(index.full_index_filename_html, index.as_html())
         datastore.write(report.filename_json, report.as_json())
         datastore.write(report.filename_html, report.as_html(svg_data))
         datastore.write(report.filename_xml, report.as_xml())
         datastore.write(index.summary_filename_html, index.summary_html())
         datastore.write(index.summary_filename_json, index.summary_json())
         for bundle_name in index.bundle_names():
             datastore.write(
                 index.bundle_index_html(bundle_name),
                 index.as_html(bundle_name,
                               limit=self.args.results_per_bundle))
             datastore.write(
                 index.bundle_index_json(bundle_name),
                 index.as_json(bundle_name,
                               limit=self.args.results_per_bundle))
Beispiel #2
0
 def test_run_plan(self, mock_juju, mock_provider, mock_datastore):
     env = mock.Mock(spec=['provider_name', 'info'])
     env.info.return_value = {"ProviderType": "foo"}
     mock_juju.return_value = env
     mock_provider.return_value = "foo-provider"
     tempdir = mkdtemp()
     ds = DataStore.get(tempdir)
     mock_datastore.return_value = ds
     with mock.patch.object(run.Runner, 'run_tests',
                            return_value=mock.Mock()) as mock_result:
         with mock.patch.object(run.Runner, 'run_benchmarks',
                                return_value="") as mock_benchmark:
             with mock.patch.object(run.Runner, 'load_index',
                                    return_value=mock.Mock()) as mock_index:
                 with mock.patch.object(run.Runner, 'load_report',
                                        return_value=mock.Mock()
                                        ) as mock_load:
                     mock_index.return_value.bundle_names. \
                         return_value = ['bundle']
                     mock_index.return_value.bundle_index_filename. \
                         return_value = 'bundle/index.html'
                     runner = run.Runner('aws', False, mock.Mock())
                     runner.run_plan(mock.Mock())
     rmtree(tempdir)
     # Assert we tried to get the Juju env run the tests and benchmarks
     # and load the report and index
     assert mock_juju.called
     assert mock_result.called
     assert mock_benchmark.called
     assert mock_index.called
     assert mock_load.called
     self.assertTrue(True)
 def regenerate_index(self):
     logging.info('Regenerating index...')
     datastore = DataStore.get(self.args.results_dir, self.args.bucket,
                               self.args.s3_creds, self.args.s3_public)
     with datastore.lock():
         index = self.load_index(datastore)
         write_to_datastore(datastore, index)
     return True
Beispiel #4
0
 def regenerate_index(self):
     logging.info('Regenerating index...')
     datastore = DataStore.get(
         self.args.results_dir,
         self.args.bucket,
         self.args.s3_creds,
         self.args.s3_public)
     with datastore.lock():
         index = self.load_index(datastore)
         write_to_datastore(datastore, index)
     return True
    def remove_test_by_bundle_name(self):
        datastore = DataStore.get(self.args.results_dir, self.args.bucket,
                                  self.args.s3_creds, self.args.s3_public)
        with datastore.lock():
            index = self.load_index(datastore)
            reports = index.remove_by_bundle_name(self.args.remove_test,
                                                  self.args.dryrun)
            if not reports:
                logging.info("No test result found for {}".format(
                    self.args.remove_test))
                return False
            else:
                for report in reports:
                    logging.info("Removing {} id: {}".format(
                        report.bundle_name, report.test_id))
            write_to_datastore(datastore, index)

        return True
Beispiel #6
0
    def remove_test_by_bundle_name(self):
        datastore = DataStore.get(
            self.args.results_dir,
            self.args.bucket,
            self.args.s3_creds,
            self.args.s3_public)
        with datastore.lock():
            index = self.load_index(datastore)
            reports = index.remove_by_bundle_name(
                self.args.remove_test, self.args.dryrun)
            if not reports:
                logging.info("No test result found for {}".format(
                    self.args.remove_test))
                return False
            else:
                for report in reports:
                    logging.info("Removing {} id: {}".format(
                        report.bundle_name, report.test_id))
            write_to_datastore(datastore, index)

        return True
 def test_run_plan(self, mock_juju, mock_provider, mock_datastore):
     env = mock.Mock(spec=['provider_name', 'info'])
     env.info.return_value = {"ProviderType": "foo"}
     mock_juju.return_value = env
     mock_provider.return_value = "foo-provider"
     tempdir = mkdtemp()
     ds = DataStore.get(tempdir)
     mock_datastore.return_value = ds
     test_plan = mock.Mock()
     with mock.patch.object(run.Runner,
                            'run_tests',
                            return_value=mock.Mock()) as mock_result:
         with mock.patch.object(run.Runner,
                                'run_benchmarks',
                                return_value="") as mock_benchmark:
             with mock.patch.object(run.Runner,
                                    'load_index',
                                    return_value=mock.Mock()) as mock_index:
                 with mock.patch.object(
                         run.Runner, 'load_report',
                         return_value=mock.Mock()) as mock_load:
                     mock_index.return_value.bundle_names. \
                         return_value = ['bundle']
                     mock_index.return_value.bundle_index_filename. \
                         return_value = 'bundle/index.html'
                     with mock.patch.object(
                             run.Runner, 'check_cloud_resource') as mock_cr:
                         runner = run.Runner('aws', False, mock.Mock())
                         runner.run_plan(test_plan)
     rmtree(tempdir)
     # Assert we tried to get the Juju env run the tests and benchmarks
     # and load the report and index
     assert mock_juju.called
     assert mock_result.called
     assert mock_benchmark.called
     assert mock_index.called
     assert mock_load.called
     self.assertTrue(True)
     mock_cr.assert_called_once_with(test_plan, {'ProviderType': 'foo'})
    def run_plan(self, test_plan):
        env = connect_juju_client(self.controller, logging=logging)
        if not env:
            logging.error("Jujuclient could not connect to {} ".format(
                self.controller))
            return False
        env.name = self.controller
        provider = (env.info().get("provider-type") or
                    env.info().get("ProviderType"))
        env.provider_name = get_provider_name(provider)
        logging.info('Running test on {}.'.format(env.provider_name))
        try:
            test_result = self.run_tests(test_plan, env)
            benchmark_results = self.run_benchmarks(test_plan, env)
        except Exception:
            tb = traceback.format_exc()
            error = "Exception ({}):\n{}".format(env.name, tb)
            logging.error(error)
            # create a fake SuiteResult to hold exception traceback
            test_result = model.SuiteResult(
                provider=env.provider_name,
                test_outcome='Error Running Tests',
                tests=[model.TestResult(
                    name='Error Running Tests',
                    duration=0.0,
                    output=error,
                    result='INFRA',
                )])
            return False

        datastore = DataStore.get(
            self.args.results_dir,
            self.args.bucket,
            self.args.s3_creds,
            self.args.s3_public)
        svg_data = fetch_svg(test_result.bundle_yaml)
        with datastore.lock():
            index = self.load_index(datastore)
            report = self.load_report(datastore, index, test_plan)
            report.upsert_result(test_result)
            report.upsert_benchmarks(benchmark_results)
            index.upsert_report(report)
            datastore.write(
                'css/base.css',
                resource_string(__name__,
                                'static/css/base.css').decode('utf8'))
            datastore.write(
                'css/vanilla.min.css',
                resource_string(__name__,
                                'static/css/vanilla.min.css').decode('utf8'))
            datastore.write(index.full_index_filename_json, index.as_json())
            datastore.write(index.full_index_filename_html, index.as_html())
            datastore.write(report.filename_json, report.as_json())
            datastore.write(report.filename_html, report.as_html(svg_data))
            datastore.write(index.summary_filename_html, index.summary_html())
            datastore.write(index.summary_filename_json, index.summary_json())
            for bundle_name in index.bundle_names():
                datastore.write(
                    index.bundle_index_html(bundle_name),
                    index.as_html(bundle_name,
                                  limit=self.args.results_per_bundle))
                datastore.write(
                    index.bundle_index_json(bundle_name),
                    index.as_json(bundle_name,
                                  limit=self.args.results_per_bundle))
        return True