Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
 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)
Exemplo n.º 6
0
    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')
Exemplo n.º 7
0
 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')