A Python port of the Invisible Internet Project (I2P)
at main 78 lines 2.4 kB view raw
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