Files
kefu/wechat_rpa/test_packaging_native.py
T
2026-09-21 10:34:06 +08:00

43 lines
2.1 KiB
Python

"""Regression for PATH-selected OpenSSL libraries disappearing from the bundle."""
import _ssl
import shutil
import sys
import tempfile
import unittest
from pathlib import Path
from unittest import mock
from packaging_native import pin_ssl_binaries, python_ssl_binaries
class PythonSslPackagingTest(unittest.TestCase):
def test_dependencies_come_from_build_python(self):
dependencies = python_ssl_binaries()
self.assertTrue(any(name.startswith("libssl") for name, _, _ in dependencies))
self.assertTrue(any(name.startswith("libcrypto") for name, _, _ in dependencies))
for name, source, kind in dependencies:
self.assertTrue(Path(source).is_file())
self.assertTrue(Path(source).resolve().is_relative_to(Path(sys.base_prefix).resolve()))
self.assertEqual(Path(source).name, name)
self.assertEqual(kind, "BINARY")
def test_path_collision_is_replaced_and_required_libraries_are_retained(self):
verified = python_ssl_binaries()
wrong = [(name.upper(), "C:/unrelated-pdf-tool/" + name, "BINARY") for name, _, _ in verified]
other = ("_ssl.pyd", str(_ssl.__file__), "EXTENSION")
result = pin_ssl_binaries(wrong + [other], verified)
self.assertEqual(result, [other] + verified)
# The existing unrelated-runtime filter must keep the corrected DLLs.
filtered = [item for item in result if ".cache" not in item[1] or
Path(item[1]).resolve().is_relative_to(Path(sys.base_prefix).resolve())]
self.assertEqual(filtered, result)
def test_missing_python_ssl_dependency_fails_before_packaging(self):
with tempfile.TemporaryDirectory() as temporary:
root = Path(temporary)
extension = root / "_ssl.pyd"
shutil.copyfile(_ssl.__file__, extension)
with mock.patch.object(_ssl, "__file__", str(extension)), mock.patch.object(sys, "base_prefix", str(root)):
with self.assertRaisesRegex(RuntimeError, "OpenSSL dependency is missing"):
python_ssl_binaries()