name: Test Volatility3
on: [push, pull_request]
jobs:
  build:
    runs-on: ubuntu-22.04
    strategy:
      matrix:
        python-version: ["3.8"]
    steps:
      - uses: actions/checkout@v4
      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python-version }}

      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip Cmake build
          pip install .[test]

      - name: Build PyPi packages
        run: |
          python -m build

      - name: Download images
        run: |
          mkdir test_images
          cd test_images
          curl -sLO "https://github.com/volatilityfoundation/volatility3-test-data/releases/download/v0.0.1/linux-sample-1.bin.gz"
          gunzip linux-sample-1.bin.gz
          curl -sLO "https://github.com/volatilityfoundation/volatility3-test-data/releases/download/v0.0.1/win-xp-laptop-2005-06-25.img.gz"
          gunzip win-xp-laptop-2005-06-25.img.gz
          curl -sLO "https://github.com/volatilityfoundation/volatility3-test-data/releases/download/v0.0.1/win-10_19041-2025_03.dmp.gz"
          gunzip win-10_19041-2025_03.dmp.gz
          cd -

      - name: Download and Extract symbols
        run: |
          cd ./volatility3/symbols
          curl -sLO https://github.com/volatilityfoundation/volatility3-test-data/releases/download/v0.0.1/linux.zip
          curl -sLO https://github.com/volatilityfoundation/volatility3-test-data/releases/download/v0.0.1/symbols_win-10_19041-2025_03.zip
          unzip linux.zip
          unzip symbols_win-10_19041-2025_03.zip
          cd -

      - name: Testing...
        run: |
          # VolShell
          pytest --cov-append --cov-report=html --cov= ./test/plugins/windows/windows.py --volatility=volshell.py --image-dir=./test_images -k test_windows_volshell -v
          pytest --cov-append --cov-report=html --cov= ./test/plugins/linux/linux.py --volatility=volshell.py --image-dir=./test_images -k test_linux_volshell -v

          # Volatility
          pytest --cov-append --cov-report=html --cov= ./test/plugins/windows/windows.py --volatility=vol.py --image=./test_images/win-10_19041-2025_03.dmp -k "test_windows and not test_windows_volshell" -v --durations=0
          pytest --cov-append --cov-report=html --cov= ./test/plugins/linux/linux.py --volatility=vol.py --image-dir=./test_images -k "test_linux and not test_linux_volshell" -v --durations=0

      - name: Create coverage artifacts
        uses: actions/upload-artifact@v4
        with:
          name: code-coverage-report
          path: htmlcov
          overwrite: true
          retention-days: 7

      - name: Clean up post-test
        run: |
          rm -rf test_images
          cd volatility3/symbols
          rm -rf linux
          rm -rf linux.zip
          cd -
