testing: Enable automatic selection of the OS image based on the test and filename prefix, addressing an issue in the development environment.

For example, when using VSCode with pytest, test autodiscovery triggers pytest_generate_tests(), adding all images to each test case. This causes issues, as Linux tests end up being executed with Windows and Mac images, and vice versa.
This commit is contained in:
Gustavo Moreira
2024-12-01 19:34:35 +11:00
parent 9222f4915a
commit 535ce3a22a
2 changed files with 34 additions and 9 deletions
+6 -4
View File
@@ -25,10 +25,13 @@ jobs:
- name: Download images
run: |
mkdir test_images
cd test_images
curl -sLO "https://downloads.volatilityfoundation.org/volatility3/images/linux-sample-1.bin.gz"
gunzip linux-sample-1.bin.gz
curl -sLO "https://downloads.volatilityfoundation.org/volatility3/images/win-xp-laptop-2005-06-25.img.gz"
gunzip win-xp-laptop-2005-06-25.img.gz
cd -
- name: Download and Extract symbols
run: |
@@ -39,13 +42,12 @@ jobs:
- name: Testing...
run: |
pytest ./test/test_volatility.py --volatility=vol.py --image win-xp-laptop-2005-06-25.img -k test_windows -v
pytest ./test/test_volatility.py --volatility=vol.py --image linux-sample-1.bin -k test_linux -v
pytest ./test/test_volatility.py --volatility=vol.py --image-dir=./test_images -k test_windows -v
pytest ./test/test_volatility.py --volatility=vol.py --image-dir=./test_images -k test_linux -v
- name: Clean up post-test
run: |
rm -rf *.bin
rm -rf *.img
rm -rf test_images
cd volatility3/symbols
rm -rf linux
rm -rf linux.zip
+28 -5
View File
@@ -35,16 +35,39 @@ def pytest_addoption(parser):
def pytest_generate_tests(metafunc):
"""Parameterize tests based on image names"""
images = metafunc.config.getoption("image")
images = metafunc.config.getoption("image").copy()
for image_dir in metafunc.config.getoption("image_dir"):
images = images + [
os.path.join(image_dir, dir) for dir in os.listdir(image_dir)
images += [
os.path.join(image_dir, dir_name) for dir_name in os.listdir(image_dir)
]
# tests with "image" parameter are run against images
# tests with "image" parameter are run against image
if "image" in metafunc.fixturenames:
filtered_images = []
ids = []
for image in images:
image_base = os.path.basename(image)
test_name = metafunc.definition.originalname
if test_name.startswith("test_windows_") and not image_base.startswith(
"win-"
):
continue
elif test_name.startswith("test_linux_") and not image_base.startswith(
"linux-"
):
continue
elif test_name.startswith("test_mac_") and not image_base.startswith(
"mac-"
):
continue
filtered_images.append(image)
ids.append(image_base)
metafunc.parametrize(
"image", images, ids=[os.path.basename(image) for image in images]
"image",
filtered_images,
ids=ids,
)