A Python port of the Invisible Internet Project (I2P)
at main 90 lines 3.1 kB view raw
1"""Tests for router CLI argument parsing.""" 2 3from unittest.mock import patch, MagicMock 4 5import pytest 6 7# We can't easily test main() since it calls asyncio.run(bootstrap), 8# but we can test the argument parser by importing and patching. 9 10 11class TestRouterCLIArgs: 12 def _parse(self, args): 13 """Parse args using the router's argparse setup.""" 14 import argparse 15 parser = argparse.ArgumentParser(description="I2P Python Router") 16 parser.add_argument("--host", default="0.0.0.0") 17 parser.add_argument("--port", type=int, default=9700) 18 parser.add_argument("--health-port", type=int, default=9701) 19 parser.add_argument("--data-dir", default="~/.i2p-python") 20 parser.add_argument("--reseed", action="store_true") 21 parser.add_argument("--setup", nargs="?", const="auto", metavar="MODE") 22 parser.add_argument("--log-level", default="INFO", 23 choices=["DEBUG", "INFO", "WARNING", "ERROR"]) 24 return parser.parse_args(args) 25 26 def test_defaults(self): 27 args = self._parse([]) 28 assert args.host == "0.0.0.0" 29 assert args.port == 9700 30 assert args.health_port == 9701 31 assert args.data_dir == "~/.i2p-python" 32 assert args.reseed is False 33 assert args.setup is None 34 assert args.log_level == "INFO" 35 36 def test_custom_port(self): 37 args = self._parse(["--port", "12345"]) 38 assert args.port == 12345 39 40 def test_custom_host(self): 41 args = self._parse(["--host", "127.0.0.1"]) 42 assert args.host == "127.0.0.1" 43 44 def test_reseed_flag(self): 45 args = self._parse(["--reseed"]) 46 assert args.reseed is True 47 48 def test_setup_auto(self): 49 args = self._parse(["--setup"]) 50 assert args.setup == "auto" 51 52 def test_setup_paranoid(self): 53 args = self._parse(["--setup", "paranoid"]) 54 assert args.setup == "paranoid" 55 56 def test_setup_performance(self): 57 args = self._parse(["--setup", "performance"]) 58 assert args.setup == "performance" 59 60 def test_setup_interactive(self): 61 args = self._parse(["--setup", "interactive"]) 62 assert args.setup == "interactive" 63 64 def test_log_level_debug(self): 65 args = self._parse(["--log-level", "DEBUG"]) 66 assert args.log_level == "DEBUG" 67 68 def test_data_dir(self): 69 args = self._parse(["--data-dir", "/tmp/test-i2p"]) 70 assert args.data_dir == "/tmp/test-i2p" 71 72 def test_health_port(self): 73 args = self._parse(["--health-port", "9999"]) 74 assert args.health_port == 9999 75 76 def test_all_options(self): 77 args = self._parse([ 78 "--host", "0.0.0.0", 79 "--port", "9800", 80 "--health-port", "9801", 81 "--data-dir", "/data/i2p", 82 "--reseed", 83 "--setup", "paranoid", 84 "--log-level", "WARNING", 85 ]) 86 assert args.port == 9800 87 assert args.health_port == 9801 88 assert args.reseed is True 89 assert args.setup == "paranoid" 90 assert args.log_level == "WARNING"