Skip to content

Commit dd87f08

Browse files
committed
Skip tests that runtimes don't support
Refactor to make runtime adapters declare the WASI versions they support, and for test suites to declare the WASI version they are. By default, skip tests whose WASI version is not supported by the current run-time.
1 parent c451206 commit dd87f08

File tree

19 files changed

+181
-84
lines changed

19 files changed

+181
-84
lines changed

adapters/pywasm.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,14 @@ def get_version() -> str:
2121
return output[1]
2222

2323

24+
def get_wasi_versions() -> List[str]:
25+
return ["wasm32-wasip1"]
26+
2427
def compute_argv(test_path: str,
2528
args: List[str],
2629
env: Dict[str, str],
27-
dirs: List[Tuple[Path, str]]) -> List[str]:
30+
dirs: List[Tuple[Path, str]],
31+
wasi_version: str) -> List[str]:
2832
argv = [str(RUN_PYWASM)]
2933
for k, v in env.items():
3034
argv += ["--env", f"{k}={v}"]

adapters/wasm-micro-runtime.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,15 @@ def get_version() -> str:
2121
return output[1]
2222

2323

24+
def get_wasi_versions() -> List[str]:
25+
return ["wasm32-wasip1"]
26+
27+
2428
def compute_argv(test_path: str,
2529
args: List[str],
2630
env: Dict[str, str],
27-
dirs: List[Tuple[Path, str]]) -> List[str]:
31+
dirs: List[Tuple[Path, str]],
32+
wasi_version: str) -> List[str]:
2833
argv = [] + IWASM
2934
for k, v in env.items():
3035
argv += ["--env", f"{k}={v}"]

adapters/wasmedge.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,15 @@ def get_version() -> str:
2121
return output[1]
2222

2323

24+
def get_wasi_versions() -> List[str]:
25+
return ["wasm32-wasip1"]
26+
27+
2428
def compute_argv(test_path: str,
2529
args: List[str],
2630
env: Dict[str, str],
27-
dirs: List[Tuple[Path, str]]) -> List[str]:
31+
dirs: List[Tuple[Path, str]],
32+
wasi_version: str) -> List[str]:
2833
argv = [] + WASMEDGE
2934
for k, v in env.items():
3035
argv += ["--env", f"{k}={v}"]

adapters/wasmtime.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,15 @@ def get_version() -> str:
2121
return output[1]
2222

2323

24+
def get_wasi_versions() -> List[str]:
25+
return ["wasm32-wasip1", "wasm32-wasip3"]
26+
27+
2428
def compute_argv(test_path: str,
2529
args: List[str],
2630
env: Dict[str, str],
27-
dirs: List[Tuple[Path, str]]) -> List[str]:
31+
dirs: List[Tuple[Path, str]],
32+
wasi_version: str) -> List[str]:
2833
argv = [] + WASMTIME
2934
for k, v in env.items():
3035
argv += ["--env", f"{k}={v}"]

adapters/wazero.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,15 @@ def get_version() -> str:
2323
return version
2424

2525

26+
def get_wasi_versions() -> List[str]:
27+
return ["wasm32-wasip1"]
28+
29+
2630
def compute_argv(test_path: str,
2731
args: List[str],
2832
env: Dict[str, str],
29-
dirs: List[Tuple[Path, str]]) -> List[str]:
33+
dirs: List[Tuple[Path, str]],
34+
wasi_version: str) -> List[str]:
3035
argv = WAZERO + ["run", "-hostlogging=filesystem"]
3136
for k, v in env.items():
3237
argv += [f"-env={k}={v}"]

adapters/wizard.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,15 @@ def get_version() -> str:
2929
return output[1]
3030

3131

32+
def get_wasi_versions() -> List[str]:
33+
return ["wasm32-wasip1"]
34+
35+
3236
def compute_argv(test_path: str,
3337
args: List[str],
3438
env: Dict[str, str],
35-
dirs: List[Tuple[Path, str]]) -> List[str]:
39+
dirs: List[Tuple[Path, str]],
40+
wasi_version: str) -> List[str]:
3641
argv = [] + WIZARD
3742
for k, v in env.items():
3843
argv += [f"--env={k}={v}"]

run-tests

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ def find_runtime_adapters(root, verbose=False):
5757
for candidate in root.glob("*.py"):
5858
try:
5959
adapter = runtime_adapter.RuntimeAdapter(candidate)
60-
print(f" {candidate.name}: {adapter.get_version()}")
60+
print(f" {candidate.name}: {adapter.get_meta()}")
6161
adapters.append(adapter)
6262
except runtime_adapter.LegacyRuntimeAdapterError:
6363
print(f" {candidate} is too old; update to new module format.")
@@ -85,9 +85,7 @@ if options.runtime_adapter:
8585
else:
8686
runtime_adapters = find_runtime_adapters(Path(__file__).parent / "adapters")
8787

88-
exclude_filters = [JSONTestExcludeFilter(filt) for filt in options.exclude_filter]
89-
9088
sys.exit(run_tests(runtime_adapters, test_suite,
9189
color=not options.disable_colors,
9290
json_log_file=options.json_output_location,
93-
exclude_filters=exclude_filters))
91+
exclude_filters=options.exclude_filter))

test-runner/tests/test_test_suite.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import wasi_test_runner.test_case as tc
44
import wasi_test_runner.test_suite as ts
5-
from wasi_test_runner.runtime_adapter import RuntimeVersion
5+
from wasi_test_runner.runtime_adapter import RuntimeMeta
66

77

88
def create_test_case(name: str, is_executed: bool, is_failed: bool) -> tc.TestCase:
@@ -18,8 +18,10 @@ def create_test_case(name: str, is_executed: bool, is_failed: bool) -> tc.TestCa
1818

