# retoor 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