Skip to content

Commit

Permalink
Merge pull request #889 from kradalby/integration-v2-resolve-magicdns
Browse files Browse the repository at this point in the history
  • Loading branch information
kradalby authored Oct 25, 2022
2 parents 5c9c4f2 + fe4e05b commit a647e6a
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 6 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ test_integration_v2_general:
-v $$PWD:$$PWD -w $$PWD/integration \
-v /var/run/docker.sock:/var/run/docker.sock \
golang:1 \
go test ./... -timeout 30m
go test ./... -timeout 60m

coverprofile_func:
go tool cover -func=coverage.out
Expand Down
83 changes: 83 additions & 0 deletions integration/general_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package integration

import (
"fmt"
"strings"
"testing"
"time"

Expand Down Expand Up @@ -255,3 +256,85 @@ func TestTaildrop(t *testing.T) {
t.Errorf("failed to tear down scenario: %s", err)
}
}

func TestResolveMagicDNS(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
"magicdns1": len(TailscaleVersions) - 1,
"magicdns2": 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)
}

// Poor mans cache
_, err = scenario.ListTailscaleClientsFQDNs()
if err != nil {
t.Errorf("failed to get FQDNs: %s", err)
}

_, err = scenario.ListTailscaleClientsIPs()
if err != nil {
t.Errorf("failed to get IPs: %s", err)
}

for _, client := range allClients {
for _, peer := range allClients {
// It is safe to ignore this error as we handled it when caching it
peerFQDN, _ := peer.FQDN()

command := []string{
"tailscale",
"ip", peerFQDN,
}
result, err := client.Execute(command)
if err != nil {
t.Errorf(
"failed to execute resolve/ip command %s from %s: %s",
peerFQDN,
client.Hostname(),
err,
)
}

ips, err := peer.IPs()
if err != nil {
t.Errorf(
"failed to get ips for %s: %s",
peer.Hostname(),
err,
)
}

for _, ip := range ips {
if !strings.Contains(result, ip.String()) {
t.Errorf("ip %s is not found in \n%s\n", ip.String(), result)
}
}
}
}

err = scenario.Shutdown()
if err != nil {
t.Errorf("failed to tear down scenario: %s", err)
}
}
9 changes: 4 additions & 5 deletions integration/tsic/tsic.go
Original file line number Diff line number Diff line change
Expand Up @@ -121,17 +121,17 @@ func (t *TailscaleInContainer) Execute(
if err != nil {
log.Printf("command stderr: %s\n", stderr)

if stdout != "" {
log.Printf("command stdout: %s\n", stdout)
}

if strings.Contains(stderr, "NeedsLogin") {
return "", errTailscaleNotLoggedIn
}

return "", err
}

if stdout != "" {
log.Printf("command stdout: %s\n", stdout)
}

return stdout, nil
}

Expand All @@ -156,7 +156,6 @@ func (t *TailscaleInContainer) Up(
return nil
}

// TODO(kradalby): Make cached/lazy.
func (t *TailscaleInContainer) IPs() ([]netip.Addr, error) {
if t.ips != nil && len(t.ips) != 0 {
return t.ips, nil
Expand Down

0 comments on commit a647e6a

Please sign in to comment.