Files

57 lines
1.8 KiB
Python
Raw Permalink Normal View History

# retoor <retoor@molodetz.nl>
import pytest
from devplacepy.services.nodes.addressclass import (
CLASS_DATACENTER,
CLASS_MOBILE,
CLASS_RESIDENTIAL,
CLASS_UNKNOWN,
DATACENTER_ASNS,
ELIGIBLE_CLASSES,
classify,
)
from devplacepy.services.nodes.spec import ASN_CLASSES
def test_the_classes_are_exactly_the_specified_ones():
assert set(ELIGIBLE_CLASSES) | {CLASS_DATACENTER, CLASS_UNKNOWN} == set(ASN_CLASSES)
@pytest.mark.parametrize(
"asn,org,expected",
[
(24940, "Hetzner Online GmbH", CLASS_DATACENTER),
(16509, "", CLASS_DATACENTER),
(64500, "Acme Web Hosting Ltd", CLASS_DATACENTER),
(64500, "Fast Cloud Services", CLASS_DATACENTER),
(64500, "Some VPN Provider", CLASS_DATACENTER),
(64500, "Data Center Holdings", CLASS_DATACENTER),
(21928, "T-Mobile USA, Inc.", CLASS_MOBILE),
(64500, "Example Wireless", CLASS_MOBILE),
(3320, "Deutsche Telekom AG", CLASS_RESIDENTIAL),
(1136, "KPN B.V.", CLASS_RESIDENTIAL),
(0, "", CLASS_UNKNOWN),
(None, None, CLASS_UNKNOWN),
("", "", CLASS_UNKNOWN),
],
)
def test_classification_table(asn, org, expected):
assert classify(asn, org) == expected
def test_keywords_match_whole_words_only():
assert classify(64500, "Hostingly Residential Broadband") == CLASS_RESIDENTIAL
assert classify(64500, "Cloudless Telecom") == CLASS_RESIDENTIAL
assert classify(64500, "Wirelesstown ISP") == CLASS_RESIDENTIAL
def test_a_known_asn_wins_over_a_residential_name():
assert 14061 in DATACENTER_ASNS
assert classify(14061, "Friendly Home Internet") == CLASS_DATACENTER
def test_garbage_asn_input_is_unknown_or_name_driven():
assert classify("not-a-number", "") == CLASS_UNKNOWN
assert classify("not-a-number", "Plain ISP") == CLASS_RESIDENTIAL