[
{"fn": "isPort", "name": "22 is a port", "args": [22], "expect": true},
{"fn": "isPort", "name": "1 is the lowest port", "args": [1], "expect": true},
{"fn": "isPort", "name": "65535 is the highest port", "args": [65535], "expect": true},
{"fn": "isPort", "name": "0 is reserved, not a port to connect to", "args": [0], "expect": false},
{"fn": "isPort", "name": "65536 does not fit in 16 bits", "args": [65536], "expect": false},
{"fn": "isPort", "name": "negative numbers are not ports", "args": [-80], "expect": false},
{"fn": "isPort", "name": "a fraction is not a port", "args": [80.5], "expect": false},
{"fn": "isPort", "name": "a string of digits is not a number", "args": ["80"], "expect": false},
{"fn": "isPort", "name": "null is not a port", "args": [null], "expect": false},
{"fn": "portService", "name": "22/tcp is ssh", "args": [22, "tcp"], "expect": {"port": 22, "protocol": "tcp", "range": "system", "service": "ssh", "description": "The Secure Shell (SSH) Protocol"}},
{"fn": "portService", "name": "53/udp is domain (DNS)", "args": [53, "udp"], "expect": {"port": 53, "protocol": "udp", "range": "system", "service": "domain", "description": "Domain Name Server"}},
{"fn": "portService", "name": "80/tcp is http, the primary of IANA's three names for it", "args": [80, "tcp"], "expect": {"port": 80, "protocol": "tcp", "range": "system", "service": "http", "description": "World Wide Web HTTP"}},
{"fn": "portService", "name": "443/tcp is https", "args": [443, "tcp"], "expect": {"port": 443, "protocol": "tcp", "range": "system", "service": "https", "description": "http protocol over TLS/SSL"}},
{"fn": "portService", "name": "1023 is the last system port", "args": [1023, "tcp"], "expect": {"port": 1023, "protocol": "tcp", "range": "system", "service": null, "description": null}},
{"fn": "portService", "name": "1024 is the first user port, and is reserved", "args": [1024, "tcp"], "expect": {"port": 1024, "protocol": "tcp", "range": "user", "service": null, "description": null}},
{"fn": "portService", "name": "5432/tcp is postgresql", "args": [5432, "tcp"], "expect": {"port": 5432, "protocol": "tcp", "range": "user", "service": "postgresql", "description": "PostgreSQL Database"}},
{"fn": "portService", "name": "5433/tcp is registered to Pyrrho, not a second PostgreSQL", "args": [5433, "tcp"], "expect": {"port": 5433, "protocol": "tcp", "range": "user", "service": "pyrrho", "description": "Pyrrho DBMS"}},
{"fn": "portService", "name": "6379/tcp is redis", "args": [6379, "tcp"], "expect": {"port": 6379, "protocol": "tcp", "range": "user", "service": "redis", "description": "An advanced key-value cache and store"}},
{"fn": "portService", "name": "6379/udp is reserved, so no service", "args": [6379, "udp"], "expect": {"port": 6379, "protocol": "udp", "range": "user", "service": null, "description": null}},
{"fn": "portService", "name": "4874 is unassigned (IANA 4872-4875)", "args": [4874, "tcp"], "expect": {"port": 4874, "protocol": "tcp", "range": "user", "service": null, "description": null}},
{"fn": "portService", "name": "8080/tcp is http-alt", "args": [8080, "tcp"], "expect": {"port": 8080, "protocol": "tcp", "range": "user", "service": "http-alt", "description": "HTTP Alternate (see port 80)"}},
{"fn": "portService", "name": "465/tcp is submissions (RFC 8314), not the retired urd", "args": [465, "tcp"], "expect": {"port": 465, "protocol": "tcp", "range": "system", "service": "submissions", "description": "Message Submission over TLS protocol"}},
{"fn": "portService", "name": "49151 is the last user port", "args": [49151, "udp"], "expect": {"port": 49151, "protocol": "udp", "range": "user", "service": null, "description": null}},
{"fn": "portService", "name": "49152 is the first dynamic port", "args": [49152, "tcp"], "expect": {"port": 49152, "protocol": "tcp", "range": "dynamic", "service": null, "description": null}},
{"fn": "portService", "name": "65535 is dynamic", "args": [65535, "udp"], "expect": {"port": 65535, "protocol": "udp", "range": "dynamic", "service": null, "description": null}},
{"fn": "portService", "name": "port 0 is refused", "args": [0, "tcp"], "expectError": "port must be 1 to 65535, received 0"},
{"fn": "portService", "name": "port 65536 is refused", "args": [65536, "tcp"], "expectError": "port must be 1 to 65535, received 65536"},
{"fn": "portService", "name": "a fractional port is refused", "args": [22.5, "tcp"], "expectError": "port must be an integer"},
{"fn": "portService", "name": "a protocol other than tcp or udp is refused", "args": [22, "sctp"], "expectError": "protocol must be tcp or udp, received \"sctp\""},
{"fn": "portService", "name": "protocol is case-sensitive", "args": [22, "TCP"], "expectError": "protocol must be tcp or udp, received \"TCP\""}
]