From 4a0f068465439c21cd7eca6a3a77beaea6cc6e9b Mon Sep 17 00:00:00 2001 From: Dusk-92 Date: Thu, 3 Sep 2026 21:20:00 +0200 Subject: [PATCH] Test fresh offline bundled fallbacks --- tests/test_safety.py | 118 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) diff --git a/tests/test_safety.py b/tests/test_safety.py index c985065..044d839 100644 --- a/tests/test_safety.py +++ b/tests/test_safety.py @@ -1831,6 +1831,124 @@ class BundledComponentSafetyTests(unittest.TestCase): self.assertTrue(tool._valid_superapi_addon(addon)) + def test_bundled_remote_mpq_fallback_is_verified_and_used(self): + with tempfile.TemporaryDirectory() as runtime_root, tempfile.TemporaryDirectory() as game: + fallback_dir = os.path.join( + runtime_root, + "Payload", + "Fallback", + "Remote", + "visual_example", + ) + os.makedirs(fallback_dir) + payload = os.path.join(fallback_dir, "payload.mpq") + with open(payload, "wb") as handle: + handle.write(b"MPQbundled") + + manifest_path = os.path.join( + runtime_root, + "Payload", + "Fallback", + "remote_fallbacks.json", + ) + with open(manifest_path, "w", encoding="utf-8") as handle: + json.dump( + { + "fallbacks": { + "visual_example": { + "filename": "payload.mpq", + "revision": "1", + "size": os.path.getsize(payload), + "sha256": hashlib.sha256(b"MPQbundled").hexdigest(), + } + } + }, + handle, + ) + + with ( + mock.patch.object( + remote_packages, + "_runtime_base_path", + return_value=runtime_root, + ), + mock.patch.object( + remote_packages, + "_download", + side_effect=remote_packages.RemotePackageError("offline"), + ), + mock.patch.object( + remote_packages, + "_install_managed_files", + ) as install, + ): + remote_packages._install_remote_mpq( + game, + "visual_example", + "https://example.invalid/visual.mpq", + os.path.join("Data", "patch-X.mpq"), + revision="1", + ) + + self.assertEqual(install.call_args.args[2][0][0], payload) + + def test_bundled_wowpresence_can_install_without_cache(self): + with tempfile.TemporaryDirectory() as runtime_root, tempfile.TemporaryDirectory() as game: + fallback_dir = os.path.join( + runtime_root, + "Payload", + "Fallback", + "Remote", + remote_packages.WOWPRESENCE_MANAGED_ID, + ) + os.makedirs(fallback_dir) + package = os.path.join(fallback_dir, "WowPresence.zip") + with zipfile.ZipFile(package, "w") as archive: + archive.writestr("WowPresence.dll", b"dummy-dll") + archive.writestr("WowPresence.exe", b"dummy-exe") + + manifest_path = os.path.join( + runtime_root, + "Payload", + "Fallback", + "remote_fallbacks.json", + ) + with open(manifest_path, "w", encoding="utf-8") as handle: + json.dump( + { + "fallbacks": { + remote_packages.WOWPRESENCE_MANAGED_ID: { + "filename": "WowPresence.zip", + "revision": "v1.3", + "size": os.path.getsize(package), + "sha256": remote_packages._file_sha256(package), + } + } + }, + handle, + ) + + with ( + mock.patch.object( + remote_packages, + "_runtime_base_path", + return_value=runtime_root, + ), + mock.patch.object(remote_packages, "_verify_x86_pe"), + mock.patch.object( + remote_packages, + "_install_managed_files_transactional", + ) as install, + mock.patch.object( + remote_packages, + "_set_managed_manifest_values", + ), + ): + revision = remote_packages.install_bundled_wowpresence(game) + + self.assertEqual(revision, "v1.3") + install.assert_called_once() + def test_branch_archive_download_can_be_pinned_to_resolved_revision(self): with ( mock.patch.object(remote_packages, "_download", return_value="archive.zip") as download,