diff --git a/net/netcheck/netcheck_test.go b/net/netcheck/netcheck_test.go index 94a5b369b..7041ba0e9 100644 --- a/net/netcheck/netcheck_test.go +++ b/net/netcheck/netcheck_test.go @@ -578,3 +578,39 @@ func TestLogConciseReport(t *testing.T) { }) } } + +func TestSortRegions(t *testing.T) { + unsortedMap := &tailcfg.DERPMap{ + Regions: map[int]*tailcfg.DERPRegion{}, + } + for rid := 1; rid <= 5; rid++ { + var nodes []*tailcfg.DERPNode + nodes = append(nodes, &tailcfg.DERPNode{ + Name: fmt.Sprintf("%da", rid), + RegionID: rid, + HostName: fmt.Sprintf("derp%d-1", rid), + IPv4: fmt.Sprintf("%d.0.0.1", rid), + IPv6: fmt.Sprintf("%d::1", rid), + }) + unsortedMap.Regions[rid] = &tailcfg.DERPRegion{ + RegionID: rid, + Nodes: nodes, + } + } + report := newReport() + report.RegionLatency[1] = time.Second * time.Duration(5) + report.RegionLatency[2] = time.Second * time.Duration(3) + report.RegionLatency[3] = time.Second * time.Duration(6) + report.RegionLatency[4] = time.Second * time.Duration(0) + report.RegionLatency[5] = time.Second * time.Duration(2) + got := sortRegions(unsortedMap, report) + + // Sorting by latency this should result in rid: 5, 2, 1, 3 + // rid 4 with latency 0 should be at the end + expected := []int{5, 2, 1, 3, 4} + for idx, want := range expected { + if got[idx].RegionID != want { + t.Errorf("idx:%v got:%v want:%v\n", idx, got[idx].RegionID, want) + } + } +}