A Python port of the Invisible Internet Project (I2P)
1"""Tests for update system — TDD: tests before implementation."""
2
3import pytest
4from pathlib import Path
5
6from i2p_apps.updater.version import Version, compare_versions
7from i2p_apps.updater.su3 import SU3Header, parse_su3_header
8from i2p_apps.updater.checker import UpdateChecker, UpdateInfo
9
10
11class TestVersion:
12 def test_parse(self):
13 v = Version("0.9.62")
14 assert v.major == 0
15 assert v.minor == 9
16 assert v.patch == 62
17
18 def test_compare_equal(self):
19 assert compare_versions("0.9.62", "0.9.62") == 0
20
21 def test_compare_newer(self):
22 assert compare_versions("0.9.63", "0.9.62") > 0
23
24 def test_compare_older(self):
25 assert compare_versions("0.9.61", "0.9.62") < 0
26
27 def test_compare_major(self):
28 assert compare_versions("1.0.0", "0.9.99") > 0
29
30 def test_str(self):
31 v = Version("2.4.0")
32 assert str(v) == "2.4.0"
33
34 def test_two_part(self):
35 v = Version("0.9")
36 assert v.major == 0
37 assert v.minor == 9
38 assert v.patch == 0
39
40
41class TestSU3Header:
42 def test_magic(self):
43 # SU3 files start with magic "I2Psu3"
44 data = b"I2Psu3" + b"\x00" * 50
45 header = parse_su3_header(data)
46 assert header is not None
47 assert header.magic == "I2Psu3"
48
49 def test_invalid_magic(self):
50 data = b"NOTSU3" + b"\x00" * 50
51 header = parse_su3_header(data)
52 assert header is None
53
54 def test_too_short(self):
55 data = b"I2P"
56 header = parse_su3_header(data)
57 assert header is None
58
59
60class TestUpdateChecker:
61 def test_creation(self):
62 checker = UpdateChecker(current_version="0.9.62")
63 assert checker.current_version == "0.9.62"
64
65 def test_needs_update_true(self):
66 checker = UpdateChecker(current_version="0.9.62")
67 info = UpdateInfo(version="0.9.63", url="http://example.i2p/update.su3")
68 assert checker.needs_update(info) is True
69
70 def test_needs_update_false(self):
71 checker = UpdateChecker(current_version="0.9.63")
72 info = UpdateInfo(version="0.9.62", url="http://example.i2p/update.su3")
73 assert checker.needs_update(info) is False
74
75 def test_needs_update_same(self):
76 checker = UpdateChecker(current_version="0.9.62")
77 info = UpdateInfo(version="0.9.62", url="http://example.i2p/update.su3")
78 assert checker.needs_update(info) is False