diff --git a/integration/derp_verify_endpoint_test.go b/integration/derp_verify_endpoint_test.go index 0297e280..912ad6cb 100644 --- a/integration/derp_verify_endpoint_test.go +++ b/integration/derp_verify_endpoint_test.go @@ -13,6 +13,7 @@ import ( "github.com/juanfont/headscale/integration/hsic" "github.com/juanfont/headscale/integration/integrationutil" "github.com/juanfont/headscale/integration/tsic" + "tailscale.com/tailcfg" ) func TestDERPVerifyEndpoint(t *testing.T) { @@ -44,25 +45,32 @@ func TestDERPVerifyEndpoint(t *testing.T) { ) assertNoErr(t, err) - derpConfig := "regions:\n" - derpConfig += " 900:\n" - derpConfig += " regionid: 900\n" - derpConfig += " regioncode: test-derpverify\n" - derpConfig += " regionname: TestDerpVerify\n" - derpConfig += " nodes:\n" - derpConfig += " - name: TestDerpVerify\n" - derpConfig += " regionid: 900\n" - derpConfig += " hostname: " + derper.GetHostname() + "\n" - derpConfig += " stunport: " + derper.GetSTUNPort() + "\n" - derpConfig += " stunonly: false\n" - derpConfig += " derpport: " + derper.GetDERPPort() + "\n" + derpMap := tailcfg.DERPMap{ + Regions: map[int]*tailcfg.DERPRegion{ + 900: { + RegionID: 900, + RegionCode: "test-derpverify", + RegionName: "TestDerpVerify", + Nodes: []*tailcfg.DERPNode{ + { + Name: "TestDerpVerify", + RegionID: 900, + HostName: derper.GetHostname(), + STUNPort: derper.GetSTUNPort(), + STUNOnly: false, + DERPPort: derper.GetDERPPort(), + }, + }, + }, + }, + } headscale, err := scenario.Headscale( hsic.WithHostname(hostname), hsic.WithPort(headscalePort), hsic.WithCustomTLS(certHeadscale, keyHeadscale), hsic.WithHostnameAsServerURL(), - hsic.WithCustomDERPServerOnly([]byte(derpConfig)), + hsic.WithDERPConfig(derpMap), ) assertNoErrHeadscaleEnv(t, err) diff --git a/integration/dsic/dsic.go b/integration/dsic/dsic.go index 59e9f9af..4ea659c9 100644 --- a/integration/dsic/dsic.go +++ b/integration/dsic/dsic.go @@ -267,18 +267,18 @@ func (t *DERPServerInContainer) GetHostname() string { } // GetSTUNPort returns the STUN port of the DERPer instance. -func (t *DERPServerInContainer) GetSTUNPort() string { - return strconv.Itoa(t.stunPort) +func (t *DERPServerInContainer) GetSTUNPort() int { + return t.stunPort } // GetDERPPort returns the DERP port of the DERPer instance. -func (t *DERPServerInContainer) GetDERPPort() string { - return strconv.Itoa(t.derpPort) +func (t *DERPServerInContainer) GetDERPPort() int { + return t.derpPort } // WaitForRunning blocks until the DERPer instance is ready to be used. func (t *DERPServerInContainer) WaitForRunning() error { - url := "https://" + net.JoinHostPort(t.GetHostname(), t.GetDERPPort()) + "/" + url := "https://" + net.JoinHostPort(t.GetHostname(), strconv.Itoa(t.GetDERPPort())) + "/" log.Printf("waiting for DERPer to be ready at %s", url) insecureTransport := http.DefaultTransport.(*http.Transport).Clone() //nolint diff --git a/integration/hsic/hsic.go b/integration/hsic/hsic.go index 97e86d1a..3b4d0905 100644 --- a/integration/hsic/hsic.go +++ b/integration/hsic/hsic.go @@ -25,6 +25,7 @@ import ( "github.com/juanfont/headscale/integration/integrationutil" "github.com/ory/dockertest/v3" "github.com/ory/dockertest/v3/docker" + "tailscale.com/tailcfg" ) const ( @@ -216,10 +217,17 @@ func WithEmbeddedDERPServerOnly() Option { } } -// WithCustomDERPServerOnly configures Headscale use a custom +// WithDERPConfig configures Headscale use a custom // DERP server only. -func WithCustomDERPServerOnly(contents []byte) Option { +func WithDERPConfig(derpMap tailcfg.DERPMap) Option { return func(hsic *HeadscaleInContainer) { + contents, err := json.Marshal(derpMap) + if err != nil { + log.Fatalf("failed to marshal DERP map: %s", err) + + return + } + hsic.env["HEADSCALE_DERP_PATHS"] = "/etc/headscale/derp.yml" hsic.filesInContainer = append(hsic.filesInContainer, fileInContainer{