mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-10-28 10:51:44 +01:00 
			
		
		
		
	Merge pull request #889 from kradalby/integration-v2-resolve-magicdns
This commit is contained in:
		
						commit
						a647e6af24
					
				
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							@ -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
 | 
			
		||||
 | 
			
		||||
@ -2,6 +2,7 @@ package integration
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"testing"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
@ -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)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -121,6 +121,10 @@ 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
 | 
			
		||||
		}
 | 
			
		||||
@ -128,10 +132,6 @@ func (t *TailscaleInContainer) Execute(
 | 
			
		||||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if stdout != "" {
 | 
			
		||||
		log.Printf("command stdout: %s\n", stdout)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return stdout, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user