Files

49 lines
1.8 KiB
Python

from __future__ import annotations
import subprocess
import unittest
from vpn_egressctl.errors import CommandError, UnsupportedVersionError
from vpn_egressctl.version import parse_version_output, probe_version, require_supported
from tests.helpers import FakeRunner, VERSION_OUTPUT
class VersionTests(unittest.TestCase):
def test_parse_and_require(self) -> None:
version = parse_version_output(VERSION_OUTPUT)
self.assertEqual(version.version, "1.14.0")
self.assertIn("with_quic", version.tags)
require_supported(version)
def test_other_versions_are_rejected(self) -> None:
for value in ("1.13.19", "1.13.21", "1.14.1", "1.14.0-rc.5", "1.15.0-alpha.1"):
text = VERSION_OUTPUT.replace("1.14.0", value, 1)
with self.subTest(value=value), self.assertRaises(UnsupportedVersionError):
require_supported(parse_version_output(text))
def test_non_linux_rejected(self) -> None:
version = parse_version_output(VERSION_OUTPUT.replace("linux/amd64", "windows/amd64"))
with self.assertRaises(UnsupportedVersionError):
require_supported(version)
def test_missing_quic_rejected(self) -> None:
version = parse_version_output(VERSION_OUTPUT.replace("with_quic,", ""))
with self.assertRaises(UnsupportedVersionError):
require_supported(version)
def test_missing_gvisor_rejected(self) -> None:
version = parse_version_output(VERSION_OUTPUT.replace("with_gvisor,", ""))
with self.assertRaises(UnsupportedVersionError):
require_supported(version)
def test_command_failure(self) -> None:
runner = FakeRunner()
runner.version = "garbage"
with self.assertRaises(UnsupportedVersionError):
probe_version("sing-box", runner)
if __name__ == "__main__":
unittest.main()