mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-10-28 10:51:44 +01:00 
			
		
		
		
	test embedded derp with derp updater, check client health (#2030)
This commit is contained in:
		
							parent
							
								
									948d53f934
								
							
						
					
					
						commit
						ece907d878
					
				| @ -125,10 +125,5 @@ func GetDERPMap(cfg types.DERPConfig) *tailcfg.DERPMap { | ||||
| 
 | ||||
| 	log.Trace().Interface("derpMap", derpMap).Msg("DERPMap loaded") | ||||
| 
 | ||||
| 	if len(derpMap.Regions) == 0 { | ||||
| 		log.Warn(). | ||||
| 			Msg("DERP map is empty, not a single DERP map datasource was loaded correctly or contained a region") | ||||
| 	} | ||||
| 
 | ||||
| 	return derpMap | ||||
| } | ||||
|  | ||||
| @ -4,7 +4,9 @@ import ( | ||||
| 	"fmt" | ||||
| 	"log" | ||||
| 	"net/url" | ||||
| 	"strings" | ||||
| 	"testing" | ||||
| 	"time" | ||||
| 
 | ||||
| 	"github.com/juanfont/headscale/hscontrol/util" | ||||
| 	"github.com/juanfont/headscale/integration/dockertestutil" | ||||
| @ -33,8 +35,7 @@ func TestDERPServerScenario(t *testing.T) { | ||||
| 	defer scenario.Shutdown() | ||||
| 
 | ||||
| 	spec := map[string]int{ | ||||
| 		"user1": 10, | ||||
| 		// "user1": len(MustTestVersions),
 | ||||
| 		"user1": len(MustTestVersions), | ||||
| 	} | ||||
| 
 | ||||
| 	err = scenario.CreateHeadscaleEnv( | ||||
| @ -44,24 +45,75 @@ func TestDERPServerScenario(t *testing.T) { | ||||
| 		hsic.WithEmbeddedDERPServerOnly(), | ||||
| 		hsic.WithTLS(), | ||||
| 		hsic.WithHostnameAsServerURL(), | ||||
| 		hsic.WithConfigEnv(map[string]string{ | ||||
| 			"HEADSCALE_DERP_AUTO_UPDATE_ENABLED": "true", | ||||
| 			"HEADSCALE_DERP_UPDATE_FREQUENCY":    "10s", | ||||
| 		}), | ||||
| 	) | ||||
| 	assertNoErrHeadscaleEnv(t, err) | ||||
| 
 | ||||
| 	allClients, err := scenario.ListTailscaleClients() | ||||
| 	assertNoErrListClients(t, err) | ||||
| 
 | ||||
| 	allIps, err := scenario.ListTailscaleClientsIPs() | ||||
| 	assertNoErrListClientIPs(t, err) | ||||
| 
 | ||||
| 	err = scenario.WaitForTailscaleSync() | ||||
| 	assertNoErrSync(t, err) | ||||
| 
 | ||||
| 	allHostnames, err := scenario.ListTailscaleClientsFQDNs() | ||||
| 	assertNoErrListFQDN(t, err) | ||||
| 
 | ||||
| 	for _, client := range allClients { | ||||
| 		status, err := client.Status() | ||||
| 		assertNoErr(t, err) | ||||
| 
 | ||||
| 		for _, health := range status.Health { | ||||
| 			if strings.Contains(health, "could not connect to any relay server") { | ||||
| 				t.Errorf("expected to be connected to derp, found: %s", health) | ||||
| 			} | ||||
| 			if strings.Contains(health, "could not connect to the 'Headscale Embedded DERP' relay server.") { | ||||
| 				t.Errorf("expected to be connected to derp, found: %s", health) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	success := pingDerpAllHelper(t, allClients, allHostnames) | ||||
| 
 | ||||
| 	t.Logf("%d successful pings out of %d", success, len(allClients)*len(allIps)) | ||||
| 	for _, client := range allClients { | ||||
| 		status, err := client.Status() | ||||
| 		assertNoErr(t, err) | ||||
| 
 | ||||
| 		for _, health := range status.Health { | ||||
| 			if strings.Contains(health, "could not connect to any relay server") { | ||||
| 				t.Errorf("expected to be connected to derp, found: %s", health) | ||||
| 			} | ||||
| 			if strings.Contains(health, "could not connect to the 'Headscale Embedded DERP' relay server.") { | ||||
| 				t.Errorf("expected to be connected to derp, found: %s", health) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	t.Logf("Run 1: %d successful pings out of %d", success, len(allClients)*len(allHostnames)) | ||||
| 
 | ||||
| 	// Let the DERP updater run a couple of times to ensure it does not
 | ||||
| 	// break the DERPMap.
 | ||||
| 	time.Sleep(30 * time.Second) | ||||
| 
 | ||||
| 	success = pingDerpAllHelper(t, allClients, allHostnames) | ||||
| 
 | ||||
| 	for _, client := range allClients { | ||||
| 		status, err := client.Status() | ||||
| 		assertNoErr(t, err) | ||||
| 
 | ||||
| 		for _, health := range status.Health { | ||||
| 			if strings.Contains(health, "could not connect to any relay server") { | ||||
| 				t.Errorf("expected to be connected to derp, found: %s", health) | ||||
| 			} | ||||
| 			if strings.Contains(health, "could not connect to the 'Headscale Embedded DERP' relay server.") { | ||||
| 				t.Errorf("expected to be connected to derp, found: %s", health) | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	t.Logf("Run2: %d successful pings out of %d", success, len(allClients)*len(allHostnames)) | ||||
| } | ||||
| 
 | ||||
| func (s *EmbeddedDERPServerScenario) CreateHeadscaleEnv( | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user