A Python port of the Invisible Internet Project (I2P)
at main 59 lines 1.7 kB view raw
1"""Tests for bencode — TDD: tests before implementation.""" 2 3import pytest 4from i2p_apps.snark.bencode import bencode, bdecode 5 6 7class TestBencode: 8 def test_encode_int(self): 9 assert bencode(42) == b"i42e" 10 11 def test_encode_negative_int(self): 12 assert bencode(-1) == b"i-1e" 13 14 def test_encode_zero(self): 15 assert bencode(0) == b"i0e" 16 17 def test_encode_string(self): 18 assert bencode(b"spam") == b"4:spam" 19 20 def test_encode_empty_string(self): 21 assert bencode(b"") == b"0:" 22 23 def test_encode_list(self): 24 assert bencode([b"spam", b"eggs"]) == b"l4:spam4:eggse" 25 26 def test_encode_dict(self): 27 assert bencode({b"cow": b"moo", b"spam": b"eggs"}) == b"d3:cow3:moo4:spam4:eggse" 28 29 def test_encode_nested(self): 30 assert bencode({b"list": [1, 2, 3]}) == b"d4:listli1ei2ei3eee" 31 32 33class TestBdecode: 34 def test_decode_int(self): 35 assert bdecode(b"i42e") == 42 36 37 def test_decode_negative_int(self): 38 assert bdecode(b"i-1e") == -1 39 40 def test_decode_string(self): 41 assert bdecode(b"4:spam") == b"spam" 42 43 def test_decode_empty_string(self): 44 assert bdecode(b"0:") == b"" 45 46 def test_decode_list(self): 47 assert bdecode(b"l4:spam4:eggse") == [b"spam", b"eggs"] 48 49 def test_decode_dict(self): 50 result = bdecode(b"d3:cow3:moo4:spam4:eggse") 51 assert result == {b"cow": b"moo", b"spam": b"eggs"} 52 53 def test_decode_nested(self): 54 result = bdecode(b"d4:listli1ei2ei3eee") 55 assert result == {b"list": [1, 2, 3]} 56 57 def test_roundtrip(self): 58 original = {b"announce": b"http://tracker.i2p/announce", b"info": {b"name": b"test", b"length": 1024}} 59 assert bdecode(bencode(original)) == original