package display import ( "net" "strings" "testing" "time" "github.com/stretchr/testify/assert" ) func TestNetwork_InterfaceFlags_Good(t *testing.T) { flags := interfaceFlags(net.FlagUp | net.FlagLoopback | net.FlagRunning) assert.Equal(t, []string{"up", "loopback", "running"}, flags) } func TestNetwork_InterfaceFlags_Bad(t *testing.T) { assert.Empty(t, interfaceFlags(0)) } func TestNetwork_InterfaceFlags_Ugly(t *testing.T) { assert.Empty(t, interfaceFlags(net.Flags(1<<30))) } func TestNetwork_RenderNetworkPage_Good(t *testing.T) { svc := &Service{} state := NetworkState{ Hostname: "core-host", ObservedAt: time.Unix(1_700_000_000, 0).UTC(), Interfaces: []NetworkInterfaceState{ { Name: "en0", Index: 2, MTU: 1500, Addresses: []string{"192.168.0.10/24", "fe80::1/64"}, Up: true, }, }, Peers: []NetworkPeerState{ {ID: "peer-1", Topic: "timeline", Connected: true, SeenAt: time.Unix(1_700_000_100, 0).UTC()}, }, } body := svc.renderNetworkPage(state) assert.Contains(t, body, "core://network") assert.Contains(t, body, "core-host") assert.Contains(t, body, "en0") assert.Contains(t, body, "192.168.0.10/24") assert.Contains(t, body, "Registered peers") assert.Contains(t, body, "peer-1") } func TestNetwork_RenderNetworkPage_Bad(t *testing.T) { svc := &Service{} body := svc.renderNetworkPage(NetworkState{ Hostname: "", ObservedAt: time.Unix(1, 0).UTC(), }) assert.Contains(t, body, "No network interfaces were detected.") assert.Contains(t, body, "<host>") } func TestNetwork_RenderNetworkPage_Ugly(t *testing.T) { svc := &Service{} body := svc.renderNetworkPage(NetworkState{ Hostname: strings.Repeat("x", 128), ObservedAt: time.Unix(1, 0).UTC(), Interfaces: []NetworkInterfaceState{ {Name: "\"quoted\"", Index: 99, MTU: 9, Addresses: []string{""}, Up: false, Loopback: true}, }, }) assert.Contains(t, body, ""quoted"") assert.Contains(t, body, "<addr>") assert.Contains(t, body, "loopback") }