mirror of
https://github.com/juanfont/headscale.git
synced 2024-12-02 03:33:05 +00:00
Merge pull request #889 from kradalby/integration-v2-resolve-magicdns
This commit is contained in:
commit
a647e6af24
3 changed files with 88 additions and 6 deletions
2
Makefile
2
Makefile
|
@ -74,7 +74,7 @@ test_integration_v2_general:
|
||||||
-v $$PWD:$$PWD -w $$PWD/integration \
|
-v $$PWD:$$PWD -w $$PWD/integration \
|
||||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||||
golang:1 \
|
golang:1 \
|
||||||
go test ./... -timeout 30m
|
go test ./... -timeout 60m
|
||||||
|
|
||||||
coverprofile_func:
|
coverprofile_func:
|
||||||
go tool cover -func=coverage.out
|
go tool cover -func=coverage.out
|
||||||
|
|
|
@ -2,6 +2,7 @@ package integration
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -255,3 +256,85 @@ func TestTaildrop(t *testing.T) {
|
||||||
t.Errorf("failed to tear down scenario: %s", err)
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -121,6 +121,10 @@ func (t *TailscaleInContainer) Execute(
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("command stderr: %s\n", stderr)
|
log.Printf("command stderr: %s\n", stderr)
|
||||||
|
|
||||||
|
if stdout != "" {
|
||||||
|
log.Printf("command stdout: %s\n", stdout)
|
||||||
|
}
|
||||||
|
|
||||||
if strings.Contains(stderr, "NeedsLogin") {
|
if strings.Contains(stderr, "NeedsLogin") {
|
||||||
return "", errTailscaleNotLoggedIn
|
return "", errTailscaleNotLoggedIn
|
||||||
}
|
}
|
||||||
|
@ -128,10 +132,6 @@ func (t *TailscaleInContainer) Execute(
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
if stdout != "" {
|
|
||||||
log.Printf("command stdout: %s\n", stdout)
|
|
||||||
}
|
|
||||||
|
|
||||||
return stdout, nil
|
return stdout, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -156,7 +156,6 @@ func (t *TailscaleInContainer) Up(
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(kradalby): Make cached/lazy.
|
|
||||||
func (t *TailscaleInContainer) IPs() ([]netip.Addr, error) {
|
func (t *TailscaleInContainer) IPs() ([]netip.Addr, error) {
|
||||||
if t.ips != nil && len(t.ips) != 0 {
|
if t.ips != nil && len(t.ips) != 0 {
|
||||||
return t.ips, nil
|
return t.ips, nil
|
||||||
|
|
Loading…
Reference in a new issue