import importlib.util from pathlib import Path import struct import tempfile import unittest from unittest import mock from zipfile import ZipFile spec = importlib.util.spec_from_file_location( 'prepare_windows_runtime', Path(__file__).resolve().parents[1] / 'prepare_windows_runtime.py') prepare = importlib.util.module_from_spec(spec) spec.loader.exec_module(prepare) class WindowsRuntimePreparationTest(unittest.TestCase): def test_archive_paths_cannot_escape_destination(self): for name in ('../outside', '/absolute', 'dir/../../outside', 'C:/absolute', 'dir\\outside', '.'): with self.subTest(name=name), self.assertRaises(ValueError): prepare.validate_relative(name) def test_tracked_outputs_cannot_be_overwritten(self): with mock.patch.object(prepare, 'git', return_value=b'tracked/file\n'): with self.assertRaisesRegex(ValueError, 'overwrite tracked'): prepare.checked_output('tracked/file') def test_rebuilt_libraries_must_match_each_architecture(self): with tempfile.TemporaryDirectory() as folder: path = Path(folder) / 'libblsession.so' elf = bytearray(64) elf[:4] = b'\x7fELF' elf[5] = 1 elf[18:20] = struct.pack('