def _load_report(filename): try: with open(filename) as fp: report = json.load(fp) except OSError as e: raise errors.ReframeError( f'failed to load report file {filename!r}') from e except json.JSONDecodeError as e: raise errors.ReframeError( f'report file {filename!r} is not a valid JSON file') from e # Validate the report with open(_SCHEMA) as fp: schema = json.load(fp) try: jsonschema.validate(report, schema) except jsonschema.ValidationError as e: raise errors.ReframeError(f'invalid report {filename!r}') from e # Check if the report data is compatible found_ver = versioning.parse(report['session_info']['data_version']) required_ver = versioning.parse(DATA_VERSION) if found_ver.major != required_ver.major or found_ver < required_ver: raise errors.ReframeError( f'incompatible report data versions: ' f'found {found_ver}, required >= {required_ver}') return _RunReport(report)
def _load_report(filename): try: with open(filename) as fp: report = json.load(fp) except OSError as e: raise errors.ReframeError( f'failed to load report file {filename!r}') from e except json.JSONDecodeError as e: raise errors.ReframeError( f'report file {filename!r} is not a valid JSON file') from e # Validate the report with open(_SCHEMA) as fp: schema = json.load(fp) try: jsonschema.validate(report, schema) except jsonschema.ValidationError as e: try: found_ver = report['session_info']['data_version'] except KeyError: found_ver = 'n/a' raise errors.ReframeError( f'invalid report {filename!r} ' f'(required data version: {DATA_VERSION}), found: {found_ver})' ) from e return _RunReport(report)
def _do_restore(self, testcase): tc = self.case(*testcase) if tc is None: raise errors.ReframeError( f'could not restore testcase {testcase!r}: ' f'not found in the report files') dump_file = os.path.join(tc['stagedir'], '.rfm_testcase.json') try: with open(dump_file) as fp: testcase._check = jsonext.load(fp) except (OSError, json.JSONDecodeError) as e: raise errors.ReframeError( f'could not restore testcase {testcase!r}') from e
def emit_pipeline(fp, testcases, child_pipeline_opts=None, backend='gitlab'): if backend != 'gitlab': raise errors.ReframeError(f'unknown CI backend {backend!r}') child_pipeline_opts = child_pipeline_opts or [] yaml.dump(_emit_gitlab_pipeline(testcases, child_pipeline_opts), stream=fp, indent=2, sort_keys=False, width=sys.maxsize)
def test_reraise_soft_error(self): try: try: raise ValueError('random value error') except ValueError as e: # reraise as ReframeError raise exc.ReframeError('soft error') from e except exc.ReframeError as e: assert 'soft error: random value error' == str(e)
def test_soft_error(self): with pytest.raises(exc.ReframeError, match=r'random error'): raise_exc(exc.ReframeError('random error')) self.assert_args(exc.ReframeError, 'error msg') self.assert_args(exc.ReframeError, 'error msg', 'another arg')
def test_soft_error(self): self.assertRaisesRegex(exc.ReframeError, r'random error', raise_exc, exc.ReframeError('random error')) self.assert_args(exc.ReframeError, 'error msg') self.assert_args(exc.ReframeError, 'error msg', 'another arg')