Skip to content

Commit

Permalink
net/netcheck: deflake (maybe) magicsock's TestNewConn
Browse files Browse the repository at this point in the history
Updates #6207

Change-Id: I51d200d0b42b9a1ef799d0abfc8d4bd871c50cf2
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
(cherry picked from commit 036334e)
  • Loading branch information
bradfitz authored and DentonGentry committed Nov 18, 2022
1 parent 49ae82e commit 7045359
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 1 deletion.
9 changes: 9 additions & 0 deletions net/netcheck/netcheck.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import (
"net/netip"
"runtime"
"sort"
"strings"
"sync"
"time"

Expand Down Expand Up @@ -1112,6 +1113,14 @@ func (c *Client) checkCaptivePortal(ctx context.Context, dm *tailcfg.DERPMap, pr
}

node := dm.Regions[preferredDERP].Nodes[0]

if strings.HasSuffix(node.HostName, tailcfg.DotInvalid) {
// Don't try to connect to invalid hostnames. This occurred in tests:
// https://github.com/tailscale/tailscale/issues/6207
// TODO(bradfitz,andrew-d): how to actually handle this nicely?
return false, nil
}

req, err := http.NewRequestWithContext(ctx, "GET", "http://"+node.HostName+"/generate_204", nil)
if err != nil {
return false, err
Expand Down
2 changes: 1 addition & 1 deletion net/stun/stuntest/stuntest.go
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ func DERPMapOf(stun ...string) *tailcfg.DERPMap {
node := &tailcfg.DERPNode{
Name: fmt.Sprint(regionID) + "a",
RegionID: regionID,
HostName: fmt.Sprintf("d%d.invalid", regionID),
HostName: fmt.Sprintf("d%d%s", regionID, tailcfg.DotInvalid),
IPv4: ipv4,
IPv6: ipv6,
STUNPort: port,
Expand Down
3 changes: 3 additions & 0 deletions tailcfg/derpmap.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,3 +144,6 @@ type DERPNode struct {
// If empty, it's assumed to be the same as the DERP server.
STUNTestIP string `json:",omitempty"`
}

// DotInvalid is a fake DNS TLD used in tests for an invalid hostname.
const DotInvalid = ".invalid"

0 comments on commit 7045359

Please sign in to comment.