From f87ad41f72ca4465a0c5b4ba9fd36a7b09e4d4f4 Mon Sep 17 00:00:00 2001 From: Alberto Sartori Date: Mon, 24 Jun 2024 15:49:36 +0200 Subject: Initial commit Co-authored-by: Klaus Aehlig --- rules/rust/runner.py | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100755 rules/rust/runner.py (limited to 'rules/rust/runner.py') diff --git a/rules/rust/runner.py b/rules/rust/runner.py new file mode 100755 index 0000000..bfa06ac --- /dev/null +++ b/rules/rust/runner.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python3 +# Copyright 2024 Huawei Cloud Computing Technology Co., Ltd. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import json +import os +import subprocess +import time + +time_start: float = 0 +time_stop: float = 0 +result: str = "UNKNOWN" +stderr: str = None +stdout: str = None + + +def end(x): + return "\n" if x else "" + + +def dump_results() -> None: + global time_start, time_stop, result, stdout, stderr + with open("result", "w") as f: + print(f"{result}", file=f) + with open("time-start", "w") as f: + print(f"{time_start:.3f}", file=f) + with open("time-stop", "w") as f: + print(f"{time_stop:.3f}", file=f) + with open("stdout", "w") as f: + print(f"{stdout}", file=f, end=end(stdout)) + with open("stderr", "w") as f: + print(f"{stderr}", file=f, end=end(stderr)) + + +class dumper: + def __enter__(self): + global time_start + time_start = time.time() + + def __exit__(self, type, value, traceback): + dump_results() + + +with dumper(): + TEMP_DIR = os.path.realpath("scratch") + os.makedirs(TEMP_DIR, exist_ok=True) + + WORK_DIR = os.path.realpath("work") + os.makedirs(WORK_DIR, exist_ok=True) + + ENV = dict(os.environ, TEST_TMPDIR=TEMP_DIR, TMPDIR=TEMP_DIR, TERM="xterm-256color") + + with open("test-launcher.json") as f: + test_launcher = json.load(f) + + with open("test-args.json") as f: + test_args = json.load(f) + + ret = subprocess.run( + test_launcher + ["../test", "--color", "always"] + test_args, + cwd=WORK_DIR, + env=ENV, + capture_output=True, + ) + time_stop = time.time() + result = "PASS" if ret.returncode == 0 else "FAIL" + stdout = ret.stdout.decode("utf-8") + stderr = ret.stderr.decode("utf-8") + + if result != "PASS": + exit(1) -- cgit v1.2.3