Skip to content

Commit 37c3e45

Browse files
authored
Merge pull request #3310 from vkarak/bugfix/warn-on-filter-expr-errors
[enhancement] Warn instead of failing when a filter expression is invalid for test
2 parents 854c5fb + e082bde commit 37c3e45

File tree

3 files changed

+19
-12
lines changed

3 files changed

+19
-12
lines changed

reframe/frontend/executors/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,10 @@ def __repr__(self):
124124
e = self.environ.name if self.environ else None
125125
return f'({c!r}, {p!r}, {e!r})'
126126

127+
def __str__(self):
128+
check, partition, environ = self
129+
return f'{check.name} @{partition.fullname}+{environ.name}'
130+
127131
def prepare(self):
128132
'''Prepare test case for sending down the test pipeline'''
129133
if self._is_ready:

reframe/frontend/filters.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import re
77

88
from reframe.core.exceptions import ReframeError
9+
from reframe.core.logging import getlogger
910

1011

1112
def re_compile(patt):
@@ -118,6 +119,8 @@ def _fn(case):
118119
try:
119120
return eval(expr, None, case.check.__dict__)
120121
except Exception as err:
121-
raise ReframeError(f'invalid expression `{expr}`') from err
122+
getlogger().warning(f'error while evaluating expression `{expr}` '
123+
f'for test case `{case}`: {err}')
124+
return False
122125

123126
return _fn

unittests/test_filters.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,25 @@
44
# SPDX-License-Identifier: BSD-3-Clause
55

66
import pytest
7+
from collections import namedtuple
78

89
import reframe as rfm
910
import reframe.core.exceptions as errors
1011
import reframe.frontend.executors as executors
1112
import reframe.frontend.filters as filters
1213
import reframe.utility.sanity as sn
1314
import unittests.utility as test_util
14-
from reframe.core.exceptions import ReframeError
1515

1616

1717
def count_checks(filter_fn, checks):
1818
return sn.count(filter(filter_fn, checks))
1919

2020

2121
def make_case(*args, **kwargs):
22+
_P = namedtuple('_Partition', ['fullname'])
23+
_E = namedtuple('_Environment', ['name'])
2224
test = test_util.make_check(*args, **kwargs)
23-
return executors.TestCase(test, None, None)
25+
return executors.TestCase(test, _P('generic:default'), _E('builtin'))
2426

2527

2628
@pytest.fixture
@@ -156,15 +158,13 @@ def test_validates_expr_invalid(sample_cases):
156158
validates = filters.validates
157159

158160
# undefined variables
159-
with pytest.raises(ReframeError):
160-
assert count_checks(validates('foo == 3'), sample_cases)
161+
assert count_checks(validates('foo == 3'), sample_cases) == 0
161162

162-
# invalid syntax
163-
with pytest.raises(ReframeError):
164-
assert count_checks(validates('num_tasks = 2'), sample_cases)
163+
# assignments
164+
assert count_checks(validates('num_tasks = 2'), sample_cases) == 0
165165

166-
with pytest.raises(ReframeError):
167-
assert count_checks(validates('import os'), sample_cases)
166+
# imports
167+
assert count_checks(validates('import os'), sample_cases) == 0
168168

169-
with pytest.raises(ReframeError):
170-
assert count_checks(validates('"foo" i tags'), sample_cases)
169+
# invalid syntax
170+
assert count_checks(validates('"foo" i tags'), sample_cases) == 0

0 commit comments

Comments
 (0)