Browse Source

tests: add tests for a random selection of demo.dat

master
James O'Beirne 4 years ago
parent
commit
0a44b8a340
  1. 3
      Makefile
  2. 100
      demo.random.dat
  3. 74
      testmap.py

3
Makefile

@ -9,3 +9,6 @@ demo.dat.xz: ipv4.dump ipv6.dump birdparse.py
demo.map: demo.dat.xz buildmap.py
xz -d <demo.dat.xz | python3 buildmap.py >demo.map
test: demo.map
python3 testmap.py

100
demo.random.dat

@ -0,0 +1,100 @@
185.246.138.0/23 AS9009 # ipv4.dump:14068018
208.91.107.0/24 AS35913 # ipv4.dump:5300217
186.249.165.0/24 AS53037 # ipv4.dump:7983539
200.54.108.0/24 AS52310 # ipv4.dump:5501190
209.71.160.0/20 AS46339 # ipv4.dump:17825415
142.52.146.0/24 AS852 # ipv4.dump:488513
212.128.116.0/23 AS200521 # ipv4.dump:13356568
186.178.15.0/24 AS28006 # ipv4.dump:9201526
2a01:9700:13a7::/48 AS8376 # ipv6.dump:1037828
172.105.134.0/23 AS63949 # ipv4.dump:15412112
78.130.228.0/24 AS9070 # ipv4.dump:12119994
118.126.140.0/23 AS23724 # ipv4.dump:7123714
24.94.32.0/19 AS11351 # ipv4.dump:1434597
142.234.32.0/21 AS7979 # ipv4.dump:7022111
2405:4800:2140::/46 AS18403 # ipv6.dump:2326297
200.113.215.0/24 AS27653 # ipv4.dump:3279416
45.167.190.0/23 AS268046 # ipv4.dump:2584658
198.137.70.0/24 AS10264 # ipv4.dump:3336467
200.13.36.0/24 AS28400 # ipv4.dump:3882782
64.69.220.0/24 AS55002 # ipv4.dump:18960871
209.49.229.0/24 AS395626 # ipv4.dump:14398115
87.249.76.0/22 AS15641 # ipv4.dump:9319161
2001:67c:206c::/48 AS49788 # ipv6.dump:1800452
2604:2d80:8000::/48 AS30036 # ipv6.dump:1982081
177.53.12.0/24 AS52989 # ipv4.dump:2090089
85.192.36.0/22 AS12695 # ipv4.dump:17606664
212.126.108.0/24 AS39216 # ipv4.dump:18478672
66.13.132.0/24 AS5650 # ipv4.dump:19204708
2400:3800:6000::/37 AS9617 # ipv6.dump:2204768
5.123.160.0/20 AS44244 # ipv4.dump:16376955
2600:2100:1b::/48 AS54858 # ipv6.dump:1944131
150.242.174.0/24 AS132453 # ipv4.dump:9808415
62.221.134.0/23 AS13124 # ipv4.dump:3496079
213.153.170.0/23 AS34984 # ipv4.dump:15953301
197.149.72.0/24 AS35074 # ipv4.dump:18530955
132.97.0.0/16 AS306 # ipv4.dump:19630592
212.138.180.0/24 AS209464 # ipv4.dump:6079946
103.251.30.0/24 AS58984 # ipv4.dump:18032160
74.221.64.0/20 AS29979 # ipv4.dump:20136686
185.116.176.0/22 AS204033 # ipv4.dump:19959133
40.248.252.0/24 AS4249 # ipv4.dump:9393294
103.78.50.0/24 AS135655 # ipv4.dump:12363962
67.209.219.0/24 AS20356 # ipv4.dump:2756256
214.72.0.0/24 AS27064 # ipv4.dump:6228044
188.38.127.0/24 AS15897 # ipv4.dump:827001
2a03:f080:1000::/48 AS42685 # ipv6.dump:1301509
95.140.24.0/21 AS48739 # ipv4.dump:10034325
84.39.111.0/24 AS48200 # ipv4.dump:20443864
63.163.108.0/23 AS26724 # ipv4.dump:19309425
24.197.96.0/24 AS20115 # ipv4.dump:14008635
184.181.24.0/21 AS22773 # ipv4.dump:3568675
156.0.224.0/21 AS328220 # ipv4.dump:9584679
146.120.20.0/22 AS57901 # ipv4.dump:19852902
149.20.24.0/24 AS1280 # ipv4.dump:7015284
219.65.104.0/23 AS4755 # ipv4.dump:20183203
92.42.64.0/21 AS44764 # ipv4.dump:15718454
45.160.90.0/24 AS268414 # ipv4.dump:11064350
187.149.8.0/21 AS8151 # ipv4.dump:7827459
208.80.116.0/22 AS32354 # ipv4.dump:17877462
64.129.144.0/24 AS20251 # ipv4.dump:15149238
205.147.108.0/24 AS17439 # ipv4.dump:6170532
65.5.88.0/21 AS6389 # ipv4.dump:11859089
116.241.76.0/22 AS131596 # ipv4.dump:3725486
98.143.211.0/24 AS22639 # ipv4.dump:17293905
138.136.68.0/23 AS5972 # ipv4.dump:2055175
170.80.99.0/24 AS264829 # ipv4.dump:2425897
186.159.164.0/22 AS52228 # ipv4.dump:15901760
202.60.124.0/23 AS37970 # ipv4.dump:6011975
92.36.192.0/20 AS9146 # ipv4.dump:13920556
182.73.4.0/24 AS9498 # ipv4.dump:19297810
198.73.210.0/24 AS393304 # ipv4.dump:5060133
74.204.128.0/21 AS35986 # ipv4.dump:14710033
185.129.83.0/24 AS203616 # ipv4.dump:8719643
79.99.56.0/21 AS47212 # ipv4.dump:12465762
77.92.123.0/24 AS25145 # ipv4.dump:16610816
82.141.192.0/18 AS5466 # ipv4.dump:9919239
171.159.60.0/24 AS10794 # ipv4.dump:6186705
52.216.4.0/24 AS16509 # ipv4.dump:11150294
196.16.92.0/22 AS19969 # ipv4.dump:4553797
188.187.246.0/24 AS41668 # ipv4.dump:3501609
198.228.131.0/24 AS701 # ipv4.dump:10060201
168.77.75.0/24 AS3551 # ipv4.dump:6537912
201.197.64.0/23 AS11830 # ipv4.dump:12945306
105.235.103.0/24 AS36974 # ipv4.dump:20415098
217.72.60.0/23 AS45011 # ipv4.dump:7429652
185.118.72.0/22 AS47406 # ipv4.dump:11380081
109.70.187.0/24 AS44391 # ipv4.dump:6097074
116.50.78.0/23 AS38529 # ipv4.dump:15525205
177.152.66.0/24 AS262773 # ipv4.dump:9918217
116.93.48.0/23 AS23930 # ipv4.dump:15072801
172.110.58.0/24 AS396191 # ipv4.dump:13625296
182.50.255.0/24 AS45786 # ipv4.dump:20783094
199.48.177.0/24 AS20473 # ipv4.dump:9553840
85.91.120.0/23 AS28809 # ipv4.dump:12403000
213.172.0.0/19 AS20632 # ipv4.dump:4621070
150.196.85.0/24 AS747 # ipv4.dump:21064826
201.151.243.0/24 AS11172 # ipv4.dump:3121096
123.51.9.0/24 AS45510 # ipv4.dump:11847527
138.118.109.0/24 AS264257 # ipv4.dump:7184483
83.228.128.0/17 AS12350 # ipv4.dump:8421526

