diff --git a/client/web/auth.go b/client/web/auth.go
index c95cba1e9..8b195a417 100644
--- a/client/web/auth.go
+++ b/client/web/auth.go
@@ -223,7 +223,7 @@ func (s *Server) awaitUserAuth(ctx context.Context, session *browserSession) err
func (s *Server) newSessionID() (string, error) {
raw := make([]byte, 16)
- for i := 0; i < 5; i++ {
+ for range 5 {
if _, err := rand.Read(raw); err != nil {
return "", err
}
diff --git a/clientupdate/clientupdate.go b/clientupdate/clientupdate.go
index 2a08d6638..3a24110b9 100644
--- a/clientupdate/clientupdate.go
+++ b/clientupdate/clientupdate.go
@@ -436,7 +436,7 @@ func (up *Updater) updateDebLike() error {
return fmt.Errorf("apt-get update failed: %w; output:\n%s", err, out)
}
- for i := 0; i < 2; i++ {
+ for range 2 {
out, err := exec.Command("apt-get", "install", "--yes", "--allow-downgrades", "tailscale="+ver).CombinedOutput()
if err != nil {
if !bytes.Contains(out, []byte(`dpkg was interrupted`)) {
diff --git a/clientupdate/clientupdate_test.go b/clientupdate/clientupdate_test.go
index eaad1206e..dc8f66fd6 100644
--- a/clientupdate/clientupdate_test.go
+++ b/clientupdate/clientupdate_test.go
@@ -663,7 +663,7 @@ func genTarball(t *testing.T, path string, files map[string]string) {
func TestWriteFileOverwrite(t *testing.T) {
path := filepath.Join(t.TempDir(), "test")
- for i := 0; i < 2; i++ {
+ for i := range 2 {
content := fmt.Sprintf("content %d", i)
if err := writeFile(strings.NewReader(content), path, 0600); err != nil {
t.Fatal(err)
diff --git a/clientupdate/distsign/distsign_test.go b/clientupdate/distsign/distsign_test.go
index a74c14fd4..09a701f49 100644
--- a/clientupdate/distsign/distsign_test.go
+++ b/clientupdate/distsign/distsign_test.go
@@ -445,7 +445,7 @@ type testServer struct {
func newTestServer(t *testing.T) *testServer {
var roots []rootKeyPair
- for i := 0; i < 3; i++ {
+ for range 3 {
roots = append(roots, newRootKeyPair(t))
}
diff --git a/cmd/cloner/cloner.go b/cmd/cloner/cloner.go
index 8e2944115..937fd9059 100644
--- a/cmd/cloner/cloner.go
+++ b/cmd/cloner/cloner.go
@@ -102,7 +102,7 @@ func gen(buf *bytes.Buffer, it *codegen.ImportTracker, typ *types.Named) {
writef("}")
writef("dst := new(%s)", name)
writef("*dst = *src")
- for i := 0; i < t.NumFields(); i++ {
+ for i := range t.NumFields() {
fname := t.Field(i).Name()
ft := t.Field(i).Type()
if !codegen.ContainsPointers(ft) || codegen.HasNoClone(t.Tag(i)) {
diff --git a/cmd/k8s-operator/testutils_test.go b/cmd/k8s-operator/testutils_test.go
index c9377cfad..a4a6a7ffd 100644
--- a/cmd/k8s-operator/testutils_test.go
+++ b/cmd/k8s-operator/testutils_test.go
@@ -522,7 +522,7 @@ func expectEvents(t *testing.T, rec *record.FakeRecorder, wantsEvents []string)
t.Helper()
// Events are not expected to arrive in order.
seenEvents := make([]string, 0)
- for i := 0; i < len(wantsEvents); i++ {
+ for range len(wantsEvents) {
timer := time.NewTimer(time.Second * 5)
defer timer.Stop()
select {
diff --git a/cmd/netlogfmt/main.go b/cmd/netlogfmt/main.go
index 19db2797a..65e87098f 100644
--- a/cmd/netlogfmt/main.go
+++ b/cmd/netlogfmt/main.go
@@ -314,7 +314,7 @@ func mustMakeNamesByAddr() map[netip.Addr]string {
seen := make(map[string]bool)
namesByAddr := make(map[netip.Addr]string)
retry:
- for i := 0; i < 10; i++ {
+ for i := range 10 {
clear(seen)
clear(namesByAddr)
for _, d := range m.Devices {
@@ -354,7 +354,7 @@ func fieldPrefix(s string, n int) string {
}
func appendRepeatByte(b []byte, c byte, n int) []byte {
- for i := 0; i < n; i++ {
+ for range n {
b = append(b, c)
}
return b
diff --git a/cmd/proxy-to-grafana/proxy-to-grafana.go b/cmd/proxy-to-grafana/proxy-to-grafana.go
index b5b67ee80..35bebdbad 100644
--- a/cmd/proxy-to-grafana/proxy-to-grafana.go
+++ b/cmd/proxy-to-grafana/proxy-to-grafana.go
@@ -88,7 +88,7 @@ func main() {
go func() {
// wait for tailscale to start before trying to fetch cert names
- for i := 0; i < 60; i++ {
+ for range 60 {
st, err := localClient.Status(context.Background())
if err != nil {
log.Printf("error retrieving tailscale status; retrying: %v", err)
diff --git a/cmd/sniproxy/sniproxy_test.go b/cmd/sniproxy/sniproxy_test.go
index 1e9396cf1..324445ba4 100644
--- a/cmd/sniproxy/sniproxy_test.go
+++ b/cmd/sniproxy/sniproxy_test.go
@@ -158,7 +158,7 @@ func TestSNIProxyWithNetmapConfig(t *testing.T) {
t.Fatal(err)
}
gotConfigured := false
- for i := 0; i < 100; i++ {
+ for range 100 {
s, err := l.StatusWithoutPeers(ctx)
if err != nil {
t.Fatal(err)
diff --git a/cmd/tailscale/cli/cli_test.go b/cmd/tailscale/cli/cli_test.go
index 5b438ec9c..52966a4bd 100644
--- a/cmd/tailscale/cli/cli_test.go
+++ b/cmd/tailscale/cli/cli_test.go
@@ -831,7 +831,7 @@ func TestPrefFlagMapping(t *testing.T) {
}
prefType := reflect.TypeFor[ipn.Prefs]()
- for i := 0; i < prefType.NumField(); i++ {
+ for i := range prefType.NumField() {
prefName := prefType.Field(i).Name
if prefHasFlag[prefName] {
continue
diff --git a/cmd/tailscale/cli/network-lock.go b/cmd/tailscale/cli/network-lock.go
index 09f87f1d4..ff256992a 100644
--- a/cmd/tailscale/cli/network-lock.go
+++ b/cmd/tailscale/cli/network-lock.go
@@ -148,7 +148,7 @@ func runNetworkLockInit(ctx context.Context, args []string) error {
}
fmt.Printf("%d disablement secrets have been generated and are printed below. Take note of them now, they WILL NOT be shown again.\n", nlInitArgs.numDisablements)
- for i := 0; i < nlInitArgs.numDisablements; i++ {
+ for range nlInitArgs.numDisablements {
var secret [32]byte
if _, err := rand.Read(secret[:]); err != nil {
return err
diff --git a/cmd/tailscale/cli/serve_legacy.go b/cmd/tailscale/cli/serve_legacy.go
index 285bb932e..443a404ab 100644
--- a/cmd/tailscale/cli/serve_legacy.go
+++ b/cmd/tailscale/cli/serve_legacy.go
@@ -387,7 +387,7 @@ func isProxyTarget(source string) bool {
// allNumeric reports whether s only comprises of digits
// and has at least one digit.
func allNumeric(s string) bool {
- for i := 0; i < len(s); i++ {
+ for i := range len(s) {
if s[i] < '0' || s[i] > '9' {
return false
}
diff --git a/cmd/testcontrol/testcontrol.go b/cmd/testcontrol/testcontrol.go
index 54e21735b..b05b3128d 100644
--- a/cmd/testcontrol/testcontrol.go
+++ b/cmd/testcontrol/testcontrol.go
@@ -29,7 +29,7 @@ func main() {
DERPMap: derpMap,
ExplicitBaseURL: "http://127.0.0.1:9911",
}
- for i := 0; i < *flagNFake; i++ {
+ for range *flagNFake {
control.AddFakeNode()
}
mux := http.NewServeMux()
diff --git a/cmd/viewer/viewer.go b/cmd/viewer/viewer.go
index 88aab997f..a83499a69 100644
--- a/cmd/viewer/viewer.go
+++ b/cmd/viewer/viewer.go
@@ -149,7 +149,7 @@ func genView(buf *bytes.Buffer, it *codegen.ImportTracker, typ *types.Named, thi
}
}
writeTemplate("common")
- for i := 0; i < t.NumFields(); i++ {
+ for i := range t.NumFields() {
f := t.Field(i)
fname := f.Name()
if !f.Exported() {
@@ -292,7 +292,7 @@ func genView(buf *bytes.Buffer, it *codegen.ImportTracker, typ *types.Named, thi
}
writeTemplate("unsupportedField")
}
- for i := 0; i < typ.NumMethods(); i++ {
+ for i := range typ.NumMethods() {
f := typ.Method(i)
if !f.Exported() {
continue
diff --git a/control/controlbase/conn_test.go b/control/controlbase/conn_test.go
index 504d1dbf5..8a0f46967 100644
--- a/control/controlbase/conn_test.go
+++ b/control/controlbase/conn_test.go
@@ -91,7 +91,7 @@ func TestFastPath(t *testing.T) {
const packets = 10
s := "test"
- for i := 0; i < packets; i++ {
+ for range packets {
// Many separate writes, to force separate Noise frames that
// all get buffered up and then all sent as a single slice to
// the server.
@@ -251,7 +251,7 @@ func TestConnMemoryOverhead(t *testing.T) {
}
defer closeAll()
- for i := 0; i < num; i++ {
+ for range num {
client, server := pair(t)
closers = append(closers, client, server)
go func() {
diff --git a/control/controlbase/handshake_test.go b/control/controlbase/handshake_test.go
index e4400c95d..242b1f4d7 100644
--- a/control/controlbase/handshake_test.go
+++ b/control/controlbase/handshake_test.go
@@ -64,7 +64,7 @@ func TestNoReuse(t *testing.T) {
serverHandshakes = map[[48]byte]bool{}
packets = map[[32]byte]bool{}
)
- for i := 0; i < 10; i++ {
+ for range 10 {
var (
clientRaw, serverRaw = memnet.NewConn("noise", 128000)
clientBuf, serverBuf bytes.Buffer
@@ -162,7 +162,7 @@ func (r *tamperReader) Read(bs []byte) (int, error) {
func TestTampering(t *testing.T) {
// Tamper with every byte of the client initiation message.
- for i := 0; i < 101; i++ {
+ for i := range 101 {
var (
clientConn, serverRaw = memnet.NewConn("noise", 128000)
serverConn = &readerConn{serverRaw, &tamperReader{serverRaw, i, 0}}
@@ -190,7 +190,7 @@ func TestTampering(t *testing.T) {
}
// Tamper with every byte of the server response message.
- for i := 0; i < 51; i++ {
+ for i := range 51 {
var (
clientRaw, serverConn = memnet.NewConn("noise", 128000)
clientConn = &readerConn{clientRaw, &tamperReader{clientRaw, i, 0}}
@@ -215,7 +215,7 @@ func TestTampering(t *testing.T) {
}
// Tamper with every byte of the first server>client transport message.
- for i := 0; i < 30; i++ {
+ for i := range 30 {
var (
clientRaw, serverConn = memnet.NewConn("noise", 128000)
clientConn = &readerConn{clientRaw, &tamperReader{clientRaw, 51 + i, 0}}
@@ -256,7 +256,7 @@ func TestTampering(t *testing.T) {
}
// Tamper with every byte of the first client>server transport message.
- for i := 0; i < 30; i++ {
+ for i := range 30 {
var (
clientConn, serverRaw = memnet.NewConn("noise", 128000)
serverConn = &readerConn{serverRaw, &tamperReader{serverRaw, 101 + i, 0}}
diff --git a/control/controlclient/controlclient_test.go b/control/controlclient/controlclient_test.go
index c608ef6cc..b37623451 100644
--- a/control/controlclient/controlclient_test.go
+++ b/control/controlclient/controlclient_test.go
@@ -9,7 +9,7 @@ import (
)
func fieldsOf(t reflect.Type) (fields []string) {
- for i := 0; i < t.NumField(); i++ {
+ for i := range t.NumField() {
if name := t.Field(i).Name; name != "_" {
fields = append(fields, name)
}
diff --git a/control/controlclient/map.go b/control/controlclient/map.go
index 4f19e9753..2468226d1 100644
--- a/control/controlclient/map.go
+++ b/control/controlclient/map.go
@@ -563,7 +563,7 @@ var nodeFields = sync.OnceValue(getNodeFields)
func getNodeFields() []string {
rt := reflect.TypeFor[tailcfg.Node]()
ret := make([]string, rt.NumField())
- for i := 0; i < rt.NumField(); i++ {
+ for i := range rt.NumField() {
ret[i] = rt.Field(i).Name
}
return ret
diff --git a/control/controlclient/map_test.go b/control/controlclient/map_test.go
index 4a9002e17..897036a94 100644
--- a/control/controlclient/map_test.go
+++ b/control/controlclient/map_test.go
@@ -1019,7 +1019,7 @@ func BenchmarkMapSessionDelta(b *testing.B) {
Name: "foo.bar.ts.net.",
},
}
- for i := 0; i < size; i++ {
+ for i := range size {
res.Peers = append(res.Peers, &tailcfg.Node{
ID: tailcfg.NodeID(i + 2),
Name: fmt.Sprintf("peer%d.bar.ts.net.", i),
@@ -1046,7 +1046,7 @@ func BenchmarkMapSessionDelta(b *testing.B) {
// Now for the core of the benchmark loop, just toggle
// a single node's online status.
- for i := 0; i < b.N; i++ {
+ for i := range b.N {
if err := ms.HandleNonKeepAliveMapResponse(ctx, &tailcfg.MapResponse{
OnlineChange: map[tailcfg.NodeID]bool{
2: i%2 == 0,
diff --git a/control/controlhttp/http_test.go b/control/controlhttp/http_test.go
index 00433d1be..879305ead 100644
--- a/control/controlhttp/http_test.go
+++ b/control/controlhttp/http_test.go
@@ -729,7 +729,7 @@ func (d *closeTrackDialer) Done() {
// Sleep/wait a few times on the assumption that things will close
// "eventually".
const iters = 100
- for i := 0; i < iters; i++ {
+ for i := range iters {
d.mu.Lock()
if len(d.conns) == 0 {
d.mu.Unlock()
diff --git a/derp/derp_test.go b/derp/derp_test.go
index c66d40142..50d248e0d 100644
--- a/derp/derp_test.go
+++ b/derp/derp_test.go
@@ -56,7 +56,7 @@ func TestSendRecv(t *testing.T) {
const numClients = 3
var clientPrivateKeys []key.NodePrivate
var clientKeys []key.NodePublic
- for i := 0; i < numClients; i++ {
+ for range numClients {
priv := key.NewNode()
clientPrivateKeys = append(clientPrivateKeys, priv)
clientKeys = append(clientKeys, priv.Public())
@@ -73,7 +73,7 @@ func TestSendRecv(t *testing.T) {
var recvChs []chan []byte
errCh := make(chan error, 3)
- for i := 0; i < numClients; i++ {
+ for i := range numClients {
t.Logf("Connecting client %d ...", i)
cout, err := net.Dial("tcp", ln.Addr().String())
if err != nil {
@@ -111,7 +111,7 @@ func TestSendRecv(t *testing.T) {
var peerGoneCountNotHere expvar.Int
t.Logf("Starting read loops")
- for i := 0; i < numClients; i++ {
+ for i := range numClients {
go func(i int) {
for {
m, err := clients[i].Recv()
@@ -233,7 +233,7 @@ func TestSendRecv(t *testing.T) {
wantUnknownPeers(1)
// PeerGoneNotHere is rate-limited to 3 times a second
- for i := 0; i < 5; i++ {
+ for range 5 {
if err := clients[1].Send(neKey, callMe); err != nil {
t.Fatal(err)
}
@@ -389,7 +389,7 @@ func TestSendFreeze(t *testing.T) {
// if any tokens remain in the channel, they
// must have been generated after drainAny was
// called.
- for i := 0; i < cap(ch); i++ {
+ for range cap(ch) {
select {
case <-ch:
default:
@@ -456,7 +456,7 @@ func TestSendFreeze(t *testing.T) {
aliceConn.Close()
cathyConn.Close()
- for i := 0; i < cap(errCh); i++ {
+ for range cap(errCh) {
err := <-errCh
if err != nil {
if errors.Is(err, io.EOF) || errors.Is(err, net.ErrClosed) {
@@ -891,7 +891,7 @@ func TestMultiForwarder(t *testing.T) {
// run long enough concurrently with {Add,Remove}PacketForwarder loop above.
numMsgs := 5000
var fwd PacketForwarder
- for i := 0; i < numMsgs; i++ {
+ for i := range numMsgs {
s.mu.Lock()
fwd = s.clientsMesh[u]
s.mu.Unlock()
@@ -1288,7 +1288,7 @@ func TestServerDupClients(t *testing.T) {
func TestLimiter(t *testing.T) {
rl := rate.NewLimiter(rate.Every(time.Minute), 100)
- for i := 0; i < 200; i++ {
+ for i := range 200 {
r := rl.Reserve()
d := r.Delay()
t.Logf("i=%d, allow=%v, d=%v", i, r.OK(), d)
@@ -1352,7 +1352,7 @@ func benchmarkSendRecvSize(b *testing.B, packetSize int) {
b.SetBytes(int64(len(msg)))
b.ReportAllocs()
b.ResetTimer()
- for i := 0; i < b.N; i++ {
+ for range b.N {
if err := client.Send(clientKey, msg); err != nil {
b.Fatal(err)
}
@@ -1363,7 +1363,7 @@ func BenchmarkWriteUint32(b *testing.B) {
w := bufio.NewWriter(io.Discard)
b.ReportAllocs()
b.ResetTimer()
- for i := 0; i < b.N; i++ {
+ for range b.N {
writeUint32(w, 0x0ba3a)
}
}
@@ -1381,7 +1381,7 @@ func BenchmarkReadUint32(b *testing.B) {
var err error
b.ReportAllocs()
b.ResetTimer()
- for i := 0; i < b.N; i++ {
+ for range b.N {
sinkU32, err = readUint32(r)
if err != nil {
b.Fatal(err)
@@ -1454,7 +1454,7 @@ func TestClientSendRateLimiting(t *testing.T) {
// Flood should all succeed.
cw.ResetStats()
- for i := 0; i < 1000; i++ {
+ for range 1000 {
if err := c.send(key.NodePublic{}, pkt); err != nil {
t.Fatal(err)
}
@@ -1473,7 +1473,7 @@ func TestClientSendRateLimiting(t *testing.T) {
TokenBucketBytesPerSecond: 1,
TokenBucketBytesBurst: int(bytes1 * 2),
})
- for i := 0; i < 1000; i++ {
+ for range 1000 {
if err := c.send(key.NodePublic{}, pkt); err != nil {
t.Fatal(err)
}
diff --git a/derp/derphttp/derphttp_test.go b/derp/derphttp/derphttp_test.go
index dc5acf49f..8f2b5ee92 100644
--- a/derp/derphttp/derphttp_test.go
+++ b/derp/derphttp/derphttp_test.go
@@ -25,7 +25,7 @@ func TestSendRecv(t *testing.T) {
const numClients = 3
var clientPrivateKeys []key.NodePrivate
var clientKeys []key.NodePublic
- for i := 0; i < numClients; i++ {
+ for range numClients {
priv := key.NewNode()
clientPrivateKeys = append(clientPrivateKeys, priv)
clientKeys = append(clientKeys, priv.Public())
@@ -66,7 +66,7 @@ func TestSendRecv(t *testing.T) {
}
wg.Wait()
}()
- for i := 0; i < numClients; i++ {
+ for i := range numClients {
key := clientPrivateKeys[i]
c, err := NewClient(key, serverURL, t.Logf)
if err != nil {
@@ -311,7 +311,7 @@ func TestBreakWatcherConnRecv(t *testing.T) {
// Wait for the watcher to run, then break the connection and check if it
// reconnected and received peer updates.
- for i := 0; i < 10; i++ {
+ for range 10 {
select {
case peers := <-watcherChan:
if peers != 1 {
@@ -384,7 +384,7 @@ func TestBreakWatcherConn(t *testing.T) {
// Wait for the watcher to run, then break the connection and check if it
// reconnected and received peer updates.
- for i := 0; i < 10; i++ {
+ for range 10 {
select {
case peers := <-watcherChan:
if peers != 1 {
diff --git a/health/health_test.go b/health/health_test.go
index 78d1422a2..552cec495 100644
--- a/health/health_test.go
+++ b/health/health_test.go
@@ -15,7 +15,7 @@ import (
func TestAppendWarnableDebugFlags(t *testing.T) {
resetWarnables()
- for i := 0; i < 10; i++ {
+ for i := range 10 {
w := NewWarnable(WithMapDebugFlag(fmt.Sprint(i)))
if i%2 == 0 {
w.Set(errors.New("boom"))
@@ -25,7 +25,7 @@ func TestAppendWarnableDebugFlags(t *testing.T) {
want := []string{"z", "y", "0", "2", "4", "6", "8"}
var got []string
- for i := 0; i < 20; i++ {
+ for range 20 {
got = append(got[:0], "z", "y")
got = AppendWarnableDebugFlags(got)
if !reflect.DeepEqual(got, want) {
diff --git a/ipn/ipnlocal/drive.go b/ipn/ipnlocal/drive.go
index ef2e6a7cc..419058643 100644
--- a/ipn/ipnlocal/drive.go
+++ b/ipn/ipnlocal/drive.go
@@ -93,7 +93,7 @@ func (b *LocalBackend) driveSetShareLocked(share *drive.Share) (views.SliceView[
addedShare := false
var shares []*drive.Share
- for i := 0; i < existingShares.Len(); i++ {
+ for i := range existingShares.Len() {
existing := existingShares.At(i)
if existing.Name() != share.Name {
if !addedShare && existing.Name() > share.Name {
@@ -152,7 +152,7 @@ func (b *LocalBackend) driveRenameShareLocked(oldName, newName string) (views.Sl
found := false
var shares []*drive.Share
- for i := 0; i < existingShares.Len(); i++ {
+ for i := range existingShares.Len() {
existing := existingShares.At(i)
if existing.Name() == newName {
return existingShares, os.ErrExist
@@ -213,7 +213,7 @@ func (b *LocalBackend) driveRemoveShareLocked(name string) (views.SliceView[*dri
found := false
var shares []*drive.Share
- for i := 0; i < existingShares.Len(); i++ {
+ for i := range existingShares.Len() {
existing := existingShares.At(i)
if existing.Name() != name {
shares = append(shares, existing.AsStruct())
@@ -281,7 +281,7 @@ func driveShareViewsEqual(a *views.SliceView[*drive.Share, drive.ShareView], b v
return false
}
- for i := 0; i < a.Len(); i++ {
+ for i := range a.Len() {
if !drive.ShareViewsEqual(a.At(i), b.At(i)) {
return false
}
diff --git a/ipn/ipnlocal/local.go b/ipn/ipnlocal/local.go
index 5a40c515c..4908b363e 100644
--- a/ipn/ipnlocal/local.go
+++ b/ipn/ipnlocal/local.go
@@ -446,7 +446,7 @@ func NewLocalBackend(logf logger.Logf, logID logid.PublicID, sys *tsd.System, lo
currentShares := b.pm.prefs.DriveShares()
if currentShares.Len() > 0 {
var shares []*drive.Share
- for i := 0; i < currentShares.Len(); i++ {
+ for i := range currentShares.Len() {
shares = append(shares, currentShares.At(i).AsStruct())
}
fs.SetShares(shares)
@@ -1855,7 +1855,7 @@ func (b *LocalBackend) updateFilterLocked(netMap *netmap.NetworkMap, prefs ipn.P
}
if prefs.Valid() {
ar := prefs.AdvertiseRoutes()
- for i := 0; i < ar.Len(); i++ {
+ for i := range ar.Len() {
r := ar.At(i)
if r.Bits() == 0 {
// When offering a default route to the world, we
@@ -5418,7 +5418,7 @@ func (b *LocalBackend) OfferingExitNode() bool {
}
var def4, def6 bool
ar := b.pm.CurrentPrefs().AdvertiseRoutes()
- for i := 0; i < ar.Len(); i++ {
+ for i := range ar.Len() {
r := ar.At(i)
if r.Bits() != 0 {
continue
diff --git a/ipn/ipnlocal/local_test.go b/ipn/ipnlocal/local_test.go
index 1e96a743f..65fd981a9 100644
--- a/ipn/ipnlocal/local_test.go
+++ b/ipn/ipnlocal/local_test.go
@@ -949,7 +949,7 @@ func TestUpdateNetmapDelta(t *testing.T) {
}
b.netMap = &netmap.NetworkMap{}
- for i := 0; i < 5; i++ {
+ for i := range 5 {
b.netMap.Peers = append(b.netMap.Peers, (&tailcfg.Node{ID: (tailcfg.NodeID(i) + 1)}).View())
}
b.updatePeersFromNetmapLocked(b.netMap)
diff --git a/ipn/ipnlocal/loglines_test.go b/ipn/ipnlocal/loglines_test.go
index 159a9e211..8334b7f57 100644
--- a/ipn/ipnlocal/loglines_test.go
+++ b/ipn/ipnlocal/loglines_test.go
@@ -39,7 +39,7 @@ func TestLocalLogLines(t *testing.T) {
logid := func(hex byte) logid.PublicID {
var ret logid.PublicID
- for i := 0; i < len(ret); i++ {
+ for i := range len(ret) {
ret[i] = hex
}
return ret
diff --git a/ipn/ipnlocal/network-lock.go b/ipn/ipnlocal/network-lock.go
index 7f158e81d..2f5d5b09c 100644
--- a/ipn/ipnlocal/network-lock.go
+++ b/ipn/ipnlocal/network-lock.go
@@ -338,7 +338,7 @@ func (b *LocalBackend) tkaBootstrapFromGenesisLocked(g tkatype.MarshaledAUM, per
}
bootstrapStateID := fmt.Sprintf("%d:%d", genesis.State.StateID1, genesis.State.StateID2)
- for i := 0; i < persist.DisallowedTKAStateIDs().Len(); i++ {
+ for i := range persist.DisallowedTKAStateIDs().Len() {
stateID := persist.DisallowedTKAStateIDs().At(i)
if stateID == bootstrapStateID {
return fmt.Errorf("TKA with stateID of %q is disallowed on this node", stateID)
@@ -439,7 +439,7 @@ func (b *LocalBackend) NetworkLockStatus() *ipnstate.NetworkLockStatus {
}
filtered := make([]*ipnstate.TKAFilteredPeer, len(b.tka.filtered))
- for i := 0; i < len(filtered); i++ {
+ for i := range len(filtered) {
filtered[i] = b.tka.filtered[i].Clone()
}
@@ -765,7 +765,7 @@ func (b *LocalBackend) NetworkLockLog(maxEntries int) ([]ipnstate.NetworkLockUpd
var out []ipnstate.NetworkLockUpdate
cursor := b.tka.authority.Head()
- for i := 0; i < maxEntries; i++ {
+ for range maxEntries {
aum, err := b.tka.storage.AUM(cursor)
if err != nil {
if err == os.ErrNotExist {
diff --git a/ipn/ipnlocal/peerapi_test.go b/ipn/ipnlocal/peerapi_test.go
index 435ce5017..bffbb1076 100644
--- a/ipn/ipnlocal/peerapi_test.go
+++ b/ipn/ipnlocal/peerapi_test.go
@@ -109,7 +109,7 @@ func fileHasContents(name string, want string) check {
func hexAll(v string) string {
var sb strings.Builder
- for i := 0; i < len(v); i++ {
+ for i := range len(v) {
fmt.Fprintf(&sb, "%%%02x", v[i])
}
return sb.String()
@@ -604,7 +604,7 @@ func TestFileDeleteRace(t *testing.T) {
ps: ps,
}
buf := make([]byte, 2<<20)
- for i := 0; i < 30; i++ {
+ for range 30 {
rr := httptest.NewRecorder()
ph.ServeHTTP(rr, httptest.NewRequest("PUT", "http://100.100.100.101:123/v0/put/foo.txt", bytes.NewReader(buf[:rand.Intn(len(buf))])))
if res := rr.Result(); res.StatusCode != 200 {
diff --git a/ipn/ipnlocal/serve.go b/ipn/ipnlocal/serve.go
index 5563ca3ca..4e4af5f99 100644
--- a/ipn/ipnlocal/serve.go
+++ b/ipn/ipnlocal/serve.go
@@ -868,7 +868,7 @@ func expandProxyArg(s string) (targetURL string, insecureSkipVerify bool) {
}
func allNumeric(s string) bool {
- for i := 0; i < len(s); i++ {
+ for i := range len(s) {
if s[i] < '0' || s[i] > '9' {
return false
}
diff --git a/ipn/ipnlocal/state_test.go b/ipn/ipnlocal/state_test.go
index 5b2d839a9..1f216e4f1 100644
--- a/ipn/ipnlocal/state_test.go
+++ b/ipn/ipnlocal/state_test.go
@@ -70,7 +70,7 @@ func (nt *notifyThrottler) drain(count int) []ipn.Notify {
nt.mu.Unlock()
nn := []ipn.Notify{}
- for i := 0; i < count; i++ {
+ for i := range count {
select {
case n := <-ch:
nn = append(nn, n)
@@ -1039,7 +1039,7 @@ func TestWGEngineStatusRace(t *testing.T) {
// we would end up in state ipn.Running.
// The same should thus be true if these callbacks occur concurrently.
var wg sync.WaitGroup
- for i := 0; i < 100; i++ {
+ for i := range 100 {
wg.Add(1)
go func(i int) {
defer wg.Done()
diff --git a/ipn/ipnserver/server.go b/ipn/ipnserver/server.go
index b414e05a4..787880f9e 100644
--- a/ipn/ipnserver/server.go
+++ b/ipn/ipnserver/server.go
@@ -342,7 +342,7 @@ func userIDFromString(v string) string {
}
func isAllDigit(s string) bool {
- for i := 0; i < len(s); i++ {
+ for i := range len(s) {
if b := s[i]; b < '0' || b > '9' {
return false
}
diff --git a/ipn/localapi/debugderp.go b/ipn/localapi/debugderp.go
index af2527ee8..64ff571e5 100644
--- a/ipn/localapi/debugderp.go
+++ b/ipn/localapi/debugderp.go
@@ -247,7 +247,7 @@ func (h *Handler) serveDebugDERPRegion(w http.ResponseWriter, r *http.Request) {
// Next, repeatedly get the server key to see if the node is
// behind a load balancer (incorrectly).
serverPubKeys := make(map[key.NodePublic]bool)
- for i := 0; i < 5; i++ {
+ for i := range 5 {
func() {
rc := derphttp.NewRegionClient(fakePrivKey, h.logf, h.netMon, func() *tailcfg.DERPRegion {
return &tailcfg.DERPRegion{
diff --git a/ipn/localapi/localapi.go b/ipn/localapi/localapi.go
index cef21ddd5..44a840c01 100644
--- a/ipn/localapi/localapi.go
+++ b/ipn/localapi/localapi.go
@@ -903,7 +903,7 @@ func (h *Handler) serveDebugDialTypes(w http.ResponseWriter, r *http.Request) {
}
wg.Wait()
- for i := 0; i < len(dialers); i++ {
+ for range len(dialers) {
res := <-results
fmt.Fprintf(w, "[%s] connected=%v err=%v\n", res.name, res.conn != nil, res.err)
if res.conn != nil {
diff --git a/ipn/prefs.go b/ipn/prefs.go
index 896135ed0..f4edeb2d1 100644
--- a/ipn/prefs.go
+++ b/ipn/prefs.go
@@ -363,7 +363,7 @@ func applyPrefsEdits(src, dst reflect.Value, mask map[string]reflect.Value) {
func maskFields(v reflect.Value) map[string]reflect.Value {
mask := make(map[string]reflect.Value)
- for i := 0; i < v.NumField(); i++ {
+ for i := range v.NumField() {
f := v.Type().Field(i).Name
if !strings.HasSuffix(f, "Set") {
continue
diff --git a/ipn/prefs_test.go b/ipn/prefs_test.go
index 29c3f2479..e9d9cc22e 100644
--- a/ipn/prefs_test.go
+++ b/ipn/prefs_test.go
@@ -26,7 +26,7 @@ import (
)
func fieldsOf(t reflect.Type) (fields []string) {
- for i := 0; i < t.NumField(); i++ {
+ for i := range t.NumField() {
fields = append(fields, t.Field(i).Name)
}
return
@@ -661,7 +661,7 @@ func TestMaskedPrefsFields(t *testing.T) {
// ApplyEdits assumes.
pt := reflect.TypeFor[Prefs]()
mt := reflect.TypeFor[MaskedPrefs]()
- for i := 0; i < mt.NumField(); i++ {
+ for i := range mt.NumField() {
name := mt.Field(i).Name
if i == 0 {
if name != "Prefs" {
diff --git a/logtail/filch/filch_test.go b/logtail/filch/filch_test.go
index 5c33efbee..6b7b88414 100644
--- a/logtail/filch/filch_test.go
+++ b/logtail/filch/filch_test.go
@@ -75,11 +75,11 @@ func TestDropOldLogs(t *testing.T) {
f := newFilchTest(t, filePrefix, Options{ReplaceStderr: false, MaxFileSize: 1000})
defer f.close(t)
// Make filch rotate the logs 3 times
- for i := 0; i < tc.write; i++ {
+ for range tc.write {
f.write(t, line1)
}
// We should only be able to read the last 150 lines
- for i := 0; i < tc.read; i++ {
+ for i := range tc.read {
f.read(t, line1)
if t.Failed() {
t.Logf("could only read %d lines", i)
diff --git a/logtail/logtail_test.go b/logtail/logtail_test.go
index d3f9a8db1..3ea630406 100644
--- a/logtail/logtail_test.go
+++ b/logtail/logtail_test.go
@@ -77,7 +77,7 @@ func NewLogtailTestHarness(t *testing.T) (*LogtailTestServer, *Logger) {
func TestDrainPendingMessages(t *testing.T) {
ts, l := NewLogtailTestHarness(t)
- for i := 0; i < logLines; i++ {
+ for range logLines {
l.Write([]byte("log line"))
}
@@ -540,7 +540,7 @@ func BenchmarkWriteText(b *testing.B) {
l.clock = tstime.StdClock{}
l.buffer = discardBuffer{}
b.ReportAllocs()
- for i := 0; i < b.N; i++ {
+ for range b.N {
must.Get(l.Write(testdataTextLog))
}
}
@@ -550,7 +550,7 @@ func BenchmarkWriteJSON(b *testing.B) {
l.clock = tstime.StdClock{}
l.buffer = discardBuffer{}
b.ReportAllocs()
- for i := 0; i < b.N; i++ {
+ for range b.N {
must.Get(l.Write(testdataJSONLog))
}
}
diff --git a/metrics/metrics_test.go b/metrics/metrics_test.go
index e170c7895..45bf39e56 100644
--- a/metrics/metrics_test.go
+++ b/metrics/metrics_test.go
@@ -41,7 +41,7 @@ func TestCurrentFileDescriptors(t *testing.T) {
// Open some FDs.
const extra = 10
- for i := 0; i < extra; i++ {
+ for i := range extra {
f, err := os.Open("/proc/self/stat")
if err != nil {
t.Fatal(err)
@@ -58,7 +58,7 @@ func TestCurrentFileDescriptors(t *testing.T) {
func BenchmarkCurrentFileDescriptors(b *testing.B) {
b.ReportAllocs()
- for i := 0; i < b.N; i++ {
+ for range b.N {
_ = CurrentFDs()
}
}
diff --git a/metrics/multilabelmap.go b/metrics/multilabelmap.go
index b503b2cf4..c0f312e7d 100644
--- a/metrics/multilabelmap.go
+++ b/metrics/multilabelmap.go
@@ -61,7 +61,7 @@ func labelString(k any) string {
var sb strings.Builder
sb.WriteString("{")
- for i := 0; i < t.NumField(); i++ {
+ for i := range t.NumField() {
if i > 0 {
sb.WriteString(",")
}
diff --git a/net/art/stride_table_test.go b/net/art/stride_table_test.go
index 40700b175..bff2bb7c5 100644
--- a/net/art/stride_table_test.go
+++ b/net/art/stride_table_test.go
@@ -18,7 +18,7 @@ import (
func TestInversePrefix(t *testing.T) {
t.Parallel()
- for i := 0; i < 256; i++ {
+ for i := range 256 {
for len := 0; len < 9; len++ {
addr := i & (0xFF << (8 - len))
idx := prefixIndex(uint8(addr), len)
@@ -32,7 +32,7 @@ func TestInversePrefix(t *testing.T) {
func TestHostIndex(t *testing.T) {
t.Parallel()
- for i := 0; i < 256; i++ {
+ for i := range 256 {
got := hostIndex(uint8(i))
want := prefixIndex(uint8(i), 8)
if got != want {
@@ -63,7 +63,7 @@ func TestStrideTableInsert(t *testing.T) {
}
}
- for i := 0; i < 256; i++ {
+ for i := range 256 {
addr := uint8(i)
slowVal, slowOK := slow.get(addr)
fastVal, fastOK := fast.get(addr)
@@ -103,7 +103,7 @@ func TestStrideTableInsertShuffled(t *testing.T) {
// Order of insertion should not affect the final shape of the stride table.
routes2 := append([]slowEntry[int](nil), routes...) // dup so we can print both slices on fail
- for i := 0; i < 100; i++ {
+ for range 100 {
rand.Shuffle(len(routes2), func(i, j int) { routes2[i], routes2[j] = routes2[j], routes2[i] })
rt2 := strideTable[int]{}
for _, route := range routes2 {
@@ -152,7 +152,7 @@ func TestStrideTableDelete(t *testing.T) {
t.Fatalf("slowTable has %d entries after deletes, want 50", cnt)
}
- for i := 0; i < 256; i++ {
+ for i := range 256 {
addr := uint8(i)
slowVal, slowOK := slow.get(addr)
fastVal, fastOK := fast.get(addr)
@@ -188,7 +188,7 @@ func TestStrideTableDeleteShuffle(t *testing.T) {
// Order of deletion should not affect the final shape of the stride table.
toDelete2 := append([]slowEntry[int](nil), toDelete...) // dup so we can print both slices on fail
- for i := 0; i < 100; i++ {
+ for range 100 {
rand.Shuffle(len(toDelete2), func(i, j int) { toDelete2[i], toDelete2[j] = toDelete2[j], toDelete2[i] })
rt2 := strideTable[int]{}
for _, route := range routes {
@@ -262,7 +262,7 @@ func forStrideCountAndOrdering(b *testing.B, fn func(b *testing.B, routes []slow
func BenchmarkStrideTableInsertion(b *testing.B) {
forStrideCountAndOrdering(b, func(b *testing.B, routes []slowEntry[int]) {
val := 0
- for i := 0; i < b.N; i++ {
+ for range b.N {
var rt strideTable[int]
for _, route := range routes {
rt.insert(route.addr, route.len, val)
@@ -285,7 +285,7 @@ func BenchmarkStrideTableDeletion(b *testing.B) {
}
b.ResetTimer()
- for i := 0; i < b.N; i++ {
+ for range b.N {
rt2 := rt
for _, route := range routes {
rt2.delete(route.addr, route.len)
@@ -311,7 +311,7 @@ func BenchmarkStrideTableGet(b *testing.B) {
}
b.ResetTimer()
- for i := 0; i < b.N; i++ {
+ for i := range b.N {
writeSink, _ = rt.get(uint8(i))
}
gets := float64(b.N)
diff --git a/net/art/table_test.go b/net/art/table_test.go
index 39b76e0af..cdc295c0e 100644
--- a/net/art/table_test.go
+++ b/net/art/table_test.go
@@ -594,7 +594,7 @@ func TestInsertCompare(t *testing.T) {
seenVals4 := map[int]bool{}
seenVals6 := map[int]bool{}
- for i := 0; i < 10_000; i++ {
+ for range 10_000 {
a := randomAddr()
slowVal, slowOK := slow.get(a)
fastVal, fastOK := fast.Get(a)
@@ -644,12 +644,12 @@ func TestInsertShuffled(t *testing.T) {
}
}()
- for i := 0; i < 10; i++ {
+ for range 10 {
pfxs2 := append([]slowPrefixEntry[int](nil), pfxs...)
rand.Shuffle(len(pfxs2), func(i, j int) { pfxs2[i], pfxs2[j] = pfxs2[j], pfxs2[i] })
addrs := make([]netip.Addr, 0, 10_000)
- for i := 0; i < 10_000; i++ {
+ for range 10_000 {
addrs = append(addrs, randomAddr())
}
@@ -723,7 +723,7 @@ func TestDeleteCompare(t *testing.T) {
seenVals4 := map[int]bool{}
seenVals6 := map[int]bool{}
- for i := 0; i < numProbes; i++ {
+ for range numProbes {
a := randomAddr()
slowVal, slowOK := slow.get(a)
fastVal, fastOK := fast.Get(a)
@@ -789,7 +789,7 @@ func TestDeleteShuffled(t *testing.T) {
rt.Delete(pfx.pfx)
}
- for i := 0; i < 10; i++ {
+ for range 10 {
pfxs2 := append([]slowPrefixEntry[int](nil), pfxs...)
toDelete2 := append([]slowPrefixEntry[int](nil), toDelete...)
rand.Shuffle(len(toDelete2), func(i, j int) { toDelete2[i], toDelete2[j] = toDelete2[j], toDelete2[i] })
@@ -806,7 +806,7 @@ func TestDeleteShuffled(t *testing.T) {
// Diffing a deep tree of tables gives cmp.Diff a nervous breakdown, so
// test for equivalence statistically with random probes instead.
- for i := 0; i < numProbes; i++ {
+ for range numProbes {
a := randomAddr()
val1, ok1 := rt.Get(a)
val2, ok2 := rt2.Get(a)
@@ -909,7 +909,7 @@ func BenchmarkTableInsertion(b *testing.B) {
var startMem, endMem runtime.MemStats
runtime.ReadMemStats(&startMem)
b.StartTimer()
- for i := 0; i < b.N; i++ {
+ for range b.N {
var rt Table[int]
for _, route := range routes {
rt.Insert(route.pfx, route.val)
@@ -944,7 +944,7 @@ func BenchmarkTableDelete(b *testing.B) {
var t runningTimer
allocs, bytes := getMemCost(func() {
- for i := 0; i < b.N; i++ {
+ for range b.N {
var rt Table[int]
for _, route := range routes {
rt.Insert(route.pfx, route.val)
@@ -983,7 +983,7 @@ func BenchmarkTableGet(b *testing.B) {
// cost is 16 bytes - presumably due to some amortized costs in
// the memory allocator? Either way, empirically 100 iterations
// reliably reports the correct cost.
- for i := 0; i < 100; i++ {
+ for range 100 {
_ = genAddr()
}
})
@@ -991,7 +991,7 @@ func BenchmarkTableGet(b *testing.B) {
addrBytes /= 100
var t runningTimer
allocs, bytes := getMemCost(func() {
- for i := 0; i < b.N; i++ {
+ for range b.N {
addr := genAddr()
t.Start()
writeSink, _ = rt.Get(addr)
diff --git a/net/connstats/stats_test.go b/net/connstats/stats_test.go
index 0db7996f4..ae0bca8a5 100644
--- a/net/connstats/stats_test.go
+++ b/net/connstats/stats_test.go
@@ -169,7 +169,7 @@ func Benchmark(b *testing.B) {
p := testPacketV4(ipproto.UDP, [4]byte{192, 168, 0, 1}, [4]byte{192, 168, 0, 2}, 123, 456, 789)
b.ResetTimer()
b.ReportAllocs()
- for i := 0; i < b.N; i++ {
+ for range b.N {
s := NewStatistics(0, 0, nil)
for j := 0; j < 1e3; j++ {
s.UpdateTxVirtual(p)
@@ -180,7 +180,7 @@ func Benchmark(b *testing.B) {
p := testPacketV4(ipproto.UDP, [4]byte{}, [4]byte{}, 0, 0, 789)
b.ResetTimer()
b.ReportAllocs()
- for i := 0; i < b.N; i++ {
+ for range b.N {
s := NewStatistics(0, 0, nil)
for j := 0; j < 1e3; j++ {
binary.BigEndian.PutUint32(p[20:], uint32(j)) // unique port combination
@@ -192,7 +192,7 @@ func Benchmark(b *testing.B) {
p := testPacketV4(ipproto.UDP, [4]byte{192, 168, 0, 1}, [4]byte{192, 168, 0, 2}, 123, 456, 789)
b.ResetTimer()
b.ReportAllocs()
- for i := 0; i < b.N; i++ {
+ for range b.N {
s := NewStatistics(0, 0, nil)
var group sync.WaitGroup
for j := 0; j < runtime.NumCPU(); j++ {
@@ -214,7 +214,7 @@ func Benchmark(b *testing.B) {
}
b.ResetTimer()
b.ReportAllocs()
- for i := 0; i < b.N; i++ {
+ for range b.N {
s := NewStatistics(0, 0, nil)
var group sync.WaitGroup
for j := 0; j < runtime.NumCPU(); j++ {
diff --git a/net/dns/manager_tcp_test.go b/net/dns/manager_tcp_test.go
index 87c0b258e..4883a3b6f 100644
--- a/net/dns/manager_tcp_test.go
+++ b/net/dns/manager_tcp_test.go
@@ -115,7 +115,7 @@ func TestDNSOverTCP(t *testing.T) {
}
results := map[dnsname.FQDN]string{}
- for i := 0; i < len(wantResults); i++ {
+ for range len(wantResults) {
var respLength uint16
if err := binary.Read(c, binary.BigEndian, &respLength); err != nil {
t.Fatalf("reading len: %v", err)
diff --git a/net/dns/manager_windows.go b/net/dns/manager_windows.go
index 603de8c2e..e46d0562c 100644
--- a/net/dns/manager_windows.go
+++ b/net/dns/manager_windows.go
@@ -198,7 +198,7 @@ func (m *windowsManager) setHosts(hosts []*HostEntry) error {
// This can fail spuriously with an access denied error, so retry it a
// few times.
- for i := 0; i < 5; i++ {
+ for range 5 {
if err = atomicfile.WriteFile(hostsFile, outB, fileMode); err == nil {
return nil
}
diff --git a/net/dns/recursive/recursive_test.go b/net/dns/recursive/recursive_test.go
index 0bfba383a..d47e4cebf 100644
--- a/net/dns/recursive/recursive_test.go
+++ b/net/dns/recursive/recursive_test.go
@@ -613,7 +613,7 @@ func TestRecursionLimit(t *testing.T) {
// Fill out a CNAME chain equal to our recursion limit; we won't get
// this far since each CNAME is more than 1 level "deep", but this
// ensures that we have more than the limit.
- for i := 0; i < maxDepth+1; i++ {
+ for i := range maxDepth + 1 {
curr := fmt.Sprintf("%d-tailscale.com.", i)
tailscaleNameservers := &dns.Msg{
diff --git a/net/dns/resolver/debug.go b/net/dns/resolver/debug.go
index f334af5c9..da195d49d 100644
--- a/net/dns/resolver/debug.go
+++ b/net/dns/resolver/debug.go
@@ -67,7 +67,7 @@ func (fl *fwdLog) ServeHTTP(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "
DNS forwards
")
now := time.Now()
- for i := 0; i < len(fl.ent); i++ {
+ for i := range len(fl.ent) {
ent := fl.ent[(i+fl.pos)%len(fl.ent)]
if ent.Domain == "" {
continue
diff --git a/net/dns/resolver/forwarder_test.go b/net/dns/resolver/forwarder_test.go
index aef9ce50e..e723af620 100644
--- a/net/dns/resolver/forwarder_test.go
+++ b/net/dns/resolver/forwarder_test.go
@@ -199,7 +199,7 @@ func BenchmarkNameFromQuery(b *testing.B) {
}
b.ResetTimer()
b.ReportAllocs()
- for i := 0; i < b.N; i++ {
+ for range b.N {
_, err := nameFromQuery(msg)
if err != nil {
b.Fatal(err)
@@ -413,7 +413,7 @@ func makeLargeResponse(tb testing.TB, domain string) (request, response []byte)
Class: dns.ClassINET,
})
builder.StartAnswers()
- for i := 0; i < 120; i++ {
+ for i := range 120 {
builder.AResource(dns.ResourceHeader{
Name: name,
Class: dns.ClassINET,
diff --git a/net/dns/resolver/tsdns_test.go b/net/dns/resolver/tsdns_test.go
index cbef27588..47fecd0cf 100644
--- a/net/dns/resolver/tsdns_test.go
+++ b/net/dns/resolver/tsdns_test.go
@@ -976,7 +976,7 @@ func BenchmarkFull(b *testing.B) {
for _, tt := range tests {
b.Run(tt.name, func(b *testing.B) {
b.ReportAllocs()
- for i := 0; i < b.N; i++ {
+ for range b.N {
syncRespond(r, tt.request)
}
})
diff --git a/net/interfaces/interfaces_darwin_test.go b/net/interfaces/interfaces_darwin_test.go
index 6767ec614..bcc508e18 100644
--- a/net/interfaces/interfaces_darwin_test.go
+++ b/net/interfaces/interfaces_darwin_test.go
@@ -103,7 +103,7 @@ func likelyHomeRouterIPDarwinExec() (ret netip.Addr, netif string, ok bool) {
func TestFetchRoutingTable(t *testing.T) {
// Issue 1345: this used to be flaky on darwin.
- for i := 0; i < 20; i++ {
+ for range 20 {
_, err := fetchRoutingTable()
if err != nil {
t.Fatal(err)
diff --git a/net/interfaces/interfaces_linux_test.go b/net/interfaces/interfaces_linux_test.go
index 59249c67d..98f9853f5 100644
--- a/net/interfaces/interfaces_linux_test.go
+++ b/net/interfaces/interfaces_linux_test.go
@@ -97,7 +97,7 @@ func TestAwsAppRunnerDefaultRouteInterface(t *testing.T) {
func BenchmarkDefaultRouteInterface(b *testing.B) {
b.ReportAllocs()
- for i := 0; i < b.N; i++ {
+ for range b.N {
if _, err := DefaultRouteInterface(); err != nil {
b.Fatal(err)
}
diff --git a/net/interfaces/interfaces_windows_test.go b/net/interfaces/interfaces_windows_test.go
index 2092dae33..b02a58d03 100644
--- a/net/interfaces/interfaces_windows_test.go
+++ b/net/interfaces/interfaces_windows_test.go
@@ -7,7 +7,7 @@ import "testing"
func BenchmarkGetPACWindows(b *testing.B) {
b.ReportAllocs()
- for i := 0; i < b.N; i++ {
+ for i := range b.N {
v := getPACWindows()
if i == 0 {
b.Logf("Got: %q", v)
diff --git a/net/packet/packet_test.go b/net/packet/packet_test.go
index b340b29a9..4fc804a4f 100644
--- a/net/packet/packet_test.go
+++ b/net/packet/packet_test.go
@@ -512,7 +512,7 @@ func BenchmarkDecode(b *testing.B) {
for _, bench := range benches {
b.Run(bench.name, func(b *testing.B) {
b.ReportAllocs()
- for i := 0; i < b.N; i++ {
+ for range b.N {
var p Parsed
p.Decode(bench.buf)
}
@@ -624,7 +624,7 @@ func BenchmarkString(b *testing.B) {
var p Parsed
p.Decode(bench.buf)
b.ResetTimer()
- for i := 0; i < b.N; i++ {
+ for range b.N {
sinkString = p.String()
}
})
diff --git a/net/portmapper/portmapper_test.go b/net/portmapper/portmapper_test.go
index e41223dba..d321b720a 100644
--- a/net/portmapper/portmapper_test.go
+++ b/net/portmapper/portmapper_test.go
@@ -21,7 +21,7 @@ func TestCreateOrGetMapping(t *testing.T) {
c := NewClient(t.Logf, nil, nil, new(controlknobs.Knobs), nil)
defer c.Close()
c.SetLocalPort(1234)
- for i := 0; i < 2; i++ {
+ for i := range 2 {
if i > 0 {
time.Sleep(100 * time.Millisecond)
}
@@ -36,7 +36,7 @@ func TestClientProbe(t *testing.T) {
}
c := NewClient(t.Logf, nil, nil, new(controlknobs.Knobs), nil)
defer c.Close()
- for i := 0; i < 3; i++ {
+ for i := range 3 {
if i > 0 {
time.Sleep(100 * time.Millisecond)
}
diff --git a/net/portmapper/upnp_test.go b/net/portmapper/upnp_test.go
index 87e8c9857..79e05dd99 100644
--- a/net/portmapper/upnp_test.go
+++ b/net/portmapper/upnp_test.go
@@ -597,7 +597,7 @@ func TestGetUPnPPortMapping(t *testing.T) {
firstResponse netip.AddrPort
prevPort uint16
)
- for i := 0; i < 2; i++ {
+ for i := range 2 {
sawRequestWithLease.Store(false)
res, err := c.Probe(ctx)
if err != nil {
diff --git a/net/sockstats/sockstats_tsgo_test.go b/net/sockstats/sockstats_tsgo_test.go
index 9887d6680..c467c8a70 100644
--- a/net/sockstats/sockstats_tsgo_test.go
+++ b/net/sockstats/sockstats_tsgo_test.go
@@ -62,7 +62,7 @@ func TestRadioMonitor(t *testing.T) {
"400 iterations: 2 sec active, 1 min idle",
func(tt *testTime, rm *radioMonitor) {
// 400 iterations to ensure values loop back around rm.usage array
- for i := 0; i < 400; i++ {
+ for range 400 {
rm.active()
tt.Add(1 * time.Second)
rm.active()
diff --git a/net/stunserver/stunserver_test.go b/net/stunserver/stunserver_test.go
index 95b2a8c7b..24a7bb570 100644
--- a/net/stunserver/stunserver_test.go
+++ b/net/stunserver/stunserver_test.go
@@ -76,7 +76,7 @@ func BenchmarkServerSTUN(b *testing.B) {
tx := stun.NewTxID()
req := stun.Request(tx)
- for i := 0; i < b.N; i++ {
+ for range b.N {
if _, err := cc.WriteToUDP(req, addr); err != nil {
b.Fatal(err)
}
diff --git a/net/tcpinfo/tcpinfo_test.go b/net/tcpinfo/tcpinfo_test.go
index a117eb59a..bb3d224ec 100644
--- a/net/tcpinfo/tcpinfo_test.go
+++ b/net/tcpinfo/tcpinfo_test.go
@@ -45,7 +45,7 @@ func TestRTT(t *testing.T) {
// Write a bunch of data to the conn to force TCP session establishment
// and a few packets.
junkData := bytes.Repeat([]byte("hello world\n"), 1024*1024)
- for i := 0; i < 10; i++ {
+ for i := range 10 {
if _, err := conn.Write(junkData); err != nil {
t.Fatalf("error writing junk data [%d]: %v", i, err)
}
diff --git a/net/tsaddr/tsaddr_test.go b/net/tsaddr/tsaddr_test.go
index 7cc1a3881..7944545c7 100644
--- a/net/tsaddr/tsaddr_test.go
+++ b/net/tsaddr/tsaddr_test.go
@@ -99,7 +99,7 @@ var sinkIP netip.Addr
func BenchmarkTailscaleServiceAddr(b *testing.B) {
b.ReportAllocs()
- for i := 0; i < b.N; i++ {
+ for range b.N {
sinkIP = TailscaleServiceIP()
}
}
diff --git a/net/tshttpproxy/tshttpproxy_test.go b/net/tshttpproxy/tshttpproxy_test.go
index 5b9362d2c..97f8c1f8b 100644
--- a/net/tshttpproxy/tshttpproxy_test.go
+++ b/net/tshttpproxy/tshttpproxy_test.go
@@ -64,7 +64,7 @@ func TestProxyFromEnvironment_setNoProxyUntil(t *testing.T) {
os.Setenv("HTTPS_PROXY", fakeProxyEnv)
req := &http.Request{URL: must.Get(url.Parse("https://example.com/"))}
- for i := 0; i < 3; i++ {
+ for i := range 3 {
switch i {
case 1:
setNoProxyUntil(time.Minute)
diff --git a/net/tstun/wrap_test.go b/net/tstun/wrap_test.go
index 12da00c64..c959e0dc8 100644
--- a/net/tstun/wrap_test.go
+++ b/net/tstun/wrap_test.go
@@ -222,7 +222,7 @@ func TestReadAndInject(t *testing.T) {
var seen = make(map[string]bool)
sizes := make([]int, 1)
// We expect the same packets back, in no particular order.
- for i := 0; i < len(written)+len(injected); i++ {
+ for i := range len(written) + len(injected) {
packet := buf[:]
buffs := [][]byte{packet}
numPackets, err := tun.Read(buffs, sizes, 0)
@@ -283,7 +283,7 @@ func TestWriteAndInject(t *testing.T) {
seen := make(map[string]bool)
// We expect the same packets back, in no particular order.
- for i := 0; i < len(written)+len(injected); i++ {
+ for i := range len(written) + len(injected) {
packet := <-chtun.Inbound
got := string(packet)
t.Logf("read %d: got %s", i, got)
@@ -470,7 +470,7 @@ func BenchmarkWrite(b *testing.B) {
defer tun.Close()
packet := [][]byte{udp4("5.6.7.8", "1.2.3.4", 89, 89)}
- for i := 0; i < b.N; i++ {
+ for range b.N {
_, err := ftun.Write(packet, 0)
if err != nil {
b.Errorf("err = %v; want nil", err)
@@ -902,7 +902,7 @@ func TestCaptureHook(t *testing.T) {
pkt: []byte("InjectOutboundPacketBuffer"),
},
}
- for i := 0; i < len(want); i++ {
+ for i := range len(want) {
want[i].now = now
}
if !reflect.DeepEqual(captured, want) {
diff --git a/paths/paths_unix.go b/paths/paths_unix.go
index 2885cd978..6a2b28733 100644
--- a/paths/paths_unix.go
+++ b/paths/paths_unix.go
@@ -45,7 +45,7 @@ func stateFileUnix() string {
}
try := path
- for i := 0; i < 3; i++ { // check writability of the file, /var/lib/tailscale, and /var/lib
+ for range 3 { // check writability of the file, /var/lib/tailscale, and /var/lib
err := unix.Access(try, unix.O_RDWR)
if err == nil {
return path
diff --git a/portlist/portlist_linux_test.go b/portlist/portlist_linux_test.go
index 2b8c8cc1d..24635fae2 100644
--- a/portlist/portlist_linux_test.go
+++ b/portlist/portlist_linux_test.go
@@ -114,7 +114,7 @@ func BenchmarkParsePorts(b *testing.B) {
1: 00000000000000000000000000000000:1F91 00000000000000000000000000000000:0000 0A 00000000:00000000 00:00000000 00000000 1000 0 142240557 1 0000000000000000 100 0 0 10 0
2: 00000000000000000000000000000000:0016 00000000000000000000000000000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 34064 1 0000000000000000 100 0 0 10 0
`)
- for i := 0; i < 50000; i++ {
+ for range 50000 {
contents.WriteString(" 3: 69050120005716BC64906EBE009ECD4D:D506 0047062600000000000000006E171268:01BB 01 00000000:00000000 02:0000009E 00000000 1000 0 151042856 2 0000000000000000 21 4 28 10 -1\n")
}
@@ -123,7 +123,7 @@ func BenchmarkParsePorts(b *testing.B) {
r := bytes.NewReader(contents.Bytes())
br := bufio.NewReader(&contents)
b.ResetTimer()
- for i := 0; i < b.N; i++ {
+ for range b.N {
r.Seek(0, io.SeekStart)
br.Reset(r)
err := li.parseProcNetFile(br, "tcp6")
@@ -142,7 +142,7 @@ func BenchmarkFindProcessNames(b *testing.B) {
need := map[string]*portMeta{
"something-we'll-never-find": new(portMeta),
}
- for i := 0; i < b.N; i++ {
+ for range b.N {
if err := li.findProcessNames(need); err != nil {
b.Fatal(err)
}
diff --git a/portlist/portlist_test.go b/portlist/portlist_test.go
index 14cc490f7..34277fdba 100644
--- a/portlist/portlist_test.go
+++ b/portlist/portlist_test.go
@@ -205,7 +205,7 @@ func benchmarkGetList(b *testing.B, incremental bool) {
b.Skip(p.initErr)
}
b.Cleanup(func() { p.Close() })
- for i := 0; i < b.N; i++ {
+ for range b.N {
pl, err := p.getList()
if err != nil {
b.Fatal(err)
diff --git a/prober/derp_test.go b/prober/derp_test.go
index 138852b91..8afbffac7 100644
--- a/prober/derp_test.go
+++ b/prober/derp_test.go
@@ -186,7 +186,7 @@ func Test_packetsForSize(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
hashes := make(map[string]int)
- for i := 0; i < 5; i++ {
+ for range 5 {
pkts := packetsForSize(int64(tt.size))
if len(pkts) != tt.wantPackets {
t.Errorf("packetsForSize(%d) got %d packets, want %d", tt.size, len(pkts), tt.wantPackets)
diff --git a/prober/prober_test.go b/prober/prober_test.go
index a97003a63..af645ef00 100644
--- a/prober/prober_test.go
+++ b/prober/prober_test.go
@@ -155,7 +155,7 @@ func TestProberRun(t *testing.T) {
const startingProbes = 100
var probes []*Probe
- for i := 0; i < startingProbes; i++ {
+ for i := range startingProbes {
probes = append(probes, p.Run(fmt.Sprintf("probe%d", i), probeInterval, nil, FuncProbe(func(context.Context) error {
mu.Lock()
defer mu.Unlock()
diff --git a/safesocket/basic_test.go b/safesocket/basic_test.go
index 31c54ac7b..71422b8bc 100644
--- a/safesocket/basic_test.go
+++ b/safesocket/basic_test.go
@@ -76,7 +76,7 @@ func TestBasics(t *testing.T) {
errs <- nil
}()
- for i := 0; i < 2; i++ {
+ for range 2 {
if err := <-errs; err != nil {
t.Fatal(err)
}
diff --git a/safesocket/pipe_windows_test.go b/safesocket/pipe_windows_test.go
index 2080d1934..054781f23 100644
--- a/safesocket/pipe_windows_test.go
+++ b/safesocket/pipe_windows_test.go
@@ -99,7 +99,7 @@ func TestExpectedWindowsTypes(t *testing.T) {
errs <- nil
}()
- for i := 0; i < 2; i++ {
+ for range 2 {
if err := <-errs; err != nil {
t.Fatal(err)
}
diff --git a/smallzstd/zstd_test.go b/smallzstd/zstd_test.go
index 489c518ae..d1225bfac 100644
--- a/smallzstd/zstd_test.go
+++ b/smallzstd/zstd_test.go
@@ -54,7 +54,7 @@ func benchEncoder(b *testing.B, mk func() (*zstd.Encoder, error)) {
}
b.ResetTimer()
- for i := 0; i < b.N; i++ {
+ for range b.N {
e.EncodeAll(in, out)
}
}
@@ -66,7 +66,7 @@ func benchEncoderWithConstruction(b *testing.B, mk func() (*zstd.Encoder, error)
out := make([]byte, 0, 10<<10) // 10kiB
b.ResetTimer()
- for i := 0; i < b.N; i++ {
+ for range b.N {
e, err := mk()
if err != nil {
b.Fatalf("making encoder: %v", err)
@@ -88,7 +88,7 @@ func benchDecoder(b *testing.B, mk func() (*zstd.Decoder, error)) {
}
b.ResetTimer()
- for i := 0; i < b.N; i++ {
+ for range b.N {
d.DecodeAll(in, out)
}
}
@@ -100,7 +100,7 @@ func benchDecoderWithConstruction(b *testing.B, mk func() (*zstd.Decoder, error)
out := make([]byte, 0, 10<<10)
b.ResetTimer()
- for i := 0; i < b.N; i++ {
+ for range b.N {
d, err := mk()
if err != nil {
b.Fatalf("creating decoder: %v", err)
diff --git a/ssh/tailssh/tailssh_test.go b/ssh/tailssh/tailssh_test.go
index d193f55e3..06a87f6a6 100644
--- a/ssh/tailssh/tailssh_test.go
+++ b/ssh/tailssh/tailssh_test.go
@@ -1016,7 +1016,7 @@ func TestPublicKeyFetching(t *testing.T) {
pubKeyHTTPClient: ts.Client(),
timeNow: clock.Now,
}
- for i := 0; i < 2; i++ {
+ for range 2 {
got, err := srv.fetchPublicKeysURL(keys + "/alice.keys")
if err != nil {
t.Fatal(err)
diff --git a/syncs/syncs_test.go b/syncs/syncs_test.go
index 4e99979d6..a9ed67a41 100644
--- a/syncs/syncs_test.go
+++ b/syncs/syncs_test.go
@@ -45,7 +45,7 @@ func TestWaitGroupChan(t *testing.T) {
func TestClosedChan(t *testing.T) {
ch := ClosedChan()
- for i := 0; i < 2; i++ {
+ for range 2 {
select {
case <-ch:
default:
diff --git a/tailcfg/tailcfg_test.go b/tailcfg/tailcfg_test.go
index 2940084d7..fa8a27479 100644
--- a/tailcfg/tailcfg_test.go
+++ b/tailcfg/tailcfg_test.go
@@ -23,7 +23,7 @@ import (
)
func fieldsOf(t reflect.Type) (fields []string) {
- for i := 0; i < t.NumField(); i++ {
+ for i := range t.NumField() {
fields = append(fields, t.Field(i).Name)
}
return
diff --git a/tempfork/heap/heap_test.go b/tempfork/heap/heap_test.go
index c5e96a553..ddaf47a7f 100644
--- a/tempfork/heap/heap_test.go
+++ b/tempfork/heap/heap_test.go
@@ -118,7 +118,7 @@ func Test(t *testing.T) {
func TestRemove0(t *testing.T) {
h := new(myHeap[int])
- for i := 0; i < 10; i++ {
+ for i := range 10 {
h.Push(i)
}
h.verify(t, 0)
@@ -135,7 +135,7 @@ func TestRemove0(t *testing.T) {
func TestRemove1(t *testing.T) {
h := new(myHeap[int])
- for i := 0; i < 10; i++ {
+ for i := range 10 {
h.Push(i)
}
h.verify(t, 0)
@@ -153,7 +153,7 @@ func TestRemove2(t *testing.T) {
N := 10
h := new(myHeap[int])
- for i := 0; i < N; i++ {
+ for i := range N {
h.Push(i)
}
h.verify(t, 0)
@@ -167,7 +167,7 @@ func TestRemove2(t *testing.T) {
if len(m) != N {
t.Errorf("len(m) = %d; want %d", len(m), N)
}
- for i := 0; i < len(m); i++ {
+ for i := range len(m) {
if !m[i] {
t.Errorf("m[%d] doesn't exist", i)
}
@@ -177,7 +177,7 @@ func TestRemove2(t *testing.T) {
func BenchmarkDup(b *testing.B) {
const n = 10000
h := make(myHeap[int], 0, n)
- for i := 0; i < b.N; i++ {
+ for range b.N {
for j := 0; j < n; j++ {
Push[int](&h, 0) // all elements are the same
}
diff --git a/tka/chaintest_test.go b/tka/chaintest_test.go
index f0ccf422c..5811f9c83 100644
--- a/tka/chaintest_test.go
+++ b/tka/chaintest_test.go
@@ -209,7 +209,7 @@ func (c *testChain) buildChain() {
// in O(n+1) where n is the number of AUMs.
c.AUMs = make(map[string]AUM, len(c.Nodes))
c.AUMHashes = make(map[string]AUMHash, len(c.Nodes))
- for i := 0; i < len(c.Nodes)+1; i++ {
+ for range len(c.Nodes) + 1 {
if len(pending) == 0 {
return
}
diff --git a/tka/sig_test.go b/tka/sig_test.go
index 038ec5f88..819b6aa83 100644
--- a/tka/sig_test.go
+++ b/tka/sig_test.go
@@ -143,7 +143,7 @@ func TestSigNested_DeepNesting(t *testing.T) {
outer := nestedSig
var lastNodeKey key.NodePrivate
- for i := 0; i < 15; i++ { // 15 = max nesting level for CBOR
+ for range 15 { // 15 = max nesting level for CBOR
lastNodeKey = key.NewNode()
nodeKeyPub, _ := lastNodeKey.Public().MarshalBinary()
diff --git a/tka/sync.go b/tka/sync.go
index b6f3f31b0..6131f54d0 100644
--- a/tka/sync.go
+++ b/tka/sync.go
@@ -142,7 +142,7 @@ func computeSyncIntersection(storage Chonk, localOffer, remoteOffer SyncOffer) (
if hasRemoteHead {
curs := localOffer.Head
- for i := 0; i < maxSyncHeadIntersectionIter; i++ {
+ for range maxSyncHeadIntersectionIter {
parent, err := storage.AUM(curs)
if err != nil {
if err != os.ErrNotExist {
diff --git a/tka/tailchonk.go b/tka/tailchonk.go
index 02f06c0ba..32d2215de 100644
--- a/tka/tailchonk.go
+++ b/tka/tailchonk.go
@@ -587,7 +587,7 @@ func markActiveChain(storage Chonk, verdict map[AUMHash]retainState, minChain in
return AUMHash{}, err
}
- for i := 0; i < minChain; i++ {
+ for i := range minChain {
h := next.Hash()
verdict[h] |= retainStateActive
diff --git a/tka/tka.go b/tka/tka.go
index 61bee804b..22145a008 100644
--- a/tka/tka.go
+++ b/tka/tka.go
@@ -213,7 +213,7 @@ func fastForwardWithAdvancer(
curs := nextAUM
state := startState
- for i := 0; i < maxIter; i++ {
+ for range maxIter {
if done != nil && done(curs, state) {
return curs, state, nil
}
diff --git a/tsnet/tsnet_test.go b/tsnet/tsnet_test.go
index c6be4b102..85c3fa44f 100644
--- a/tsnet/tsnet_test.go
+++ b/tsnet/tsnet_test.go
@@ -730,7 +730,7 @@ func TestCapturePcap(t *testing.T) {
const pcapHeaderSize = 24
// there is a lag before the io.Copy writes a packet to the pcap files
- for i := 0; i < (timeLimit * 10); i++ {
+ for range timeLimit * 10 {
time.Sleep(100 * time.Millisecond)
if (fileSize(s1Pcap) > pcapHeaderSize) && (fileSize(s2Pcap) > pcapHeaderSize) {
break
diff --git a/tstest/clock_test.go b/tstest/clock_test.go
index 93defe7ff..d5816564a 100644
--- a/tstest/clock_test.go
+++ b/tstest/clock_test.go
@@ -153,7 +153,7 @@ func TestZeroInitClock(t *testing.T) {
t.Errorf("clock has step %v, want 0", step)
}
- for i := 0; i < 10; i++ {
+ for i := range 10 {
if got := clock.Now(); !got.Equal(start) {
t.Errorf("step %v: clock.Now() = %v, want %v", i, got, start)
}
diff --git a/tstest/integration/vms/vm_setup_test.go b/tstest/integration/vms/vm_setup_test.go
index 0695df268..0c6901014 100644
--- a/tstest/integration/vms/vm_setup_test.go
+++ b/tstest/integration/vms/vm_setup_test.go
@@ -50,7 +50,7 @@ func (vm *vmInstance) running() bool {
func (vm *vmInstance) waitStartup(t *testing.T) {
t.Helper()
- for i := 0; i < 100; i++ {
+ for range 100 {
if vm.running() {
break
}
diff --git a/tstest/integration/vms/vms_steps_test.go b/tstest/integration/vms/vms_steps_test.go
index 50c578968..94e4114f0 100644
--- a/tstest/integration/vms/vms_steps_test.go
+++ b/tstest/integration/vms/vms_steps_test.go
@@ -23,7 +23,7 @@ func retry(t *testing.T, fn func() error) {
t.Helper()
const tries = 3
var err error
- for i := 0; i < tries; i++ {
+ for i := range tries {
err = fn()
if err != nil {
t.Logf("%dth invocation failed, trying again: %v", i, err)
diff --git a/tstest/integration/vms/vms_test.go b/tstest/integration/vms/vms_test.go
index e7167c2b8..6d73a3f78 100644
--- a/tstest/integration/vms/vms_test.go
+++ b/tstest/integration/vms/vms_test.go
@@ -321,7 +321,7 @@ func (h *Harness) setupSSHShell(t *testing.T, d Distro, ipm ipMapping) (*ssh.Cli
// don't use socket activation.
const maxRetries = 5
var working bool
- for i := 0; i < maxRetries; i++ {
+ for range maxRetries {
cli, err := ssh.Dial("tcp", hostport, ccfg)
if err == nil {
working = true
diff --git a/tstest/natlab/natlab_test.go b/tstest/natlab/natlab_test.go
index 4e9a48582..843883732 100644
--- a/tstest/natlab/natlab_test.go
+++ b/tstest/natlab/natlab_test.go
@@ -17,7 +17,7 @@ import (
func TestAllocIPs(t *testing.T) {
n := NewInternet()
saw := map[netip.Addr]bool{}
- for i := 0; i < 255; i++ {
+ for range 255 {
for _, f := range []func(*Interface) netip.Addr{n.allocIPv4, n.allocIPv6} {
ip := f(nil)
if saw[ip] {
diff --git a/tstest/resource.go b/tstest/resource.go
index 4ca9fc928..a3c292094 100644
--- a/tstest/resource.go
+++ b/tstest/resource.go
@@ -33,7 +33,7 @@ func ResourceCheck(tb testing.TB) {
return
}
// Goroutines might be still exiting.
- for i := 0; i < 300; i++ {
+ for range 300 {
if runtime.NumGoroutine() <= startN {
return
}
diff --git a/tstime/jitter_test.go b/tstime/jitter_test.go
index 93b90ccc0..579287bda 100644
--- a/tstime/jitter_test.go
+++ b/tstime/jitter_test.go
@@ -14,7 +14,7 @@ func TestRandomDurationBetween(t *testing.T) {
}
const min = 1 * time.Second
const max = 10 * time.Second
- for i := 0; i < 500; i++ {
+ for range 500 {
if got := RandomDurationBetween(min, max); got < min || got >= max {
t.Fatalf("%v (%d) out of range", got, got)
}
diff --git a/tstime/mono/mono_test.go b/tstime/mono/mono_test.go
index f425abe9a..67a8614ba 100644
--- a/tstime/mono/mono_test.go
+++ b/tstime/mono/mono_test.go
@@ -50,14 +50,14 @@ func TestJSONRoundtrip(t *testing.T) {
func BenchmarkMonoNow(b *testing.B) {
b.ReportAllocs()
- for i := 0; i < b.N; i++ {
+ for range b.N {
Now()
}
}
func BenchmarkTimeNow(b *testing.B) {
b.ReportAllocs()
- for i := 0; i < b.N; i++ {
+ for range b.N {
time.Now()
}
}
diff --git a/tstime/rate/rate_test.go b/tstime/rate/rate_test.go
index 3099cbae8..dc3f9e84b 100644
--- a/tstime/rate/rate_test.go
+++ b/tstime/rate/rate_test.go
@@ -7,8 +7,6 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-//go:build go1.7
-
package rate
import (
@@ -138,7 +136,7 @@ func TestSimultaneousRequests(t *testing.T) {
}
wg.Add(numRequests)
- for i := 0; i < numRequests; i++ {
+ for range numRequests {
go f()
}
wg.Wait()
diff --git a/tstime/rate/value_test.go b/tstime/rate/value_test.go
index dd9a803b1..a26442650 100644
--- a/tstime/rate/value_test.go
+++ b/tstime/rate/value_test.go
@@ -43,7 +43,7 @@ func TestValue(t *testing.T) {
c := qt.New(t)
var v Value
var now mono.Time
- for i := 0; i < numStep; i++ {
+ for range numStep {
v.addNow(now, float64(step))
now += step
}
@@ -232,7 +232,7 @@ func stats(fs []float64) (mean, stddev float64) {
func BenchmarkValue(b *testing.B) {
b.ReportAllocs()
v := Value{HalfLife: time.Second}
- for i := 0; i < b.N; i++ {
+ for range b.N {
v.Add(1)
}
}
diff --git a/tsweb/tsweb_test.go b/tsweb/tsweb_test.go
index cd3c99fce..4f4f03aff 100644
--- a/tsweb/tsweb_test.go
+++ b/tsweb/tsweb_test.go
@@ -521,7 +521,7 @@ func BenchmarkLogNot200(b *testing.B) {
h := StdHandler(rh, HandlerOptions{QuietLoggingIfSuccessful: true})
req := httptest.NewRequest("GET", "/", nil)
rw := new(httptest.ResponseRecorder)
- for i := 0; i < b.N; i++ {
+ for range b.N {
*rw = httptest.ResponseRecorder{}
h.ServeHTTP(rw, req)
}
@@ -536,7 +536,7 @@ func BenchmarkLog(b *testing.B) {
h := StdHandler(rh, HandlerOptions{})
req := httptest.NewRequest("GET", "/", nil)
rw := new(httptest.ResponseRecorder)
- for i := 0; i < b.N; i++ {
+ for range b.N {
*rw = httptest.ResponseRecorder{}
h.ServeHTTP(rw, req)
}
diff --git a/types/ipproto/ipproto_test.go b/types/ipproto/ipproto_test.go
index 1ebeeee9f..102b79cff 100644
--- a/types/ipproto/ipproto_test.go
+++ b/types/ipproto/ipproto_test.go
@@ -49,7 +49,7 @@ func TestAcceptedNamesContainsPreferredNames(t *testing.T) {
}
func TestProtoTextEncodingRoundTrip(t *testing.T) {
- for i := 0; i < 256; i++ {
+ for i := range 256 {
text := must.Get(Proto(i).MarshalText())
var p Proto
must.Do(p.UnmarshalText(text))
@@ -67,7 +67,7 @@ func TestProtoUnmarshalText(t *testing.T) {
t.Fatalf("empty input, got err=%v, p=%v, want nil, 0", err, p)
}
- for i := 0; i < 256; i++ {
+ for i := range 256 {
var p Proto
must.Do(p.UnmarshalText([]byte(fmt.Sprintf("%d", i))))
if got, want := p, Proto(i); got != want {
@@ -93,7 +93,7 @@ func TestProtoUnmarshalText(t *testing.T) {
}
func TestProtoMarshalText(t *testing.T) {
- for i := 0; i < 256; i++ {
+ for i := range 256 {
text := must.Get(Proto(i).MarshalText())
if wantName, ok := preferredNames[Proto(i)]; ok {
@@ -110,7 +110,7 @@ func TestProtoMarshalText(t *testing.T) {
}
func TestProtoMarshalJSON(t *testing.T) {
- for i := 0; i < 256; i++ {
+ for i := range 256 {
j := must.Get(Proto(i).MarshalJSON())
if got, want := string(j), fmt.Sprintf(`%d`, i); got != want {
t.Errorf("Proto(%d).MarshalJSON() = %q, want %q", i, got, want)
@@ -121,7 +121,7 @@ func TestProtoMarshalJSON(t *testing.T) {
func TestProtoUnmarshalJSON(t *testing.T) {
var p Proto
- for i := 0; i < 256; i++ {
+ for i := range 256 {
j := []byte(fmt.Sprintf(`%d`, i))
must.Do(json.Unmarshal(j, &p))
if got, want := p, Proto(i); got != want {
diff --git a/types/key/node_test.go b/types/key/node_test.go
index edbd9e927..80a2dadf9 100644
--- a/types/key/node_test.go
+++ b/types/key/node_test.go
@@ -162,7 +162,7 @@ func TestChallenge(t *testing.T) {
func TestShard(t *testing.T) {
const N = 1_000
var shardCount [256]int
- for i := 0; i < N; i++ {
+ for range N {
shardCount[NewNode().Public().Shard()]++
}
e := float64(N) / 256 // expected
diff --git a/types/key/util_test.go b/types/key/util_test.go
index accef8ddd..4d6f82422 100644
--- a/types/key/util_test.go
+++ b/types/key/util_test.go
@@ -22,7 +22,7 @@ func TestRand(t *testing.T) {
}
func TestClamp25519Private(t *testing.T) {
- for i := 0; i < 100; i++ {
+ for range 100 {
var k [32]byte
rand(k[:])
clamp25519Private(k[:])
diff --git a/types/lazy/sync_test.go b/types/lazy/sync_test.go
index ac92c4914..d7bc913f7 100644
--- a/types/lazy/sync_test.go
+++ b/types/lazy/sync_test.go
@@ -89,7 +89,7 @@ func TestSyncValueConcurrent(t *testing.T) {
routines = 10000
)
wg.Add(routines)
- for i := 0; i < routines; i++ {
+ for range routines {
go func() {
defer wg.Done()
// Every goroutine waits for the go signal, so that more of them
diff --git a/types/logger/logger_test.go b/types/logger/logger_test.go
index 2d06ab851..52c1d3900 100644
--- a/types/logger/logger_test.go
+++ b/types/logger/logger_test.go
@@ -70,7 +70,7 @@ func TestRateLimiter(t *testing.T) {
lgtest := logTester(want, t, &testsRun)
lg := RateLimitedFnWithClock(lgtest, 1*time.Minute, 2, 50, nowf)
var prefixed Logf
- for i := 0; i < 10; i++ {
+ for i := range 10 {
lg("boring string with constant formatting %s", "(constant)")
lg("templated format string no. %d", i)
if i == 4 {
@@ -121,7 +121,7 @@ func TestLogOnChange(t *testing.T) {
lgtest := logTester(want, t, &testsRun)
lg := LogOnChange(lgtest, 5*time.Second, timeNow)
- for i := 0; i < 10; i++ {
+ for range 10 {
lg("%s", "1 2 3 4 5 6")
}
lg("1 2 3 4 5 7")
diff --git a/types/netmap/netmap.go b/types/netmap/netmap.go
index de187f5f8..13806b5a8 100644
--- a/types/netmap/netmap.go
+++ b/types/netmap/netmap.go
@@ -137,7 +137,7 @@ func (nm *NetworkMap) PeerByTailscaleIP(ip netip.Addr) (peer tailcfg.NodeView, o
}
for _, n := range nm.Peers {
ad := n.Addresses()
- for i := 0; i < ad.Len(); i++ {
+ for i := range ad.Len() {
a := ad.At(i)
if a.Addr() == ip {
return n, true
diff --git a/types/netmap/nodemut.go b/types/netmap/nodemut.go
index be224efed..46fbaefc6 100644
--- a/types/netmap/nodemut.go
+++ b/types/netmap/nodemut.go
@@ -73,7 +73,7 @@ func (m NodeMutationLastSeen) Apply(n *tailcfg.Node) {
var peerChangeFields = sync.OnceValue(func() []reflect.StructField {
var fields []reflect.StructField
rt := reflect.TypeFor[tailcfg.PeerChange]()
- for i := 0; i < rt.NumField(); i++ {
+ for i := range rt.NumField() {
fields = append(fields, rt.Field(i))
}
return fields
diff --git a/types/netmap/nodemut_test.go b/types/netmap/nodemut_test.go
index ef20ca6f5..374f8623a 100644
--- a/types/netmap/nodemut_test.go
+++ b/types/netmap/nodemut_test.go
@@ -44,7 +44,7 @@ func TestMapResponseContainsNonPatchFields(t *testing.T) {
}
rt := reflect.TypeFor[tailcfg.MapResponse]()
- for i := 0; i < rt.NumField(); i++ {
+ for i := range rt.NumField() {
f := rt.Field(i)
var want bool
diff --git a/types/persist/persist_test.go b/types/persist/persist_test.go
index 99128f891..920f0c448 100644
--- a/types/persist/persist_test.go
+++ b/types/persist/persist_test.go
@@ -12,7 +12,7 @@ import (
)
func fieldsOf(t reflect.Type) (fields []string) {
- for i := 0; i < t.NumField(); i++ {
+ for i := range t.NumField() {
if name := t.Field(i).Name; name != "_" {
fields = append(fields, name)
}
diff --git a/types/views/views.go b/types/views/views.go
index 0032bd462..7ff0234a4 100644
--- a/types/views/views.go
+++ b/types/views/views.go
@@ -262,7 +262,7 @@ func (v Slice[T]) AsSlice() []T {
//
// As it runs in O(n) time, use with care.
func (v Slice[T]) IndexFunc(f func(T) bool) int {
- for i := 0; i < v.Len(); i++ {
+ for i := range v.Len() {
if f(v.At(i)) {
return i
}
diff --git a/types/views/views_test.go b/types/views/views_test.go
index 933d72395..96c1a8b9c 100644
--- a/types/views/views_test.go
+++ b/types/views/views_test.go
@@ -24,7 +24,7 @@ type viewStruct struct {
func BenchmarkSliceIteration(b *testing.B) {
var data []viewStruct
- for i := 0; i < 10000; i++ {
+ for i := range 10000 {
data = append(data, viewStruct{Int: i})
}
b.ResetTimer()
@@ -33,7 +33,7 @@ func BenchmarkSliceIteration(b *testing.B) {
dv := SliceOf(data)
for it := 0; it < b.N; it++ {
sum := 0
- for i := 0; i < dv.Len(); i++ {
+ for i := range dv.Len() {
sum += dv.At(i).Int
}
}
@@ -181,7 +181,7 @@ func TestSliceMapKey(t *testing.T) {
}
wantDiff := []Slice[string]{nilSlice, empty, sub1, sub2, sub3, u3}
- for i := 0; i < len(wantDiff); i++ {
+ for i := range len(wantDiff) {
for j := i + 1; j < len(wantDiff); j++ {
si, sj := wantDiff[i], wantDiff[j]
ki, kj := wantDiff[i].MapKey(), wantDiff[j].MapKey()
diff --git a/util/codegen/codegen.go b/util/codegen/codegen.go
index cf848b1d2..6c2b3c71e 100644
--- a/util/codegen/codegen.go
+++ b/util/codegen/codegen.go
@@ -201,7 +201,7 @@ func AssertStructUnchanged(t *types.Struct, tname, ctx string, it *ImportTracker
w("// A compilation failure here means this code must be regenerated, with the command at the top of this file.")
w("var _%s%sNeedsRegeneration = %s(struct {", tname, ctx, tname)
- for i := 0; i < t.NumFields(); i++ {
+ for i := range t.NumFields() {
st := t.Field(i)
fname := st.Name()
ft := t.Field(i).Type()
@@ -253,7 +253,7 @@ func ContainsPointers(typ types.Type) bool {
case *types.Slice:
return true
case *types.Struct:
- for i := 0; i < ft.NumFields(); i++ {
+ for i := range ft.NumFields() {
if ContainsPointers(ft.Field(i).Type()) {
return true
}
diff --git a/util/cstruct/cstruct_test.go b/util/cstruct/cstruct_test.go
index 90e21841b..5a75f3385 100644
--- a/util/cstruct/cstruct_test.go
+++ b/util/cstruct/cstruct_test.go
@@ -78,7 +78,7 @@ func TestDecoder(t *testing.T) {
dec := func(n int) *Decoder {
// Make a buffer of the exact size that consists of 0xff bytes
buf := make([]byte, n)
- for i := 0; i < n; i++ {
+ for i := range n {
buf[i] = 0xff
}
@@ -108,7 +108,7 @@ func TestDecoder(t *testing.T) {
dec := func(n int) *Decoder {
// Make a buffer that's too small and contains arbitrary bytes
buf := make([]byte, n-1)
- for i := 0; i < n-1; i++ {
+ for i := range n - 1 {
buf[i] = 0xAD
}
diff --git a/util/deephash/deephash.go b/util/deephash/deephash.go
index 1993649e3..29f47e338 100644
--- a/util/deephash/deephash.go
+++ b/util/deephash/deephash.go
@@ -47,7 +47,7 @@
//
// var big *Item = ... // some large data structure that is slow to hash
// var manyBig []*Item
-// for i := 0; i < 1000; i++ {
+// for i := range 1000 {
// manyBig = append(manyBig, &big)
// }
// deephash.Hash(manyBig)
@@ -208,7 +208,7 @@ type Sum struct {
}
func (s1 *Sum) xor(s2 Sum) {
- for i := 0; i < sha256.Size; i++ {
+ for i := range sha256.Size {
s1.sum[i] ^= s2.sum[i]
}
}
@@ -492,7 +492,7 @@ func makeArrayHasher(t reflect.Type) typeHasherFunc {
nb := t.Elem().Size() // byte size of each array element
return func(h *hasher, p pointer) {
once.Do(init)
- for i := 0; i < n; i++ {
+ for i := range n {
hashElem(h, p.arrayIndex(i, nb))
}
}
@@ -545,7 +545,7 @@ func makeSliceHasher(t reflect.Type) typeHasherFunc {
h.HashUint8(1) // indicates visiting slice
n := p.sliceLen()
h.HashUint64(uint64(n))
- for i := 0; i < n; i++ {
+ for i := range n {
pe := pa.arrayIndex(i, nb)
hashElem(h, pe)
}
diff --git a/util/deephash/deephash_test.go b/util/deephash/deephash_test.go
index 52b874f89..51b0bfa10 100644
--- a/util/deephash/deephash_test.go
+++ b/util/deephash/deephash_test.go
@@ -202,7 +202,7 @@ func TestDeepHash(t *testing.T) {
v := getVal()
hash1 := Hash(v)
t.Logf("hash: %v", hash1)
- for i := 0; i < 20; i++ {
+ for range 20 {
v := getVal()
hash2 := Hash(v)
if hash1 != hash2 {
@@ -760,7 +760,7 @@ var sink Sum
func BenchmarkHash(b *testing.B) {
b.ReportAllocs()
v := getVal()
- for i := 0; i < b.N; i++ {
+ for range b.N {
sink = Hash(v)
}
}
@@ -809,14 +809,14 @@ var filterRules = []tailcfg.FilterRule{
func BenchmarkHashPacketFilter(b *testing.B) {
b.ReportAllocs()
- for i := 0; i < b.N; i++ {
+ for range b.N {
sink = Hash(&filterRules)
}
}
func TestHashMapAcyclic(t *testing.T) {
m := map[int]string{}
- for i := 0; i < 100; i++ {
+ for i := range 100 {
m[i] = fmt.Sprint(i)
}
got := map[string]bool{}
@@ -824,7 +824,7 @@ func TestHashMapAcyclic(t *testing.T) {
hb := &hashBuffer{Hash: sha256.New()}
hash := lookupTypeHasher(reflect.TypeFor[map[int]string]())
- for i := 0; i < 20; i++ {
+ for range 20 {
va := reflect.ValueOf(&m).Elem()
hb.Reset()
h := new(hasher)
@@ -862,7 +862,7 @@ func TestPrintArray(t *testing.T) {
func BenchmarkHashMapAcyclic(b *testing.B) {
b.ReportAllocs()
m := map[int]string{}
- for i := 0; i < 100; i++ {
+ for i := range 100 {
m[i] = fmt.Sprint(i)
}
@@ -873,7 +873,7 @@ func BenchmarkHashMapAcyclic(b *testing.B) {
h := new(hasher)
h.Block512.Hash = hb
- for i := 0; i < b.N; i++ {
+ for range b.N {
h.Reset()
hash(h, pointerOf(va.Addr()))
}
@@ -883,14 +883,14 @@ func BenchmarkTailcfgNode(b *testing.B) {
b.ReportAllocs()
node := new(tailcfg.Node)
- for i := 0; i < b.N; i++ {
+ for range b.N {
sink = Hash(node)
}
}
func TestExhaustive(t *testing.T) {
seen := make(map[Sum]bool)
- for i := 0; i < 100000; i++ {
+ for i := range 100000 {
s := Hash(&i)
if seen[s] {
t.Fatalf("hash collision %v", i)
@@ -971,7 +971,7 @@ func BenchmarkHashArray(b *testing.B) {
}
x := &T{X: [32]byte{1: 1, 2: 2, 3: 3, 4: 4}}
- for i := 0; i < b.N; i++ {
+ for range b.N {
sink = Hash(x)
}
}
@@ -1134,7 +1134,7 @@ func BenchmarkAppendTo(b *testing.B) {
hashBuf := make([]byte, 0, 100)
b.ResetTimer()
- for i := 0; i < b.N; i++ {
+ for range b.N {
hashBuf = h.AppendTo(hashBuf[:0])
}
}
diff --git a/util/dnsname/dnsname.go b/util/dnsname/dnsname.go
index 6481a5867..dde0baaed 100644
--- a/util/dnsname/dnsname.go
+++ b/util/dnsname/dnsname.go
@@ -40,7 +40,7 @@ func ToFQDN(s string) (FQDN, error) {
}
st := 0
- for i := 0; i < len(s); i++ {
+ for i := range len(s) {
if s[i] != '.' {
continue
}
diff --git a/util/dnsname/dnsname_test.go b/util/dnsname/dnsname_test.go
index 563959d33..719e28be3 100644
--- a/util/dnsname/dnsname_test.go
+++ b/util/dnsname/dnsname_test.go
@@ -224,7 +224,7 @@ func BenchmarkToFQDN(b *testing.B) {
for _, test := range tests {
b.Run(test, func(b *testing.B) {
b.ReportAllocs()
- for i := 0; i < b.N; i++ {
+ for range b.N {
sinkFQDN, _ = ToFQDN(test)
}
})
diff --git a/util/expvarx/expvarx_test.go b/util/expvarx/expvarx_test.go
index 16a989928..74ec152f4 100644
--- a/util/expvarx/expvarx_test.go
+++ b/util/expvarx/expvarx_test.go
@@ -113,7 +113,7 @@ func TestSafeFuncSlowOnSlow(t *testing.T) {
slowValue.Store(v)
})
- for i := 0; i < 10; i++ {
+ for range 10 {
if got := f.Value(); got != nil {
t.Fatalf("got value=%v; want nil", got)
}
diff --git a/util/fastuuid/fastuuid_test.go b/util/fastuuid/fastuuid_test.go
index b514d6daa..f0d993904 100644
--- a/util/fastuuid/fastuuid_test.go
+++ b/util/fastuuid/fastuuid_test.go
@@ -23,21 +23,21 @@ func TestNewUUID(t *testing.T) {
func BenchmarkBasic(b *testing.B) {
b.Run("NewUUID", func(b *testing.B) {
- for i := 0; i < b.N; i++ {
+ for range b.N {
NewUUID()
}
})
b.Run("uuid.New-unpooled", func(b *testing.B) {
uuid.DisableRandPool()
- for i := 0; i < b.N; i++ {
+ for range b.N {
uuid.New()
}
})
b.Run("uuid.New-pooled", func(b *testing.B) {
uuid.EnableRandPool()
- for i := 0; i < b.N; i++ {
+ for range b.N {
uuid.New()
}
})
diff --git a/util/hashx/block512_test.go b/util/hashx/block512_test.go
index 5c0f0581c..ca3ee0d78 100644
--- a/util/hashx/block512_test.go
+++ b/util/hashx/block512_test.go
@@ -46,7 +46,7 @@ type hasher interface {
}
func hashSuite(h hasher) {
- for i := 0; i < 10; i++ {
+ for i := range 10 {
for j := 0; j < 10; j++ {
h.HashUint8(0x01)
h.HashUint8(0x23)
@@ -133,7 +133,7 @@ func Fuzz(f *testing.F) {
c := qt.New(t)
execute := func(h hasher, r *rand.Rand) {
- for i := 0; i < r.Intn(256); i++ {
+ for range r.Intn(256) {
switch r.Intn(5) {
case 0:
n := uint8(r.Uint64())
@@ -186,7 +186,7 @@ func Benchmark(b *testing.B) {
b.Run("Hash", func(b *testing.B) {
b.ReportAllocs()
h := must.Get(New512(sha256.New()))
- for i := 0; i < b.N; i++ {
+ for range b.N {
h.Reset()
hashSuite(h)
h.Sum(sum[:0])
@@ -195,7 +195,7 @@ func Benchmark(b *testing.B) {
b.Run("Naive", func(b *testing.B) {
b.ReportAllocs()
h := newNaive()
- for i := 0; i < b.N; i++ {
+ for range b.N {
h.Reset()
hashSuite(h)
h.Sum(sum[:0])
diff --git a/util/jsonutil/unmarshal_test.go b/util/jsonutil/unmarshal_test.go
index b9d87c218..32f8402f0 100644
--- a/util/jsonutil/unmarshal_test.go
+++ b/util/jsonutil/unmarshal_test.go
@@ -49,7 +49,7 @@ func BenchmarkUnmarshal(b *testing.B) {
var m any
j := []byte("5")
b.ReportAllocs()
- for i := 0; i < b.N; i++ {
+ for range b.N {
Unmarshal(j, &m)
}
}
@@ -58,7 +58,7 @@ func BenchmarkStdUnmarshal(b *testing.B) {
var m any
j := []byte("5")
b.ReportAllocs()
- for i := 0; i < b.N; i++ {
+ for range b.N {
json.Unmarshal(j, &m)
}
}
diff --git a/util/limiter/limiter_test.go b/util/limiter/limiter_test.go
index 098a9ece1..1f466d882 100644
--- a/util/limiter/limiter_test.go
+++ b/util/limiter/limiter_test.go
@@ -177,7 +177,7 @@ func TestDumpHTML(t *testing.T) {
func allowed(t *testing.T, l *Limiter[string], key string, count int, now time.Time) {
t.Helper()
- for i := 0; i < count; i++ {
+ for i := range count {
if !l.allow(key, now) {
toks, ok := l.tokensForTest(key)
t.Errorf("after %d times: allow(%q, %q) = false, want true (%d tokens available, in cache = %v)", i, key, now, toks, ok)
@@ -187,7 +187,7 @@ func allowed(t *testing.T, l *Limiter[string], key string, count int, now time.T
func denied(t *testing.T, l *Limiter[string], key string, count int, now time.Time) {
t.Helper()
- for i := 0; i < count; i++ {
+ for i := range count {
if l.allow(key, now) {
toks, ok := l.tokensForTest(key)
t.Errorf("after %d times: allow(%q, %q) = true, want false (%d tokens available, in cache = %v)", i, key, now, toks, ok)
diff --git a/util/lru/lru_test.go b/util/lru/lru_test.go
index ea78b9229..3c4228a3f 100644
--- a/util/lru/lru_test.go
+++ b/util/lru/lru_test.go
@@ -77,7 +77,7 @@ func TestStressEvictions(t *testing.T) {
MaxEntries: cacheSize,
}
- for i := 0; i < numProbes; i++ {
+ for range numProbes {
v := vals[rand.Intn(len(vals))]
c.Set(v, true)
if l := c.Len(); l > cacheSize {
@@ -106,7 +106,7 @@ func TestStressBatchedEvictions(t *testing.T) {
c := Cache[uint64, bool]{}
- for i := 0; i < numProbes; i++ {
+ for range numProbes {
v := vals[rand.Intn(len(vals))]
c.Set(v, true)
if c.Len() == cacheSizeMax {
@@ -127,7 +127,7 @@ func TestLRUStress(t *testing.T) {
maxSize = 500
numProbes = 5_000
)
- for i := 0; i < numProbes; i++ {
+ for range numProbes {
n := rand.Intn(maxSize * 2)
op := rand.Intn(4)
switch op {
@@ -230,7 +230,7 @@ func BenchmarkLRU(b *testing.B) {
c := Cache[int, bool]{MaxEntries: lruSize}
b.ReportAllocs()
- for i := 0; i < b.N; i++ {
+ for range b.N {
k := rand.Intn(maxval)
if !c.Get(k) {
c.Set(k, true)
diff --git a/util/multierr/multierr_test.go b/util/multierr/multierr_test.go
index 031b449a1..de7721a66 100644
--- a/util/multierr/multierr_test.go
+++ b/util/multierr/multierr_test.go
@@ -111,7 +111,7 @@ var sink error
func BenchmarkEmpty(b *testing.B) {
b.ReportAllocs()
- for i := 0; i < b.N; i++ {
+ for range b.N {
sink = multierr.New(nil, nil, nil, multierr.Error{})
}
}
@@ -119,7 +119,7 @@ func BenchmarkEmpty(b *testing.B) {
func BenchmarkNonEmpty(b *testing.B) {
merr := multierr.New(io.ErrShortBuffer, io.ErrNoProgress)
b.ReportAllocs()
- for i := 0; i < b.N; i++ {
+ for range b.N {
sink = multierr.New(io.ErrUnexpectedEOF, merr, io.ErrClosedPipe)
}
}
diff --git a/util/nocasemaps/nocase.go b/util/nocasemaps/nocase.go
index 4da7e6c9b..2d91d8fe9 100644
--- a/util/nocasemaps/nocase.go
+++ b/util/nocasemaps/nocase.go
@@ -91,7 +91,7 @@ func AppendSliceElem[K ~string, S []E, E any](m map[K]S, k K, vs ...E) {
}
func isLowerASCII(s string) bool {
- for i := 0; i < len(s); i++ {
+ for i := range len(s) {
if c := s[i]; c >= utf8.RuneSelf || ('A' <= c && c <= 'Z') {
return false
}
diff --git a/util/nocasemaps/nocase_test.go b/util/nocasemaps/nocase_test.go
index 7d99f38ff..5275b3ee6 100644
--- a/util/nocasemaps/nocase_test.go
+++ b/util/nocasemaps/nocase_test.go
@@ -112,13 +112,13 @@ func Benchmark(b *testing.B) {
b.Run("Get", func(b *testing.B) {
b.Run("Naive", func(b *testing.B) {
b.ReportAllocs()
- for i := 0; i < b.N; i++ {
+ for range b.N {
testSink = testMap[strings.ToLower(key)]
}
})
b.Run("NoCase", func(b *testing.B) {
b.ReportAllocs()
- for i := 0; i < b.N; i++ {
+ for range b.N {
testSink = Get(testMap, key)
}
})
@@ -127,7 +127,7 @@ func Benchmark(b *testing.B) {
b.Run("Naive", func(b *testing.B) {
b.ReportAllocs()
testMap[strings.ToLower(key)] = testValue
- for i := 0; i < b.N; i++ {
+ for range b.N {
testMap[strings.ToLower(key)] = testValue
}
xmaps.Clear(testMap)
@@ -135,7 +135,7 @@ func Benchmark(b *testing.B) {
b.Run("NoCase", func(b *testing.B) {
b.ReportAllocs()
Set(testMap, key, testValue)
- for i := 0; i < b.N; i++ {
+ for range b.N {
Set(testMap, key, testValue)
}
xmaps.Clear(testMap)
@@ -144,13 +144,13 @@ func Benchmark(b *testing.B) {
b.Run("Delete", func(b *testing.B) {
b.Run("Naive", func(b *testing.B) {
b.ReportAllocs()
- for i := 0; i < b.N; i++ {
+ for range b.N {
delete(testMap, strings.ToLower(key))
}
})
b.Run("NoCase", func(b *testing.B) {
b.ReportAllocs()
- for i := 0; i < b.N; i++ {
+ for range b.N {
Delete(testMap, key)
}
})
diff --git a/util/pidowner/pidowner_test.go b/util/pidowner/pidowner_test.go
index 960a0e930..19c9ab46d 100644
--- a/util/pidowner/pidowner_test.go
+++ b/util/pidowner/pidowner_test.go
@@ -31,7 +31,7 @@ func TestOwnerOfPID(t *testing.T) {
func TestNotFoundError(t *testing.T) {
// Try a bunch of times to stumble upon a pid that doesn't exist...
const tries = 50
- for i := 0; i < tries; i++ {
+ for range tries {
_, err := OwnerOfPID(rand.Intn(1e9))
if err == ErrNotImplemented {
t.Skip(err)
diff --git a/util/race/race.go b/util/race/race.go
index 041ce546f..26c8e13eb 100644
--- a/util/race/race.go
+++ b/util/race/race.go
@@ -87,7 +87,7 @@ func (rh *Race[T]) Start(ctx context.Context) (T, error) {
// For each possible result, get it off the channel.
var errs []error
- for i := 0; i < 2; i++ {
+ for range 2 {
res := <-rh.results
// If this was an error, store it and hope that the other
diff --git a/util/ringbuffer/ringbuffer.go b/util/ringbuffer/ringbuffer.go
index d30cf9171..baca2afe8 100644
--- a/util/ringbuffer/ringbuffer.go
+++ b/util/ringbuffer/ringbuffer.go
@@ -51,7 +51,7 @@ func (rb *RingBuffer[T]) GetAll() []T {
rb.mu.Lock()
defer rb.mu.Unlock()
out := make([]T, len(rb.buf))
- for i := 0; i < len(rb.buf); i++ {
+ for i := range len(rb.buf) {
x := (rb.pos + i) % rb.max
out[i] = rb.buf[x]
}
diff --git a/util/ringbuffer/ringbuffer_test.go b/util/ringbuffer/ringbuffer_test.go
index fae3f5328..e10096bfb 100644
--- a/util/ringbuffer/ringbuffer_test.go
+++ b/util/ringbuffer/ringbuffer_test.go
@@ -12,7 +12,7 @@ func TestRingBuffer(t *testing.T) {
const numItems = 10
rb := New[int](numItems)
- for i := 0; i < numItems-1; i++ {
+ for i := range numItems - 1 {
rb.Add(i)
}
diff --git a/util/set/slice.go b/util/set/slice.go
index 9c300cc28..38551aee1 100644
--- a/util/set/slice.go
+++ b/util/set/slice.go
@@ -67,7 +67,7 @@ func (ss *Slice[T]) Add(vs ...T) {
// AddSlice adds all elements in vs to the set.
func (ss *Slice[T]) AddSlice(vs views.Slice[T]) {
- for i := 0; i < vs.Len(); i++ {
+ for i := range vs.Len() {
ss.Add(vs.At(i))
}
}
diff --git a/util/singleflight/singleflight_test.go b/util/singleflight/singleflight_test.go
index 26a08ed60..b98fae885 100644
--- a/util/singleflight/singleflight_test.go
+++ b/util/singleflight/singleflight_test.go
@@ -69,7 +69,7 @@ func TestDoDupSuppress(t *testing.T) {
const n = 10
wg1.Add(1)
- for i := 0; i < n; i++ {
+ for range n {
wg1.Add(1)
wg2.Add(1)
go func() {
@@ -167,7 +167,7 @@ func TestPanicDo(t *testing.T) {
waited := int32(n)
panicCount := int32(0)
done := make(chan struct{})
- for i := 0; i < n; i++ {
+ for range n {
go func() {
defer func() {
if err := recover(); err != nil {
@@ -204,7 +204,7 @@ func TestGoexitDo(t *testing.T) {
const n = 5
waited := int32(n)
done := make(chan struct{})
- for i := 0; i < n; i++ {
+ for range n {
go func() {
var err error
defer func() {
diff --git a/util/slicesx/slicesx_test.go b/util/slicesx/slicesx_test.go
index b4806f6b3..46bd666c3 100644
--- a/util/slicesx/slicesx_test.go
+++ b/util/slicesx/slicesx_test.go
@@ -38,7 +38,7 @@ func TestInterleave(t *testing.T) {
func BenchmarkInterleave(b *testing.B) {
b.ReportAllocs()
b.ResetTimer()
- for i := 0; i < b.N; i++ {
+ for range b.N {
Interleave(
[]int{1, 2, 3},
[]int{9, 8, 7},
@@ -48,7 +48,7 @@ func BenchmarkInterleave(b *testing.B) {
func TestShuffle(t *testing.T) {
var sl []int
- for i := 0; i < 100; i++ {
+ for i := range 100 {
sl = append(sl, i)
}
diff --git a/util/topk/topk.go b/util/topk/topk.go
index aef779102..d3bbb2c6d 100644
--- a/util/topk/topk.go
+++ b/util/topk/topk.go
@@ -145,7 +145,7 @@ func PickParams(err, probability float64) (hashes, buckets int) {
}
func (cms *CountMinSketch) init(hashes, buckets int) {
- for i := 0; i < hashes; i++ {
+ for range hashes {
cms.hashes = append(cms.hashes, maphash.MakeSeed())
}
diff --git a/util/topk/topk_test.go b/util/topk/topk_test.go
index 499948b5f..d30342e90 100644
--- a/util/topk/topk_test.go
+++ b/util/topk/topk_test.go
@@ -49,7 +49,7 @@ func TestTopK(t *testing.T) {
}, 4, 1000)
// Add the first 10 integers with counts equal to 2x their value
- for i := 0; i < 10; i++ {
+ for i := range 10 {
topk.AddN(i, uint64(i*2))
}
@@ -82,7 +82,7 @@ func BenchmarkCountMinSketch(b *testing.B) {
b.ReportAllocs()
var enc [8]byte
- for i := 0; i < b.N; i++ {
+ for i := range b.N {
binary.LittleEndian.PutUint64(enc[:], uint64(i))
cms.Add(enc[:])
}
@@ -104,7 +104,7 @@ func BenchmarkTopK(b *testing.B) {
b.ResetTimer()
b.ReportAllocs()
- for i := 0; i < b.N; i++ {
+ for i := range b.N {
topk.Add(i)
}
out = topk.AppendTop(out[:0]) // should not allocate
diff --git a/util/uniq/slice_test.go b/util/uniq/slice_test.go
index eed0d5fd5..564fc0866 100644
--- a/util/uniq/slice_test.go
+++ b/util/uniq/slice_test.go
@@ -94,7 +94,7 @@ func benchmark(b *testing.B, size int64, reset func(s []byte)) {
b.SetBytes(size)
s := make([]byte, size)
b.ResetTimer()
- for i := 0; i < b.N; i++ {
+ for range b.N {
s = s[:size]
reset(s)
uniq.ModifySlice(&s)
diff --git a/util/winutil/restartmgr_windows.go b/util/winutil/restartmgr_windows.go
index 981283dc8..ee10559b8 100644
--- a/util/winutil/restartmgr_windows.go
+++ b/util/winutil/restartmgr_windows.go
@@ -25,7 +25,7 @@ import (
var (
// ErrDefunctProcess is returned by (*UniqueProcess).AsRestartableProcess
// when the process no longer exists.
- ErrDefunctProcess = errors.New("process is defunct")
+ ErrDefunctProcess = errors.New("process is defunct")
// ErrProcessNotRestartable is returned by (*UniqueProcess).AsRestartableProcess
// when the process has previously indicated that it must not be restarted
// during a patch/upgrade.
diff --git a/util/winutil/restartmgr_windows_test.go b/util/winutil/restartmgr_windows_test.go
index 0293bc135..6b2d75c3c 100644
--- a/util/winutil/restartmgr_windows_test.go
+++ b/util/winutil/restartmgr_windows_test.go
@@ -67,7 +67,7 @@ func testRestartableProcessesImpl(N int, t *testing.T) {
const binary = "testrestartableprocesses"
fq := pathToTestProg(t, binary)
- for i := 0; i < N; i++ {
+ for range N {
startTestProg(t, binary, "RestartableProcess")
}
t.Cleanup(func() {
diff --git a/util/winutil/testdata/testrestartableprocesses/main.go b/util/winutil/testdata/testrestartableprocesses/main.go
index f5afdf769..0a83af630 100644
--- a/util/winutil/testdata/testrestartableprocesses/main.go
+++ b/util/winutil/testdata/testrestartableprocesses/main.go
@@ -10,7 +10,7 @@ import "os"
var (
cmds = map[string]func(){}
- err error
+ err error
)
func register(name string, f func()) {
diff --git a/util/zstdframe/zstd_test.go b/util/zstdframe/zstd_test.go
index fb012cde7..120fd3508 100644
--- a/util/zstdframe/zstd_test.go
+++ b/util/zstdframe/zstd_test.go
@@ -128,7 +128,7 @@ func BenchmarkEncode(b *testing.B) {
b.Run(bb.name, func(b *testing.B) {
b.ReportAllocs()
b.SetBytes(int64(len(src)))
- for i := 0; i < b.N; i++ {
+ for range b.N {
dst = AppendEncode(dst[:0], src, bb.opts...)
}
})
@@ -153,7 +153,7 @@ func BenchmarkDecode(b *testing.B) {
b.Run(bb.name, func(b *testing.B) {
b.ReportAllocs()
b.SetBytes(int64(len(src)))
- for i := 0; i < b.N; i++ {
+ for range b.N {
dst = must.Get(AppendDecode(dst[:0], src, bb.opts...))
}
})
@@ -164,12 +164,12 @@ func BenchmarkEncodeParallel(b *testing.B) {
numCPU := runtime.NumCPU()
for _, coder := range coders {
dsts = dsts[:0]
- for i := 0; i < numCPU; i++ {
+ for range numCPU {
dsts = append(dsts, coder.appendEncode(nil, src))
}
b.Run(coder.name, func(b *testing.B) {
b.ReportAllocs()
- for i := 0; i < b.N; i++ {
+ for range b.N {
var group sync.WaitGroup
for j := 0; j < numCPU; j++ {
group.Add(1)
@@ -189,12 +189,12 @@ func BenchmarkDecodeParallel(b *testing.B) {
for _, coder := range coders {
dsts = dsts[:0]
src := AppendEncode(nil, src)
- for i := 0; i < numCPU; i++ {
+ for range numCPU {
dsts = append(dsts, must.Get(coder.appendDecode(nil, src)))
}
b.Run(coder.name, func(b *testing.B) {
b.ReportAllocs()
- for i := 0; i < b.N; i++ {
+ for range b.N {
var group sync.WaitGroup
for j := 0; j < numCPU; j++ {
group.Add(1)
diff --git a/version/cmp.go b/version/cmp.go
index 857d43b1e..494a7ea72 100644
--- a/version/cmp.go
+++ b/version/cmp.go
@@ -159,7 +159,7 @@ func atoi(s string) (int, bool) {
}
un := uint(0)
- for i := 0; i < len(s); i++ {
+ for i := range len(s) {
c := s[i]
if c < '0' || c > '9' {
return 0, false
diff --git a/version/distro/distro_test.go b/version/distro/distro_test.go
index 63edb9299..4d61c7205 100644
--- a/version/distro/distro_test.go
+++ b/version/distro/distro_test.go
@@ -8,7 +8,7 @@ import "testing"
func BenchmarkGet(b *testing.B) {
b.ReportAllocs()
var d Distro
- for i := 0; i < b.N; i++ {
+ for range b.N {
d = Get()
}
_ = d
diff --git a/wgengine/filter/filter_test.go b/wgengine/filter/filter_test.go
index 1d7521821..588dcd57e 100644
--- a/wgengine/filter/filter_test.go
+++ b/wgengine/filter/filter_test.go
@@ -313,7 +313,7 @@ func BenchmarkFilter(b *testing.B) {
acl := newFilter(b.Logf)
b.ReportAllocs()
b.ResetTimer()
- for i := 0; i < b.N; i++ {
+ for range b.N {
q := &packet.Parsed{}
q.Decode(bench.packet)
// This branch seems to have no measurable impact on performance.
diff --git a/wgengine/magicsock/endpoint_tracker_test.go b/wgengine/magicsock/endpoint_tracker_test.go
index b6a2699c1..6fccdfd57 100644
--- a/wgengine/magicsock/endpoint_tracker_test.go
+++ b/wgengine/magicsock/endpoint_tracker_test.go
@@ -174,7 +174,7 @@ func TestEndpointTrackerMaxNum(t *testing.T) {
// the endpointTracker, we will return all of them (even if they're for
// the same address).
var inputEps []tailcfg.Endpoint
- for i := 0; i < endpointTrackerMaxPerAddr+5; i++ {
+ for i := range endpointTrackerMaxPerAddr + 5 {
inputEps = append(inputEps, tailcfg.Endpoint{
Addr: netip.AddrPortFrom(netip.MustParseAddr("1.2.3.4"), 10200+uint16(i)),
Type: tailcfg.EndpointSTUN,
diff --git a/wgengine/magicsock/magicsock_test.go b/wgengine/magicsock/magicsock_test.go
index 8bbab15e0..23f029eec 100644
--- a/wgengine/magicsock/magicsock_test.go
+++ b/wgengine/magicsock/magicsock_test.go
@@ -453,7 +453,7 @@ func TestPickDERPFallback(t *testing.T) {
}
// Test that it's consistent.
- for i := 0; i < 50; i++ {
+ for range 50 {
b := c.pickDERPFallback()
if a != b {
t.Fatalf("got inconsistent %d vs %d values", a, b)
@@ -463,7 +463,7 @@ func TestPickDERPFallback(t *testing.T) {
// Test that that the pointer value of c is blended in and
// distribution over nodes works.
got := map[int]int{}
- for i := 0; i < 50; i++ {
+ for range 50 {
c = newConn()
c.derpMap = dm
got[c.pickDERPFallback()]++
@@ -1408,7 +1408,7 @@ func TestReceiveFromAllocs(t *testing.T) {
func BenchmarkReceiveFrom(b *testing.B) {
roundTrip := setUpReceiveFrom(b)
- for i := 0; i < b.N; i++ {
+ for range b.N {
roundTrip()
}
}
@@ -1435,7 +1435,7 @@ func BenchmarkReceiveFrom_Native(b *testing.B) {
}
buf := make([]byte, 2<<10)
- for i := 0; i < b.N; i++ {
+ for range b.N {
if _, err := sendConn.WriteTo(sendBuf, dstAddr); err != nil {
b.Fatalf("WriteTo: %v", err)
}
@@ -1484,7 +1484,7 @@ func TestSetNetworkMapChangingNodeKey(t *testing.T) {
t.Fatal(err)
}
- for i := 0; i < 3; i++ {
+ for range 3 {
conn.SetNetworkMap(&netmap.NetworkMap{
Peers: nodeViews([]*tailcfg.Node{
{
@@ -1567,13 +1567,13 @@ func TestRebindStress(t *testing.T) {
wg.Add(2)
go func() {
defer wg.Done()
- for i := 0; i < 2000; i++ {
+ for range 2000 {
conn.Rebind()
}
}()
go func() {
defer wg.Done()
- for i := 0; i < 2000; i++ {
+ for range 2000 {
conn.Rebind()
}
}()
@@ -1827,7 +1827,7 @@ func TestStressSetNetworkMap(t *testing.T) {
prng := rand.New(rand.NewSource(int64(seed)))
const iters = 1000 // approx 0.5s on an m1 mac
- for i := 0; i < iters; i++ {
+ for range iters {
for j := 0; j < npeers; j++ {
// Randomize which peers are present.
if prng.Int()&1 == 0 {
@@ -2215,7 +2215,7 @@ func Test_batchingUDPConn_coalesceMessages(t *testing.T) {
if got != len(tt.wantLens) {
t.Fatalf("got len %d want: %d", got, len(tt.wantLens))
}
- for i := 0; i < got; i++ {
+ for i := range got {
if msgs[i].Addr != addr {
t.Errorf("msgs[%d].Addr != passed addr", i)
}
diff --git a/wgengine/netstack/netstack_test.go b/wgengine/netstack/netstack_test.go
index a8a4edcd9..51292c649 100644
--- a/wgengine/netstack/netstack_test.go
+++ b/wgengine/netstack/netstack_test.go
@@ -75,7 +75,7 @@ func TestInjectInboundLeak(t *testing.T) {
pkt := &packet.Parsed{}
const N = 10_000
ms0 := getMemStats()
- for i := 0; i < N; i++ {
+ for range N {
outcome := ns.injectInbound(pkt, tunWrap)
if outcome != filter.DropSilently {
t.Fatalf("got outcome %v; want DropSilently", outcome)
diff --git a/wgengine/router/ifconfig_windows.go b/wgengine/router/ifconfig_windows.go
index 87ff69b3f..0c09a728f 100644
--- a/wgengine/router/ifconfig_windows.go
+++ b/wgengine/router/ifconfig_windows.go
@@ -265,7 +265,7 @@ func configureInterface(cfg *Config, tun *tun.NativeTun) (retErr error) {
// new interface has come up. Poll periodically until it
// does.
const tries = 20
- for i := 0; i < tries; i++ {
+ for i := range tries {
found, err := setPrivateNetwork(luid)
if err != nil {
networkCategoryWarning.Set(fmt.Errorf("set-network-category: %w", err))
@@ -398,7 +398,7 @@ func configureInterface(cfg *Config, tun *tun.NativeTun) (retErr error) {
slices.SortFunc(routes, (*routeData).Compare)
deduplicatedRoutes := []*routeData{}
- for i := 0; i < len(routes); i++ {
+ for i := range len(routes) {
// There's only one way to get to a given IP+Mask, so delete
// all matches after the first.
if i > 0 && routes[i].Destination == routes[i-1].Destination {
diff --git a/wgengine/router/ifconfig_windows_test.go b/wgengine/router/ifconfig_windows_test.go
index 64c0ff0e9..11b98d1d7 100644
--- a/wgengine/router/ifconfig_windows_test.go
+++ b/wgengine/router/ifconfig_windows_test.go
@@ -82,7 +82,7 @@ func TestRouteLess(t *testing.T) {
}
func TestRouteDataLessConsistent(t *testing.T) {
- for i := 0; i < 10000; i++ {
+ for range 10000 {
ri := randRouteData()
rj := randRouteData()
if ri.Less(rj) && rj.Less(ri) {
diff --git a/wgengine/router/router_linux_test.go b/wgengine/router/router_linux_test.go
index fcf12b03e..c5657e622 100644
--- a/wgengine/router/router_linux_test.go
+++ b/wgengine/router/router_linux_test.go
@@ -909,7 +909,7 @@ func TestDelRouteIdempotent(t *testing.T) {
t.Error(err)
continue
}
- for i := 0; i < 2; i++ {
+ for i := range 2 {
if err := lt.r.delRoute(cidr); err != nil {
t.Errorf("delRoute(i=%d): %v", i, err)
}
diff --git a/wgengine/router/router_test.go b/wgengine/router/router_test.go
index 4b0f51f57..9c83acfe7 100644
--- a/wgengine/router/router_test.go
+++ b/wgengine/router/router_test.go
@@ -28,7 +28,7 @@ func TestConfigEqual(t *testing.T) {
}
configType := reflect.TypeFor[Config]()
configFields := []string{}
- for i := 0; i < configType.NumField(); i++ {
+ for i := range configType.NumField() {
configFields = append(configFields, configType.Field(i).Name)
}
if !reflect.DeepEqual(configFields, testedFields) {
diff --git a/wgengine/userspace_test.go b/wgengine/userspace_test.go
index 4a9b11587..6d086a448 100644
--- a/wgengine/userspace_test.go
+++ b/wgengine/userspace_test.go
@@ -164,7 +164,7 @@ func TestUserspaceEnginePortReconfig(t *testing.T) {
// Keep making a wgengine until we find an unused port
var ue *userspaceEngine
- for i := 0; i < 100; i++ {
+ for i := range 100 {
attempt := uint16(defaultPort + i)
e, err := NewFakeUserspaceEngine(t.Logf, attempt, &knobs)
if err != nil {
@@ -335,7 +335,7 @@ func BenchmarkGenLocalAddrFunc(b *testing.B) {
m := map[netip.Addr]bool{
la1: true,
}
- for i := 0; i < b.N; i++ {
+ for range b.N {
x = m[la1]
x = m[lanot]
}
@@ -347,7 +347,7 @@ func BenchmarkGenLocalAddrFunc(b *testing.B) {
la1: true,
la2: true,
}
- for i := 0; i < b.N; i++ {
+ for range b.N {
x = m[la1]
x = m[lanot]
}
@@ -358,7 +358,7 @@ func BenchmarkGenLocalAddrFunc(b *testing.B) {
f := func(t netip.Addr) bool {
return t == la1
}
- for i := 0; i < b.N; i++ {
+ for range b.N {
x = f(la1)
x = f(lanot)
}
@@ -369,7 +369,7 @@ func BenchmarkGenLocalAddrFunc(b *testing.B) {
f := func(t netip.Addr) bool {
return t == la1 || t == la2
}
- for i := 0; i < b.N; i++ {
+ for range b.N {
x = f(la1)
x = f(lanot)
}
diff --git a/wgengine/wgcfg/parser_test.go b/wgengine/wgcfg/parser_test.go
index eb3345c10..a5d7ad44f 100644
--- a/wgengine/wgcfg/parser_test.go
+++ b/wgengine/wgcfg/parser_test.go
@@ -85,7 +85,7 @@ func BenchmarkFromUAPI(b *testing.B) {
w.Flush()
r := bytes.NewReader(buf.Bytes())
b.ReportAllocs()
- for i := 0; i < b.N; i++ {
+ for range b.N {
r.Seek(0, io.SeekStart)
_, err := FromUAPI(r)
if err != nil {
diff --git a/wgengine/wglog/wglog_test.go b/wgengine/wglog/wglog_test.go
index 617ed1ff1..9e9850f39 100644
--- a/wgengine/wglog/wglog_test.go
+++ b/wgengine/wglog/wglog_test.go
@@ -93,7 +93,7 @@ func BenchmarkSetPeers(b *testing.B) {
b.ReportAllocs()
x := wglog.NewLogger(logger.Discard)
peers := [][]wgcfg.Peer{genPeers(0), genPeers(15), genPeers(16), genPeers(15)}
- for i := 0; i < b.N; i++ {
+ for range b.N {
for _, p := range peers {
x.SetPeers(p)
}