44 lines
1.6 KiB
Python
44 lines
1.6 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.13.19")
|
|
self.assertIn("with_quic", version.tags)
|
|
require_supported(version)
|
|
|
|
def test_other_versions_are_rejected(self) -> None:
|
|
for value in ("1.13.12", "1.13.20", "1.14.0", "1.13.19-rc.1"):
|
|
text = VERSION_OUTPUT.replace("1.13.19", 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_command_failure(self) -> None:
|
|
runner = FakeRunner()
|
|
runner.version = "garbage"
|
|
with self.assertRaises(UnsupportedVersionError):
|
|
probe_version("sing-box", runner)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|