mirror of
https://github.com/juanfont/headscale.git
synced 2024-11-28 20:45:21 +00:00
Use pingAll helper for all integration pinging
Signed-off-by: Kristoffer Dalby <kristoffer@tailscale.com>
This commit is contained in:
parent
feeb5d334b
commit
97a909866d
@ -19,6 +19,7 @@ import (
|
|||||||
"github.com/juanfont/headscale/integration/hsic"
|
"github.com/juanfont/headscale/integration/hsic"
|
||||||
"github.com/ory/dockertest/v3"
|
"github.com/ory/dockertest/v3"
|
||||||
"github.com/ory/dockertest/v3/docker"
|
"github.com/ory/dockertest/v3/docker"
|
||||||
|
"github.com/samber/lo"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -91,7 +92,11 @@ func TestOIDCAuthenticationPingAll(t *testing.T) {
|
|||||||
t.Errorf("failed wait for tailscale clients to be in sync: %s", err)
|
t.Errorf("failed wait for tailscale clients to be in sync: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
success := pingAll(t, allClients, allIps)
|
allAddrs := lo.Map(allIps, func(x netip.Addr, index int) string {
|
||||||
|
return x.String()
|
||||||
|
})
|
||||||
|
|
||||||
|
success := pingAllHelper(t, allClients, allAddrs)
|
||||||
t.Logf("%d successful pings out of %d", success, len(allClients)*len(allIps))
|
t.Logf("%d successful pings out of %d", success, len(allClients)*len(allIps))
|
||||||
|
|
||||||
err = scenario.Shutdown()
|
err = scenario.Shutdown()
|
||||||
@ -157,7 +162,11 @@ func TestOIDCExpireNodesBasedOnTokenExpiry(t *testing.T) {
|
|||||||
t.Errorf("failed wait for tailscale clients to be in sync: %s", err)
|
t.Errorf("failed wait for tailscale clients to be in sync: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
success := pingAll(t, allClients, allIps)
|
allAddrs := lo.Map(allIps, func(x netip.Addr, index int) string {
|
||||||
|
return x.String()
|
||||||
|
})
|
||||||
|
|
||||||
|
success := pingAllHelper(t, allClients, allAddrs)
|
||||||
t.Logf("%d successful pings out of %d (before expiry)", success, len(allClients)*len(allIps))
|
t.Logf("%d successful pings out of %d (before expiry)", success, len(allClients)*len(allIps))
|
||||||
|
|
||||||
// await all nodes being logged out after OIDC token expiry
|
// await all nodes being logged out after OIDC token expiry
|
||||||
@ -359,24 +368,6 @@ func (s *AuthOIDCScenario) runTailscaleUp(
|
|||||||
return fmt.Errorf("failed to up tailscale node: %w", errNoUserAvailable)
|
return fmt.Errorf("failed to up tailscale node: %w", errNoUserAvailable)
|
||||||
}
|
}
|
||||||
|
|
||||||
func pingAll(t *testing.T, clients []TailscaleClient, ips []netip.Addr) int {
|
|
||||||
t.Helper()
|
|
||||||
success := 0
|
|
||||||
|
|
||||||
for _, client := range clients {
|
|
||||||
for _, ip := range ips {
|
|
||||||
err := client.Ping(ip.String())
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("failed to ping %s from %s: %s", ip, client.Hostname(), err)
|
|
||||||
} else {
|
|
||||||
success++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return success
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *AuthOIDCScenario) Shutdown() error {
|
func (s *AuthOIDCScenario) Shutdown() error {
|
||||||
err := s.pool.Purge(s.mockOIDC)
|
err := s.pool.Purge(s.mockOIDC)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -13,6 +13,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/juanfont/headscale/integration/hsic"
|
"github.com/juanfont/headscale/integration/hsic"
|
||||||
|
"github.com/samber/lo"
|
||||||
)
|
)
|
||||||
|
|
||||||
var errParseAuthPage = errors.New("failed to parse auth page")
|
var errParseAuthPage = errors.New("failed to parse auth page")
|
||||||
@ -59,18 +60,11 @@ func TestAuthWebFlowAuthenticationPingAll(t *testing.T) {
|
|||||||
t.Errorf("failed wait for tailscale clients to be in sync: %s", err)
|
t.Errorf("failed wait for tailscale clients to be in sync: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
success := 0
|
allAddrs := lo.Map(allIps, func(x netip.Addr, index int) string {
|
||||||
for _, client := range allClients {
|
return x.String()
|
||||||
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++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
success := pingAllHelper(t, allClients, allAddrs)
|
||||||
t.Logf("%d successful pings out of %d", success, len(allClients)*len(allIps))
|
t.Logf("%d successful pings out of %d", success, len(allClients)*len(allIps))
|
||||||
|
|
||||||
err = scenario.Shutdown()
|
err = scenario.Shutdown()
|
||||||
@ -117,18 +111,11 @@ func TestAuthWebFlowLogoutAndRelogin(t *testing.T) {
|
|||||||
t.Errorf("failed wait for tailscale clients to be in sync: %s", err)
|
t.Errorf("failed wait for tailscale clients to be in sync: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
success := 0
|
allAddrs := lo.Map(allIps, func(x netip.Addr, index int) string {
|
||||||
for _, client := range allClients {
|
return x.String()
|
||||||
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++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
success := pingAllHelper(t, allClients, allAddrs)
|
||||||
t.Logf("%d successful pings out of %d", success, len(allClients)*len(allIps))
|
t.Logf("%d successful pings out of %d", success, len(allClients)*len(allIps))
|
||||||
|
|
||||||
clientIPs := make(map[TailscaleClient][]netip.Addr)
|
clientIPs := make(map[TailscaleClient][]netip.Addr)
|
||||||
@ -175,18 +162,11 @@ func TestAuthWebFlowLogoutAndRelogin(t *testing.T) {
|
|||||||
t.Errorf("failed to get clients: %s", err)
|
t.Errorf("failed to get clients: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
success = 0
|
allAddrs = lo.Map(allIps, func(x netip.Addr, index int) string {
|
||||||
for _, client := range allClients {
|
return x.String()
|
||||||
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++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
success = pingAllHelper(t, allClients, allAddrs)
|
||||||
t.Logf("%d successful pings out of %d", success, len(allClients)*len(allIps))
|
t.Logf("%d successful pings out of %d", success, len(allClients)*len(allIps))
|
||||||
|
|
||||||
for _, client := range allClients {
|
for _, client := range allClients {
|
||||||
@ -211,7 +191,12 @@ func TestAuthWebFlowLogoutAndRelogin(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !found {
|
if !found {
|
||||||
t.Errorf("IPs changed for client %s. Used to be %v now %v", client.Hostname(), clientIPs[client], ips)
|
t.Errorf(
|
||||||
|
"IPs changed for client %s. Used to be %v now %v",
|
||||||
|
client.Hostname(),
|
||||||
|
clientIPs[client],
|
||||||
|
ips,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@ import (
|
|||||||
"github.com/juanfont/headscale/integration/hsic"
|
"github.com/juanfont/headscale/integration/hsic"
|
||||||
"github.com/juanfont/headscale/integration/tsic"
|
"github.com/juanfont/headscale/integration/tsic"
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
|
"github.com/samber/lo"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestPingAllByIP(t *testing.T) {
|
func TestPingAllByIP(t *testing.T) {
|
||||||
@ -46,19 +47,11 @@ func TestPingAllByIP(t *testing.T) {
|
|||||||
t.Errorf("failed wait for tailscale clients to be in sync: %s", err)
|
t.Errorf("failed wait for tailscale clients to be in sync: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
success := 0
|
allAddrs := lo.Map(allIps, func(x netip.Addr, index int) string {
|
||||||
|
return x.String()
|
||||||
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++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
success := pingAllHelper(t, allClients, allAddrs)
|
||||||
t.Logf("%d successful pings out of %d", success, len(allClients)*len(allIps))
|
t.Logf("%d successful pings out of %d", success, len(allClients)*len(allIps))
|
||||||
|
|
||||||
err = scenario.Shutdown()
|
err = scenario.Shutdown()
|
||||||
@ -148,18 +141,11 @@ func TestAuthKeyLogoutAndRelogin(t *testing.T) {
|
|||||||
t.Errorf("failed to get clients: %s", err)
|
t.Errorf("failed to get clients: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
success := 0
|
allAddrs := lo.Map(allIps, func(x netip.Addr, index int) string {
|
||||||
for _, client := range allClients {
|
return x.String()
|
||||||
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++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
success := pingAllHelper(t, allClients, allAddrs)
|
||||||
t.Logf("%d successful pings out of %d", success, len(allClients)*len(allIps))
|
t.Logf("%d successful pings out of %d", success, len(allClients)*len(allIps))
|
||||||
|
|
||||||
for _, client := range allClients {
|
for _, client := range allClients {
|
||||||
@ -184,7 +170,12 @@ func TestAuthKeyLogoutAndRelogin(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !found {
|
if !found {
|
||||||
t.Errorf("IPs changed for client %s. Used to be %v now %v", client.Hostname(), clientIPs[client], ips)
|
t.Errorf(
|
||||||
|
"IPs changed for client %s. Used to be %v now %v",
|
||||||
|
client.Hostname(),
|
||||||
|
clientIPs[client],
|
||||||
|
ips,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -253,18 +244,11 @@ func TestEphemeral(t *testing.T) {
|
|||||||
t.Errorf("failed to get clients: %s", err)
|
t.Errorf("failed to get clients: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
success := 0
|
allAddrs := lo.Map(allIps, func(x netip.Addr, index int) string {
|
||||||
for _, client := range allClients {
|
return x.String()
|
||||||
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++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
success := pingAllHelper(t, allClients, allAddrs)
|
||||||
t.Logf("%d successful pings out of %d", success, len(allClients)*len(allIps))
|
t.Logf("%d successful pings out of %d", success, len(allClients)*len(allIps))
|
||||||
|
|
||||||
for _, client := range allClients {
|
for _, client := range allClients {
|
||||||
@ -335,18 +319,7 @@ func TestPingAllByHostname(t *testing.T) {
|
|||||||
t.Errorf("failed to get FQDNs: %s", err)
|
t.Errorf("failed to get FQDNs: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
success := 0
|
success := pingAllHelper(t, allClients, allHostnames)
|
||||||
|
|
||||||
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))
|
t.Logf("%d successful pings out of %d", success, len(allClients)*len(allClients))
|
||||||
|
|
||||||
@ -582,3 +555,21 @@ func TestResolveMagicDNS(t *testing.T) {
|
|||||||
t.Errorf("failed to tear down scenario: %s", err)
|
t.Errorf("failed to tear down scenario: %s", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func pingAllHelper(t *testing.T, clients []TailscaleClient, addrs []string) int {
|
||||||
|
t.Helper()
|
||||||
|
success := 0
|
||||||
|
|
||||||
|
for _, client := range clients {
|
||||||
|
for _, addr := range addrs {
|
||||||
|
err := client.Ping(addr)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("failed to ping %s from %s: %s", addr, client.Hostname(), err)
|
||||||
|
} else {
|
||||||
|
success++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return success
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user