74
testmap.py

@ -1,4 +1,6 @@
#!/usr/bin/env python3
import sys
import random
import ipaddress
# Convert a byte array to a bit array
@ -66,14 +68,64 @@ def Interpret(asmap, num, bits):
else:
assert(False)
with open(sys.argv[1], "rb") as f:
asmap = DecodeBytes(f.read())
addr = ipaddress.ip_address(sys.argv[2])
if isinstance(addr, ipaddress.IPv4Address):
num = int.from_bytes(addr.packed, 'big') + 0xffff00000000
elif isinstance(addr, ipaddress.IPv6Address):
num = int.from_bytes(addr.packed, 'big')
ret = Interpret(asmap, num, 128)
if ret:
print("AS%i" % ret)
def decode_ip(ip: str) -> int:
addr = ipaddress.ip_address(ip)
if isinstance(addr, ipaddress.IPv4Address):
return int.from_bytes(addr.packed, 'big') + 0xffff00000000
elif isinstance(addr, ipaddress.IPv6Address):
return int.from_bytes(addr.packed, 'big')
if __name__ == '__main__':
no_args = len(sys.argv) == 1
if no_args:
filename = './demo.map'
else:
filename = sys.argv[1]
with open(filename, "rb") as f:
asmap = DecodeBytes(f.read())
# If no arguments are passed, run a test on a random selection from
# demo.dat.
if no_args:
expected = [
('8.8.8.8', 15169),
]
failed = False
with open('./demo.random.dat', 'r') as f:
for line in f:
(ip, asn) = line.split()[:2]
ip = ip.split('/')[0]
assert(asn[:2] == 'AS')
asn = int(asn[2:])
# Make the IP concrete and randomize it somewhat within the
# subnet.
if ':' not in ip:
ip = '.'.join(ip.split('.')[:3]) + '.{}'.format(
random.randint(0, 16))
expected.append((ip, asn))
for ip, asn in expected:
got = Interpret(asmap, decode_ip(ip), 128)
if got != asn:
failed = True
print("{} failed! Got {}, expected {}".format(
ip, got, asn), file=sys.stderr)
else:
print("{} passed".format(ip))
sys.exit(1 if failed else 0)
else:
ret = Interpret(asmap, decode_ip(sys.argv[2]), 128)
if ret:
print("AS%i" % ret)

Loading…
Cancel
Save