diff --git a/integration/scenario.go b/integration/scenario.go index b1b0719b..2f00daf8 100644 --- a/integration/scenario.go +++ b/integration/scenario.go @@ -4,6 +4,7 @@ import ( "errors" "fmt" "log" + "net/netip" "os" "sync" @@ -210,3 +211,20 @@ func (s *Scenario) RunTailscaleUp( return fmt.Errorf("failed to up tailscale node: %w", errNoNamespaceAvailable) } + +func (s *Scenario) GetIPs(namespace string) ([]netip.Addr, error) { + var ips []netip.Addr + if ns, ok := s.namespaces[namespace]; ok { + for _, client := range ns.Clients { + clientIps, err := client.IPs() + if err != nil { + return ips, fmt.Errorf("failed to get ips: %w", err) + } + ips = append(ips, clientIps...) + } + + return ips, nil + } + + return ips, fmt.Errorf("failed to get ips: %w", errNoNamespaceAvailable) +} diff --git a/integration/tsic/tsic.go b/integration/tsic/tsic.go index 40a0e693..4bbba8e2 100644 --- a/integration/tsic/tsic.go +++ b/integration/tsic/tsic.go @@ -17,6 +17,7 @@ const tsicHashLength = 6 const dockerContextPath = "../." var errTailscalePingFailed = errors.New("ping failed") +var errTailscaleNotLoggedIn = errors.New("tailscale not logged in") type TailscaleInContainer struct { version string @@ -102,14 +103,17 @@ func (t *TailscaleInContainer) Up( log.Println("Join command:", command) log.Printf("Running join command for %s\n", t.Hostname) - _, _, err := dockertestutil.ExecuteCommand( + stdout, stderr, err := dockertestutil.ExecuteCommand( t.container, command, []string{}, ) if err != nil { + log.Printf("tailscale join stderr: %s\n", stderr) + return err } + log.Printf("tailscale join stdout: %s\n", stdout) log.Printf("%s joined\n", t.Hostname) return nil @@ -123,12 +127,18 @@ func (t *TailscaleInContainer) IPs() ([]netip.Addr, error) { "ip", } - result, _, err := dockertestutil.ExecuteCommand( + result, stderr, err := dockertestutil.ExecuteCommand( t.container, command, []string{}, ) if err != nil { + log.Printf("failed commands stderr: %s\n", stderr) + + if strings.Contains(stderr, "NeedsLogin") { + return []netip.Addr{}, errTailscaleNotLoggedIn + } + return []netip.Addr{}, err } @@ -165,7 +175,7 @@ func (t *TailscaleInContainer) Ping(ip netip.Addr) error { return err } - if !strings.Contains(result, "pong") { + if !strings.Contains(result, "pong") || !strings.Contains(result, "is local") { return errTailscalePingFailed }