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))
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
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
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