A Python port of the Invisible Internet Project (I2P)
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"