mirror of
https://github.com/coder/coder.git
synced 2025-07-08 11:39:50 +00:00
fix: fix tailnet netcheck issues (#8802)
This commit is contained in:
@ -303,9 +303,21 @@ func NewOptions(t testing.TB, options *Options) (func(http.Handler), context.Can
|
||||
accessURL = serverURL
|
||||
}
|
||||
|
||||
stunAddr, stunCleanup := stuntest.ServeWithPacketListener(t, nettype.Std{})
|
||||
stunAddr.IP = net.ParseIP("127.0.0.1")
|
||||
t.Cleanup(stunCleanup)
|
||||
// If the STUNAddresses setting is empty or the default, start a STUN
|
||||
// server. Otherwise, use the value as is.
|
||||
var (
|
||||
stunAddresses []string
|
||||
dvStunAddresses = options.DeploymentValues.DERP.Server.STUNAddresses.Value()
|
||||
)
|
||||
if len(dvStunAddresses) == 0 || (len(dvStunAddresses) == 1 && dvStunAddresses[0] == "stun.l.google.com:19302") {
|
||||
stunAddr, stunCleanup := stuntest.ServeWithPacketListener(t, nettype.Std{})
|
||||
stunAddr.IP = net.ParseIP("127.0.0.1")
|
||||
t.Cleanup(stunCleanup)
|
||||
stunAddresses = []string{stunAddr.String()}
|
||||
options.DeploymentValues.DERP.Server.STUNAddresses = stunAddresses
|
||||
} else if dvStunAddresses[0] != "disable" {
|
||||
stunAddresses = options.DeploymentValues.DERP.Server.STUNAddresses.Value()
|
||||
}
|
||||
|
||||
derpServer := derp.NewServer(key.NewNode(), tailnet.Logger(slogtest.Make(t, nil).Named("derp").Leveled(slog.LevelDebug)))
|
||||
derpServer.SetMeshKey("test-key")
|
||||
@ -346,7 +358,7 @@ func NewOptions(t testing.TB, options *Options) (func(http.Handler), context.Can
|
||||
if !options.DeploymentValues.DERP.Server.Enable.Value() {
|
||||
region = nil
|
||||
}
|
||||
derpMap, err := tailnet.NewDERPMap(ctx, region, []string{stunAddr.String()}, "", "", options.DeploymentValues.DERP.Config.BlockDirect.Value())
|
||||
derpMap, err := tailnet.NewDERPMap(ctx, region, stunAddresses, "", "", options.DeploymentValues.DERP.Config.BlockDirect.Value())
|
||||
require.NoError(t, err)
|
||||
|
||||
return func(h http.Handler) {
|
||||
|
@ -172,7 +172,7 @@ func (r *DERPNodeReport) derpURL() *url.URL {
|
||||
if r.Node.HostName == "" {
|
||||
derpURL.Host = r.Node.IPv4
|
||||
}
|
||||
if r.Node.DERPPort != 0 {
|
||||
if r.Node.DERPPort != 0 && !(r.Node.DERPPort == 443 && derpURL.Scheme == "https") && !(r.Node.DERPPort == 80 && derpURL.Scheme == "http") {
|
||||
derpURL.Host = fmt.Sprintf("%s:%d", derpURL.Host, r.Node.DERPPort)
|
||||
}
|
||||
|
||||
|
@ -866,6 +866,7 @@ func (api *API) derpMapUpdates(rw http.ResponseWriter, r *http.Request) {
|
||||
lastDERPMap = derpMap
|
||||
}
|
||||
|
||||
ticker.Reset(api.Options.DERPMapUpdateFrequency)
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return
|
||||
@ -873,8 +874,6 @@ func (api *API) derpMapUpdates(rw http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
case <-ticker.C:
|
||||
}
|
||||
|
||||
ticker.Reset(api.Options.DERPMapUpdateFrequency)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1270,11 +1270,9 @@ func TestWorkspaceAgent_UpdatedDERP(t *testing.T) {
|
||||
defer closer.Close()
|
||||
user := coderdtest.CreateFirstUser(t, client)
|
||||
|
||||
originalDerpMap := api.DERPMap()
|
||||
require.NotNil(t, originalDerpMap)
|
||||
|
||||
// Change the DERP mapper to our custom one.
|
||||
var currentDerpMap atomic.Pointer[tailcfg.DERPMap]
|
||||
originalDerpMap, _ := tailnettest.RunDERPAndSTUN(t)
|
||||
currentDerpMap.Store(originalDerpMap)
|
||||
derpMapFn := func(_ *tailcfg.DERPMap) *tailcfg.DERPMap {
|
||||
return currentDerpMap.Load().Clone()
|
||||
@ -1304,10 +1302,8 @@ func TestWorkspaceAgent_UpdatedDERP(t *testing.T) {
|
||||
resources := coderdtest.AwaitWorkspaceAgents(t, client, workspace.ID)
|
||||
agentID := resources[0].Agents[0].ID
|
||||
|
||||
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
|
||||
defer cancel()
|
||||
|
||||
// Connect from a client.
|
||||
ctx := testutil.Context(t, testutil.WaitLong)
|
||||
conn1, err := client.DialWorkspaceAgent(ctx, agentID, &codersdk.DialWorkspaceAgentOptions{
|
||||
Logger: logger.Named("client1"),
|
||||
})
|
||||
@ -1328,7 +1324,14 @@ func TestWorkspaceAgent_UpdatedDERP(t *testing.T) {
|
||||
currentDerpMap.Store(newDerpMap)
|
||||
|
||||
// Wait for the agent's DERP map to be updated.
|
||||
// TODO: this
|
||||
require.Eventually(t, func() bool {
|
||||
conn := agentCloser.TailnetConn()
|
||||
if conn == nil {
|
||||
return false
|
||||
}
|
||||
regionIDs := conn.DERPMap().RegionIDs()
|
||||
return len(regionIDs) == 1 && regionIDs[0] == 2 && conn.Node().PreferredDERP == 2
|
||||
}, testutil.WaitLong, testutil.IntervalFast)
|
||||
|
||||
// Wait for the DERP map to be updated on the existing client.
|
||||
require.Eventually(t, func() bool {
|
||||
|
Reference in New Issue
Block a user