From c7b28d9aaca1416e2a3a5045199bc3cc0bf38ba9 Mon Sep 17 00:00:00 2001 From: Jesse Bannon Date: Mon, 30 Sep 2024 23:17:39 -0700 Subject: [PATCH] integration actions --- .github/workflows/ci-windows.yaml | 47 +++++++++++++ .github/workflows/ci.yaml | 66 +++++++++++++++++++ .../{unit/plugins => integration}/__init__.py | 0 .../cli}/__init__.py | 0 tests/{unit => integration}/cli/conftest.py | 0 .../cli/test_entrypoint.py | 0 .../cli/test_output_transaction_log.py | 0 tests/{unit => integration}/conftest.py | 0 .../plugins/__init__.py} | 0 .../plugins/test_chapters.py | 0 .../plugins/test_file_convert.py | 0 .../plugins/test_filter.py | 0 .../plugins/test_music_tags.py | 0 .../plugins/test_nfo_tags.py | 1 - .../plugins/test_throttle_protection.py | 0 .../integration/prebuilt_presets/__init__.py | 0 .../prebuilt_presets/test_prebuilt_presets.py | 0 .../test_prebuilt_presets_packaged.py | 0 tests/unit/cli/test_working_directory_lock.py | 15 ++--- 19 files changed, 117 insertions(+), 12 deletions(-) rename tests/{unit/plugins => integration}/__init__.py (100%) rename tests/{unit/prebuilt_presets => integration/cli}/__init__.py (100%) rename tests/{unit => integration}/cli/conftest.py (100%) rename tests/{unit => integration}/cli/test_entrypoint.py (100%) rename tests/{unit => integration}/cli/test_output_transaction_log.py (100%) rename tests/{unit => integration}/conftest.py (100%) rename tests/{unit/validators/conftest.py => integration/plugins/__init__.py} (100%) rename tests/{unit => integration}/plugins/test_chapters.py (100%) rename tests/{unit => integration}/plugins/test_file_convert.py (100%) rename tests/{unit => integration}/plugins/test_filter.py (100%) rename tests/{unit => integration}/plugins/test_music_tags.py (100%) rename tests/{unit => integration}/plugins/test_nfo_tags.py (98%) rename tests/{unit => integration}/plugins/test_throttle_protection.py (100%) create mode 100644 tests/integration/prebuilt_presets/__init__.py rename tests/{unit => integration}/prebuilt_presets/test_prebuilt_presets.py (100%) rename tests/{unit => integration}/prebuilt_presets/test_prebuilt_presets_packaged.py (100%) diff --git a/.github/workflows/ci-windows.yaml b/.github/workflows/ci-windows.yaml index 5d0b23a9..fef797bb 100644 --- a/.github/workflows/ci-windows.yaml +++ b/.github/workflows/ci-windows.yaml @@ -31,6 +31,53 @@ jobs: python -m pip install -e .[test] python -m pytest --reruns 3 --reruns-delay 5 tests/unit + test-integration: + runs-on: ubuntu-22.04 + permissions: + contents: read + + steps: + - uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.10" + + - name: Run integration tests with coverage + run: | + curl.exe -L -o ffmpeg.zip https://github.com/yt-dlp/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-win64-gpl.zip + tar -xf ffmpeg.zip + move "ffmpeg-master-latest-win64-gpl\bin\ffmpeg.exe" "ffmpeg.exe" + move "ffmpeg-master-latest-win64-gpl\bin\ffprobe.exe" "ffprobe.exe" + + python -m pip install -e .[test] + python -m pytest --reruns 3 --reruns-delay 5 tests/integration --ignore tests/integration/prebuilt_presets + + + test-integration-prebuilt-presets: + runs-on: ubuntu-22.04 + permissions: + contents: read + + steps: + - uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.10" + + - name: Run prebuilt preset integration tests with coverage + run: | + curl.exe -L -o ffmpeg.zip https://github.com/yt-dlp/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-win64-gpl.zip + tar -xf ffmpeg.zip + move "ffmpeg-master-latest-win64-gpl\bin\ffmpeg.exe" "ffmpeg.exe" + move "ffmpeg-master-latest-win64-gpl\bin\ffprobe.exe" "ffprobe.exe" + + python -m pip install -e .[test] + python -m pytest --reruns 3 --reruns-delay 5 tests/integration/prebuilt_presets + test-soundcloud: runs-on: windows-latest permissions: diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index b2452fdf..be5d6be0 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -52,6 +52,58 @@ jobs: path: /opt/coverage/unit key: ${{github.sha}}-coverage-unit + test-integration: + runs-on: ubuntu-22.04 + permissions: + contents: read + + steps: + - uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.10" + + - name: Run integration tests with coverage + run: | + pip install -e .[test] + sudo apt-get update + sudo apt-get install -y ffmpeg + coverage run -m pytest --reruns 3 --reruns-delay 5 tests/integration --ignore tests/integration/prebuilt_presets && coverage xml -o /opt/coverage/integration/coverage.xml + + - name: Save coverage + uses: actions/cache@v3 + with: + path: /opt/coverage/integration + key: ${{github.sha}}-coverage-integration + + test-integration-prebuilt-presets: + runs-on: ubuntu-22.04 + permissions: + contents: read + + steps: + - uses: actions/checkout@v3 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.10" + + - name: Run prebuilt preset integration tests with coverage + run: | + pip install -e .[test] + sudo apt-get update + sudo apt-get install -y ffmpeg + coverage run -m pytest --reruns 3 --reruns-delay 5 tests/integration/prebuilt_presets && coverage xml -o /opt/coverage/integration-prebuilt-presets/coverage.xml + + - name: Save coverage + uses: actions/cache@v3 + with: + path: /opt/coverage/integration-prebuilt-presets + key: ${{github.sha}}-coverage-integration-prebuilt-presets + test-soundcloud: runs-on: ubuntu-22.04 permissions: @@ -154,6 +206,8 @@ jobs: runs-on: ubuntu-22.04 needs: [ test-unit, + test-integration, + test-integration-prebuilt-presets, test-soundcloud, test-bandcamp, test-youtube, @@ -169,6 +223,18 @@ jobs: path: /opt/coverage/unit key: ${{github.sha}}-coverage-unit + - name: Restore integration test coverage + uses: actions/cache@v3 + with: + path: /opt/coverage/unit + key: ${{github.sha}}-coverage-integration + + - name: Restore integration prebuilt presets test coverage + uses: actions/cache@v3 + with: + path: /opt/coverage/unit + key: ${{github.sha}}-coverage-integration-prebuilt-presets + - name: Restore soundcloud test coverage uses: actions/cache@v3 with: diff --git a/tests/unit/plugins/__init__.py b/tests/integration/__init__.py similarity index 100% rename from tests/unit/plugins/__init__.py rename to tests/integration/__init__.py diff --git a/tests/unit/prebuilt_presets/__init__.py b/tests/integration/cli/__init__.py similarity index 100% rename from tests/unit/prebuilt_presets/__init__.py rename to tests/integration/cli/__init__.py diff --git a/tests/unit/cli/conftest.py b/tests/integration/cli/conftest.py similarity index 100% rename from tests/unit/cli/conftest.py rename to tests/integration/cli/conftest.py diff --git a/tests/unit/cli/test_entrypoint.py b/tests/integration/cli/test_entrypoint.py similarity index 100% rename from tests/unit/cli/test_entrypoint.py rename to tests/integration/cli/test_entrypoint.py diff --git a/tests/unit/cli/test_output_transaction_log.py b/tests/integration/cli/test_output_transaction_log.py similarity index 100% rename from tests/unit/cli/test_output_transaction_log.py rename to tests/integration/cli/test_output_transaction_log.py diff --git a/tests/unit/conftest.py b/tests/integration/conftest.py similarity index 100% rename from tests/unit/conftest.py rename to tests/integration/conftest.py diff --git a/tests/unit/validators/conftest.py b/tests/integration/plugins/__init__.py similarity index 100% rename from tests/unit/validators/conftest.py rename to tests/integration/plugins/__init__.py diff --git a/tests/unit/plugins/test_chapters.py b/tests/integration/plugins/test_chapters.py similarity index 100% rename from tests/unit/plugins/test_chapters.py rename to tests/integration/plugins/test_chapters.py diff --git a/tests/unit/plugins/test_file_convert.py b/tests/integration/plugins/test_file_convert.py similarity index 100% rename from tests/unit/plugins/test_file_convert.py rename to tests/integration/plugins/test_file_convert.py diff --git a/tests/unit/plugins/test_filter.py b/tests/integration/plugins/test_filter.py similarity index 100% rename from tests/unit/plugins/test_filter.py rename to tests/integration/plugins/test_filter.py diff --git a/tests/unit/plugins/test_music_tags.py b/tests/integration/plugins/test_music_tags.py similarity index 100% rename from tests/unit/plugins/test_music_tags.py rename to tests/integration/plugins/test_music_tags.py diff --git a/tests/unit/plugins/test_nfo_tags.py b/tests/integration/plugins/test_nfo_tags.py similarity index 98% rename from tests/unit/plugins/test_nfo_tags.py rename to tests/integration/plugins/test_nfo_tags.py index 06a36698..7172753a 100644 --- a/tests/unit/plugins/test_nfo_tags.py +++ b/tests/integration/plugins/test_nfo_tags.py @@ -1,6 +1,5 @@ import pytest from expected_transaction_log import assert_transaction_log_matches -from unit.conftest import mock_download_collection_entries from ytdl_sub.subscriptions.subscription import Subscription diff --git a/tests/unit/plugins/test_throttle_protection.py b/tests/integration/plugins/test_throttle_protection.py similarity index 100% rename from tests/unit/plugins/test_throttle_protection.py rename to tests/integration/plugins/test_throttle_protection.py diff --git a/tests/integration/prebuilt_presets/__init__.py b/tests/integration/prebuilt_presets/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/unit/prebuilt_presets/test_prebuilt_presets.py b/tests/integration/prebuilt_presets/test_prebuilt_presets.py similarity index 100% rename from tests/unit/prebuilt_presets/test_prebuilt_presets.py rename to tests/integration/prebuilt_presets/test_prebuilt_presets.py diff --git a/tests/unit/prebuilt_presets/test_prebuilt_presets_packaged.py b/tests/integration/prebuilt_presets/test_prebuilt_presets_packaged.py similarity index 100% rename from tests/unit/prebuilt_presets/test_prebuilt_presets_packaged.py rename to tests/integration/prebuilt_presets/test_prebuilt_presets_packaged.py diff --git a/tests/unit/cli/test_working_directory_lock.py b/tests/unit/cli/test_working_directory_lock.py index 8787ac78..1e69433a 100644 --- a/tests/unit/cli/test_working_directory_lock.py +++ b/tests/unit/cli/test_working_directory_lock.py @@ -9,28 +9,21 @@ from ytdl_sub.utils.file_lock import working_directory_lock from ytdl_sub.utils.system import IS_WINDOWS -@pytest.fixture -def config() -> ConfigFile: - return ConfigFile( - name="config", value={"configuration": {"working_directory": "test"}, "presets": {}} - ) - - -def test_working_directory_lock(config: ConfigFile): +def test_working_directory_lock(default_config: ConfigFile): if IS_WINDOWS: return new_pid = os.fork() if new_pid == 0: # is child - with working_directory_lock(config=config): + with working_directory_lock(config=default_config): time.sleep(3) return time.sleep(1) with pytest.raises(ValidationException, match="Cannot run two instances of ytdl-sub"): - with working_directory_lock(config=config): + with working_directory_lock(config=default_config): time.sleep(1) time.sleep(3) - with working_directory_lock(config=config): + with working_directory_lock(config=default_config): pass