diff options
author | Alexander V. Chernikov <melifaro@FreeBSD.org> | 2022-07-06 19:55:48 +0000 |
---|---|---|
committer | Alexander V. Chernikov <melifaro@FreeBSD.org> | 2022-07-06 19:55:58 +0000 |
commit | 2bfd8b5b9419b0ceb3dd0295fdf413d32969e5b2 (patch) | |
tree | 89661312cf765fefe464b16694f3554964242dc8 | |
parent | 6f50b73ee5c11253a35bb2787f2bef627079999d (diff) | |
download | src-2bfd8b5b9419b0ceb3dd0295fdf413d32969e5b2.tar.gz src-2bfd8b5b9419b0ceb3dd0295fdf413d32969e5b2.zip |
testing: provide meaningful error when pytest is not available
atf format does not provide any way of signalling any error message
back to the atf runner when listing tests. Work this around by
reporting "__test_cases_list_pytest_binary_not_found__" test instead.
Reviewed By: kp
Differential Revision: https://reviews.freebsd.org/D35721
-rw-r--r-- | libexec/atf/atf-pytest-wrapper/atf_pytest_wrapper.cpp | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/libexec/atf/atf-pytest-wrapper/atf_pytest_wrapper.cpp b/libexec/atf/atf-pytest-wrapper/atf_pytest_wrapper.cpp index 6baa85999070..7f6e886a16d9 100644 --- a/libexec/atf/atf-pytest-wrapper/atf_pytest_wrapper.cpp +++ b/libexec/atf/atf-pytest-wrapper/atf_pytest_wrapper.cpp @@ -1,3 +1,5 @@ +// vim: ts=2 sw=2 et + #include <format> #include <iostream> #include <map> @@ -181,7 +183,7 @@ class Handler { } } - int Run(std::string binary, std::vector<std::string> args) { + bool Run(std::string binary, std::vector<std::string> args) { if (flag_debug) { PrintVector("OUT", args); } @@ -191,12 +193,27 @@ class Handler { // work around 'char *const *' arr[i] = strdup(args[i].c_str()); } - return (execvp(binary.c_str(), arr) != 0); + return execvp(binary.c_str(), arr) == 0; + } + + void ReportError() { + if (flag_list) { + std::cout << "Content-Type: application/X-atf-tp; version=\"1\""; + std::cout << std::endl << std::endl; + std::cout << "ident: __test_cases_list_"<< kPytestName << "_binary_" << + "not_found__" << std::endl; + } else { + std::cout << "execvp(" << kPytestName << ") failed: " << + std::strerror(errno) << std::endl; + } } int Process() { SetEnv(); - return Run(kPytestName, BuildArgs()); + if (!Run(kPytestName, BuildArgs())) { + ReportError(); + } + return 0; } }; |