import sys import pytest from hbd.client import pingutil LINUX_OK = """PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data. 64 bytes from 1.1.1.1: icmp_seq=1 ttl=57 time=11.2 ms --- 1.1.1.1 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 11.234/11.234/11.234/0.000 ms """ MACOS_OK = """PING 1.1.1.1 (1.1.1.1): 56 data bytes 64 bytes from 1.1.1.1: icmp_seq=0 ttl=57 time=12.3 ms --- 1.1.1.1 ping statistics --- 1 packets transmitted, 1 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 12.3/12.3/12.3/0.000 ms """ LOST = """--- 1.1.1.1 ping statistics --- 1 packets transmitted, 0 received, 100% packet loss, time 0ms """ def test_parse_linux(): r = pingutil.parse_ping_output(LINUX_OK) assert r == {"rtt_min": 11.234, "rtt_avg": 11.234, "rtt_max": 11.234, "loss": 0.0} def test_parse_macos(): r = pingutil.parse_ping_output(MACOS_OK) assert r["rtt_avg"] == 12.3 and r["loss"] == 0.0 def test_parse_lost(): r = pingutil.parse_ping_output(LOST) assert r["rtt_avg"] == float("inf") and r["loss"] == 100.0 def test_parse_garbage_is_unreachable(): r = pingutil.parse_ping_output("ping: connect: Network is unreachable") assert r["rtt_avg"] == float("inf") and r["loss"] == 100.0 @pytest.mark.parametrize("platform,family,expected", [ ("linux", None, ["ping", "-c", "3", "-W", "5", "h"]), ("linux", 6, ["ping", "-c", "3", "-W", "5", "-6", "h"]), ("linux", 4, ["ping", "-c", "3", "-W", "5", "-4", "h"]), ("win32", None, ["ping", "-n", "3", "-w", "5000", "h"]), ("win32", 6, ["ping", "-n", "3", "-w", "5000", "-6", "h"]), ("darwin", None, ["ping", "-c", "3", "-W", "5", "h"]), ("darwin", 4, ["ping", "-c", "3", "-W", "5000", "h"]), ("darwin", 6, ["ping6", "-c", "3", "h"]), ]) def test_ping_command(monkeypatch, platform, family, expected): monkeypatch.setattr(sys, "platform", platform) assert pingutil.ping_command("h", 3, 5, family) == expected