Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F112704612
D35625.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D35625.diff
View Options
diff --git a/libexec/atf/atf-pytest-wrapper/atf_pytest_wrapper.cpp b/libexec/atf/atf-pytest-wrapper/atf_pytest_wrapper.cpp
--- a/libexec/atf/atf-pytest-wrapper/atf_pytest_wrapper.cpp
+++ b/libexec/atf/atf-pytest-wrapper/atf_pytest_wrapper.cpp
@@ -1,5 +1,6 @@
#include <format>
#include <iostream>
+#include <map>
#include <string>
#include <vector>
#include <stdlib.h>
@@ -10,6 +11,7 @@
const std::string kPytestName = "pytest";
const std::string kCleanupSuffix = ":cleanup";
const std::string kPythonPathEnv = "PYTHONPATH";
+ const std::string kAtfVar = "_ATF_VAR_";
public:
// Test listing requested
bool flag_list = false;
@@ -28,7 +30,7 @@
// Name of the test to run (provided by ATF)
std::string test_name;
// kv pairs (provided by ATF)
- std::vector<std::string> kv_list;
+ std::map<std::string,std::string> kv_map;
// our binary name
std::string binary_name;
@@ -102,7 +104,14 @@
dst_file = std::string(optarg);
break;
case 'v':
- kv_list.emplace_back(std::string(optarg));
+ {
+ std::string kv = std::string(optarg);
+ size_t splitter = kv.find("=");
+ if (splitter == std::string::npos) {
+ Usage("Unknown variable: " + kv, true);
+ }
+ kv_map[kv.substr(0, splitter)] = kv.substr(splitter + 1);
+ }
break;
default:
Usage("Unknown option -" + std::string(1, static_cast<char>(c)), true);
@@ -147,16 +156,12 @@
if (!dst_file.empty()) {
args.push_back("--atf-file=" + dst_file);
}
- for (auto &pair: kv_list) {
- args.push_back("--atf-var");
- args.push_back(pair);
- }
// Create nodeid from the test path &name
args.push_back(script_path + "::" + test_name);
return args;
}
- void SetEnv() {
+ void SetPythonPath() {
if (!python_path.empty()) {
char *env_path = getenv(kPythonPathEnv.c_str());
if (env_path != nullptr) {
@@ -166,6 +171,16 @@
}
}
+ void SetEnv() {
+ SetPythonPath();
+
+ // Pass ATF kv pairs as env variables to avoid dealing with
+ // pytest parser
+ for (auto [k, v]: kv_map) {
+ setenv((kAtfVar + k).c_str(), v.c_str(), 1);
+ }
+ }
+
int Run(std::string binary, std::vector<std::string> args) {
if (flag_debug) {
PrintVector("OUT", args);
diff --git a/tests/atf_python/atf_pytest.py b/tests/atf_python/atf_pytest.py
--- a/tests/atf_python/atf_pytest.py
+++ b/tests/atf_python/atf_pytest.py
@@ -6,6 +6,7 @@
from typing import Tuple
import pytest
+import os
class ATFCleanupItem(pytest.Item):
@@ -216,3 +217,8 @@
line = "{}: {}".format(test.state, test.reason)
with open(path, mode="w") as f:
print(line, file=f)
+
+ @staticmethod
+ def get_atf_vars() -> Dict[str, str]:
+ px = "_ATF_VAR_"
+ return {k[len(px):]: v for k, v in os.environ.items() if k.startswith(px)}
diff --git a/tests/conftest.py b/tests/conftest.py
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -1,5 +1,6 @@
import pytest
from atf_python.atf_pytest import ATFHandler
+from typing import Dict
PLUGIN_ENABLED = False
@@ -17,7 +18,6 @@
"""Add file output"""
# Add meta-values
group = parser.getgroup("general", "Running and selection options")
- group.addoption("--atf-var", dest="atf_vars", action="append", default=[])
group.addoption(
"--atf-source-dir",
type=str,
@@ -46,6 +46,11 @@
)
+@pytest.fixture(autouse=True, scope="session")
+def atf_vars() -> Dict[str, str]:
+ return ATFHandler.get_atf_vars()
+
+
@pytest.mark.trylast
def pytest_configure(config):
if config.option.help:
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Mar 22, 4:50 PM (14 h, 42 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
17258203
Default Alt Text
D35625.diff (3 KB)
Attached To
Mode
D35625: testing: pass ATF vars to pytest via env instead of arguments.
Attached
Detach File
Event Timeline
Log In to Comment