1919
def test_test_suite_should_return_correct_count() -> None:
2020
suite = ts.TestSuite(
21-
"suite",
22-
RuntimeVersion("test-runtime", "3.14"),
21+
ts.TestSuiteMeta("suite",
22+
tc.WasiVersion.WASM32_WASIP1,
23+
RuntimeMeta("test-runtime", "3.14",
24+
frozenset([tc.WasiVersion.WASM32_WASIP1]))),
2325
10.0,
2426
datetime.now(),
2527
[

test-runner/tests/test_test_suite_runner.py

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22
from pathlib import Path
33
from unittest.mock import ANY, MagicMock, Mock, patch, mock_open
44

5+
import wasi_test_runner.test_suite as ts
56
import wasi_test_runner.test_case as tc
67
import wasi_test_runner.test_suite_runner as tsr
7-
from wasi_test_runner.runtime_adapter import RuntimeVersion
8+
from wasi_test_runner.runtime_adapter import RuntimeMeta
89

910

1011
def get_mock_open() -> Mock:
@@ -26,6 +27,7 @@ def open_mock(filename: str, *_args: Any, **_kwargs: Any) -> Any:
2627
# pylint: disable-msg=too-many-locals
2728
@patch("builtins.open", get_mock_open())
2829
@patch("os.path.exists", Mock(return_value=True))
30+
@patch("pathlib.Path.exists", Mock(return_value=True))
2931
def test_runner_end_to_end() -> None:
3032
test_suite_dir = "my-path"
3133
test_suite_name = "test-suite"
@@ -52,7 +54,14 @@ def test_runner_end_to_end() -> None:
5254

5355
runtime_name = "rt1"
5456
runtime_version_str = "4.2"
55-
runtime_version = RuntimeVersion(runtime_name, runtime_version_str)
57+
the_runtime_wasi_version = tc.WasiVersion.WASM32_WASIP1
58+
runtime_wasi_versions = frozenset([the_runtime_wasi_version])
59+
runtime_meta = RuntimeMeta(runtime_name, runtime_version_str,
60+
runtime_wasi_versions)
61+
62+
expected_test_suite_meta = ts.TestSuiteMeta(test_suite_name,
63+
the_runtime_wasi_version,
64+
runtime_meta)
5665

5766
expected_argv = [runtime_name, "<test>"]
5867
expected_test_cases = [
@@ -64,7 +73,7 @@ def test_runner_end_to_end() -> None:
6473

6574
runtime = Mock()
6675
runtime.get_name.return_value = runtime_name
67-
runtime.get_version.return_value = runtime_version
76+
runtime.get_meta.return_value = runtime_meta
6877
runtime.run_test.side_effect = outputs
6978
runtime.compute_argv.return_value = expected_argv
7079

@@ -87,7 +96,7 @@ def test_runner_end_to_end() -> None:
8796
filters) # type: ignore
8897

8998
# Assert manifest was read correctly
90-
assert suite.name == test_suite_name
99+
assert suite.meta == expected_test_suite_meta
91100

92101
# Assert test cases
93102
assert suite.test_count == 3
@@ -98,16 +107,16 @@ def test_runner_end_to_end() -> None:
98107
for test_path, config in zip(test_paths, expected_config):
99108
expected_dirs = [(Path(test_suite_dir) / d, d) for d in config.dirs]
100109
runtime.compute_argv.assert_any_call(
101-
str(test_path), config.args, config.env, expected_dirs
110+
str(test_path), config.args, config.env, expected_dirs,
111+
"wasm32-wasip1"
102112
)
103113
runtime.run_test.assert_called_with(expected_argv)
104114

105115
# Assert reporters calls
106116
for reporter in reporters:
107117
assert reporter.report_test.call_count == 3
108118
for test_case in expected_test_cases:
109-
reporter.report_test.assert_any_call(test_suite_name,
110-
runtime_version,
119+
reporter.report_test.assert_any_call(expected_test_suite_meta,
111120
test_case)
112121

113122
# Assert validators calls
@@ -120,12 +129,12 @@ def test_runner_end_to_end() -> None:
120129
for filt in filters:
121130
assert filt.should_skip.call_count == 3
122131
for test_case in expected_test_cases:
123-
filt.should_skip.assert_any_call(runtime_version, suite.name,
132+
filt.should_skip.assert_any_call(expected_test_suite_meta,
124133
test_case.name)
125134

126135

127136
@patch("os.path.exists", Mock(return_value=False))
128137
def test_runner_should_use_path_for_name_if_manifest_does_not_exist() -> None:
129138
suite = tsr.run_tests_from_test_suite("my-path", Mock(), [], [], [])
130139

131-
assert suite.name == "my-path"
140+
assert suite.meta.name == "my-path"

test-runner/wasi_test_runner/__main__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from .runtime_adapter import RuntimeAdapter
77
from .harness import run_all_tests
88
from .filters import TestFilter
9-
from .filters import JSONTestExcludeFilter
9+
from .filters import JSONTestExcludeFilter, UnsupportedWasiTestExcludeFilter
1010
from .reporters import TestReporter
1111
from .reporters.console import ConsoleTestReporter
1212
from .reporters.json import JSONTestReporter
@@ -56,7 +56,7 @@ def main() -> int:
5656

5757
validators: List[Validator] = [exit_code_validator, stdout_validator]
5858

59-
filters: List[TestFilter] = []
59+
filters: List[TestFilter] = [UnsupportedWasiTestExcludeFilter()]
6060
for filt in options.exclude_filter:
6161
filters.append(JSONTestExcludeFilter(filt))
6262

0 commit comments

Comments
 (0)