Skip to content

Commit

Permalink
testing: Enable automatic selection of the OS image based on the test…
Browse files Browse the repository at this point in the history
… 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.
  • Loading branch information
gcmoreira committed Dec 1, 2024
1 parent 9222f49 commit 535ce3a
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 9 deletions.
10 changes: 6 additions & 4 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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: |
Expand All @@ -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
Expand Down
33 changes: 28 additions & 5 deletions test/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
)


Expand Down

0 comments on commit 535ce3a

Please sign in to comment.