| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- #!/usr/bin/env python3
- """DNS resolver pool: enough entries, randomness, valid IPs."""
- import sys, re, ipaddress
- err = []
- from core._dns_pool import (PUBLIC_DNS_RESOLVERS, OPENDNS_RESOLVERS,
- DUMMY_ROUTABLE_HOSTS, random_resolvers,
- random_opendns, random_dummy_host)
- if len(PUBLIC_DNS_RESOLVERS) < 50:
- err.append(f"PUBLIC_DNS_RESOLVERS has only {len(PUBLIC_DNS_RESOLVERS)} entries (expected >=50)")
- for ip in PUBLIC_DNS_RESOLVERS + OPENDNS_RESOLVERS + DUMMY_ROUTABLE_HOSTS:
- try:
- ipaddress.IPv4Address(ip)
- except ValueError:
- err.append(f"invalid IPv4 in pool: {ip!r}")
- samples = set()
- for _ in range(200):
- samples.add(tuple(random_resolvers(2)))
- if len(samples) < 30:
- err.append(f"random_resolvers seems non-random: only {len(samples)} unique pairs in 200 draws")
- for _ in range(10):
- pair = random_resolvers(2)
- if len(pair) != 2:
- err.append(f"random_resolvers(2) returned {len(pair)} items")
- if pair[0] == pair[1]:
- err.append("random_resolvers(2) returned duplicates")
- od = random_opendns()
- for ip in od:
- if ip not in OPENDNS_RESOLVERS:
- err.append(f"random_opendns returned non-opendns IP: {ip}")
- h = random_dummy_host()
- if h not in DUMMY_ROUTABLE_HOSTS:
- err.append(f"random_dummy_host returned unknown: {h}")
- print(f"pool size: {len(PUBLIC_DNS_RESOLVERS)}")
- print(f"unique 2-tuples in 200 draws: {len(samples)}")
- print(f"opendns pool: {len(OPENDNS_RESOLVERS)}")
- print(f"dummy hosts: {len(DUMMY_ROUTABLE_HOSTS)}")
- for e in err:
- print("FAIL:", e)
- sys.exit(0 if not err else 1)
|