package integration import ( "testing" ) func TestPingAllByIP(t *testing.T) { IntegrationSkip(t) scenario, err := NewScenario() if err != nil { t.Errorf("failed to create scenario: %s", err) } spec := map[string]int{ "namespace1": len(TailscaleVersions), "namespace2": len(TailscaleVersions), } err = scenario.CreateHeadscaleEnv(spec) if err != nil { t.Errorf("failed to create headscale environment: %s", err) } allClients, err := scenario.ListTailscaleClients() if err != nil { t.Errorf("failed to get clients: %s", err) } allIps, err := scenario.ListTailscaleClientsIPs() if err != nil { t.Errorf("failed to get clients: %s", err) } err = scenario.WaitForTailscaleSync() if err != nil { t.Errorf("failed wait for tailscale clients to be in sync: %s", err) } success := 0 for _, client := range allClients { for _, ip := range allIps { err := client.Ping(ip.String()) if err != nil { t.Errorf("failed to ping %s from %s: %s", ip, client.Hostname(), err) } else { success++ } } } t.Logf("%d successful pings out of %d", success, len(allClients)*len(allIps)) err = scenario.Shutdown() if err != nil { t.Errorf("failed to tear down scenario: %s", err) } } func TestPingAllByHostname(t *testing.T) { IntegrationSkip(t) scenario, err := NewScenario() if err != nil { t.Errorf("failed to create scenario: %s", err) } spec := map[string]int{ // Omit 1.16.2 (-1) because it does not have the FQDN field "namespace3": len(TailscaleVersions) - 1, "namespace4": len(TailscaleVersions) - 1, } err = scenario.CreateHeadscaleEnv(spec) if err != nil { t.Errorf("failed to create headscale environment: %s", err) } allClients, err := scenario.ListTailscaleClients() if err != nil { t.Errorf("failed to get clients: %s", err) } err = scenario.WaitForTailscaleSync() if err != nil { t.Errorf("failed wait for tailscale clients to be in sync: %s", err) } allHostnames, err := scenario.ListTailscaleClientsFQDNs() if err != nil { t.Errorf("failed to get FQDNs: %s", err) } success := 0 for _, client := range allClients { for _, hostname := range allHostnames { err := client.Ping(hostname) if err != nil { t.Errorf("failed to ping %s from %s: %s", hostname, client.Hostname(), err) } else { success++ } } } t.Logf("%d successful pings out of %d", success, len(allClients)*len(allClients)) err = scenario.Shutdown() if err != nil { t.Errorf("failed to tear down scenario: %s", err) } }