|
| 1 | +import os |
| 2 | +import subprocess |
| 3 | +import sys |
| 4 | +import tempfile |
| 5 | +import unittest |
| 6 | +import venv |
| 7 | +from pathlib import Path |
| 8 | + |
| 9 | + |
| 10 | +class WheelInstallTest(unittest.TestCase): |
| 11 | + def setUp(self): |
| 12 | + self.wheel_path = Path(sys.argv[1]).resolve() |
| 13 | + self.temp_dir = tempfile.TemporaryDirectory() |
| 14 | + self.addCleanup(self.temp_dir.cleanup) |
| 15 | + |
| 16 | + self.temp_path = Path(self.temp_dir.name) |
| 17 | + self.venv_path = self.temp_path / "venv" |
| 18 | + venv.EnvBuilder(with_pip=True).create(self.venv_path) |
| 19 | + self.python = self.venv_path / "bin" / "python" |
| 20 | + |
| 21 | + self.env = os.environ.copy() |
| 22 | + for variable in ("PYTHONHOME", "PYTHONPATH", "PYTHONUSERBASE"): |
| 23 | + self.env.pop(variable, None) |
| 24 | + self.env["PIP_DISABLE_PIP_VERSION_CHECK"] = "1" |
| 25 | + self.env["PYTHONNOUSERSITE"] = "1" |
| 26 | + |
| 27 | + def run_command(self, *args): |
| 28 | + result = subprocess.run( |
| 29 | + args, |
| 30 | + cwd=self.temp_path, |
| 31 | + env=self.env, |
| 32 | + stdout=subprocess.PIPE, |
| 33 | + stderr=subprocess.STDOUT, |
| 34 | + text=True, |
| 35 | + ) |
| 36 | + self.assertEqual(0, result.returncode, msg=result.stdout) |
| 37 | + return result.stdout |
| 38 | + |
| 39 | + def test_install_resolves_requests_and_starts_http_command(self): |
| 40 | + self.run_command( |
| 41 | + self.python, |
| 42 | + "-I", |
| 43 | + "-c", |
| 44 | + "import importlib.util; " |
| 45 | + "assert importlib.util.find_spec('requests') is None", |
| 46 | + ) |
| 47 | + |
| 48 | + self.run_command( |
| 49 | + self.python, |
| 50 | + "-m", |
| 51 | + "pip", |
| 52 | + "install", |
| 53 | + "--no-input", |
| 54 | + self.wheel_path, |
| 55 | + ) |
| 56 | + self.run_command(self.python, "-m", "pip", "check") |
| 57 | + self.run_command( |
| 58 | + self.python, |
| 59 | + "-I", |
| 60 | + "-c", |
| 61 | + "from importlib.metadata import version; " |
| 62 | + "assert version('requests') == '2.32.5'; " |
| 63 | + "import certifi, charset_normalizer, idna, requests, urllib3", |
| 64 | + ) |
| 65 | + |
| 66 | + top_level_help = self.run_command( |
| 67 | + self.python, "-I", "-m", "kvcm_ops", "--help" |
| 68 | + ) |
| 69 | + self.assertIn("KVCM script entry", top_level_help) |
| 70 | + |
| 71 | + http_command_help = self.run_command( |
| 72 | + self.python, |
| 73 | + "-I", |
| 74 | + "-m", |
| 75 | + "kvcm_ops", |
| 76 | + "list_instance", |
| 77 | + "--help", |
| 78 | + ) |
| 79 | + self.assertIn("kvcm: list_intance.", http_command_help) |
| 80 | + |
| 81 | + |
| 82 | +if __name__ == "__main__": |
| 83 | + unittest.main(argv=[sys.argv[0]]) |
0 commit comments