SPB Git forge
15commits 1branches 0releases
29.7 MBsize
maindefault branch
10 days agolast push
TypeScript 36.3% Python 31.8% Go 18% JavaScript 9.8% Shell 1.9% SQL 1.4% CSS 0.5%
2.2 KB · 78 lines go
Raw Blame History
1package ping23import (4	"context"5	"net"6	"testing"7	"time"89	"internetpressure.io/probe-agent/internal/protocol"10)1112func TestSummarise(t *testing.T) {13	m := protocol.Measurement{}14	summarise(&m, []time.Duration{10 * time.Millisecond, 12 * time.Millisecond, 11 * time.Millisecond, 13 * time.Millisecond}, 5)15	if !m.OK || m.Error != "" || *m.Sent != 5 || *m.Received != 4 {16		t.Fatalf("%+v", m)17	}18	if *m.PacketLoss != 0.2 || *m.RTTMinMs != 10 || *m.RTTMaxMs != 13 || *m.RTTAvgMs != 11.5 {19		t.Fatalf("stats: loss=%v min=%v avg=%v max=%v", *m.PacketLoss, *m.RTTMinMs, *m.RTTAvgMs, *m.RTTMaxMs)20	}21	// successive diffs: |12-10|=2, |11-12|=1, |13-11|=2 → mean 5/322	if got := *m.JitterMs; got < 1.666 || got > 1.667 {23		t.Fatalf("jitter=%v", got)24	}2526	m = protocol.Measurement{}27	summarise(&m, nil, 5)28	if m.OK || m.Error != protocol.ErrUnreachable || *m.PacketLoss != 1 {29		t.Fatalf("unreachable: %+v", m)30	}31}3233func TestTCPConnects(t *testing.T) {34	ln, err := net.Listen("tcp", "127.0.0.1:0")35	if err != nil {36		t.Fatal(err)37	}38	defer ln.Close()39	go func() {40		for {41			c, err := ln.Accept()42			if err != nil {43				return44			}45			c.Close()46		}47	}()48	port := ln.Addr().(*net.TCPAddr).Port49	c := &Checker{}50	m := c.RunTCP(context.Background(), protocol.Target{TargetID: "t", Hostname: "localhost", IP: strPtr("127.0.0.1"), Port: port})51	if !m.OK || m.Kind != "tcp" || *m.Received != Count || m.ResolvedIP != "127.0.0.1" {52		t.Fatalf("%+v", m)53	}54	// Closed port → refused → unreachable55	ln.Close()56	m = c.RunTCP(context.Background(), protocol.Target{TargetID: "t", Hostname: "localhost", IP: strPtr("127.0.0.1"), Port: port})57	if m.OK || m.Error != protocol.ErrUnreachable {58		t.Fatalf("closed port: %+v", m)59	}60}6162// Loopback ICMP echo; skipped when the platform does not allow unprivileged ICMP sockets.63func TestICMPLoopback(t *testing.T) {64	if !Detect() {65		t.Skip("unprivileged ICMP not available here")66	}67	c := &Checker{ICMP: true}68	m := c.Run(context.Background(), protocol.Target{TargetID: "lo", Hostname: "localhost", IP: strPtr("127.0.0.1")})69	if m.Kind != "ping" {70		t.Fatalf("expected icmp ping, got %+v", m)71	}72	if !m.OK || *m.Received == 0 {73		t.Fatalf("loopback ping failed: %+v", m)74	}75}7677func strPtr(s string) *string { return &s }78