diff --git a/gen/go/eventschema/getters.go b/gen/go/eventschema/getters.go index d5b7975b01a..2608f9c299f 100644 --- a/gen/go/eventschema/getters.go +++ b/gen/go/eventschema/getters.go @@ -21,6 +21,7 @@ package eventschema import ( "fmt" "reflect" + "slices" "strings" "github.com/gravitational/trace" @@ -46,7 +47,7 @@ func GetEventSchemaFromType(eventType string) (*Event, error) { // getMessageName takes a message struct and returns its name. // The struct name is also the protobuf message name. -func getMessageName(eventStruct interface{}) string { +func getMessageName(eventStruct any) string { if t := reflect.TypeOf(eventStruct); t.Kind() == reflect.Ptr { return t.Elem().Name() } else { @@ -270,12 +271,7 @@ func viewSchemaLine(jsonField, viewField, fieldType string) string { // IsValidEventType takes a string and returns whether it represents a valid event type. func IsValidEventType(input string) bool { - for _, eventType := range eventTypes { - if input == eventType { - return true - } - } - return false + return slices.Contains(eventTypes, input) } // TableSchema returns a CSV description of the event table schema. diff --git a/lib/accesslists/hierarchy_test.go b/lib/accesslists/hierarchy_test.go index d13cfeb1b25..8e7289d7eb1 100644 --- a/lib/accesslists/hierarchy_test.go +++ b/lib/accesslists/hierarchy_test.go @@ -87,7 +87,7 @@ func TestAccessListHierarchyDepthCheck(t *testing.T) { numAcls := accesslist.MaxAllowedDepth + 2 // Extra 2 to test exceeding the max depth acls := make([]*accesslist.AccessList, numAcls) - for i := 0; i < numAcls; i++ { + for i := range numAcls { acls[i] = newAccessList(t, fmt.Sprintf("acl%d", i+1), clock) } @@ -97,7 +97,7 @@ func TestAccessListHierarchyDepthCheck(t *testing.T) { } // Create members up to MaxAllowedDepth - for i := 0; i < accesslist.MaxAllowedDepth; i++ { + for i := range accesslist.MaxAllowedDepth { member := newAccessListMember(t, acls[i].GetName(), acls[i+1].GetName(), accesslist.MembershipKindList, clock) acls[i+1].Status.MemberOf = append(acls[i+1].Status.MemberOf, acls[i].GetName()) accessListAndMembersGetter.members[acls[i].GetName()] = []*accesslist.AccessListMember{member} @@ -135,13 +135,13 @@ func TestAccessListValidateWithMembers(t *testing.T) { // We're creating a hierarchy with a depth of 10, and then trying to add it as a Member of a 'root' Access List. This should fail. rootAcl := newAccessList(t, "root", clock) nestedAcls := make([]*accesslist.AccessList, 0, accesslist.MaxAllowedDepth) - for i := 0; i < accesslist.MaxAllowedDepth+1; i++ { + for i := range accesslist.MaxAllowedDepth + 1 { acl := newAccessList(t, fmt.Sprintf("acl-%d", i), clock) nestedAcls = append(nestedAcls, acl) } rootAclMember := newAccessListMember(t, rootAcl.GetName(), nestedAcls[0].GetName(), accesslist.MembershipKindList, clock) members := make([]*accesslist.AccessListMember, 0, accesslist.MaxAllowedDepth-1) - for i := 0; i < accesslist.MaxAllowedDepth; i++ { + for i := range accesslist.MaxAllowedDepth { member := newAccessListMember(t, nestedAcls[i].GetName(), nestedAcls[i+1].GetName(), accesslist.MembershipKindList, clock) nestedAcls[i+1].Status.MemberOf = append(nestedAcls[i+1].Status.MemberOf, nestedAcls[i].GetName()) members = append(members, member) @@ -155,7 +155,7 @@ func TestAccessListValidateWithMembers(t *testing.T) { rootAcl.GetName(): rootAcl, }, } - for i := 0; i < accesslist.MaxAllowedDepth+1; i++ { + for i := range accesslist.MaxAllowedDepth + 1 { if i < accesslist.MaxAllowedDepth { accessListAndMembersGetter.members[nestedAcls[i].GetName()] = []*accesslist.AccessListMember{members[i]} } @@ -195,7 +195,7 @@ func TestAccessListValidateWithMembers(t *testing.T) { } // Create the members for the first hierarchy. - for i := 0; i < Length; i++ { + for i := range Length { member := newAccessListMember(t, nestedAcls1[i].GetName(), nestedAcls1[i+1].GetName(), accesslist.MembershipKindList, clock) nestedAcls1[i+1].Status.MemberOf = append(nestedAcls1[i+1].Status.MemberOf, nestedAcls1[i].GetName()) accessListAndMembersGetter.members[nestedAcls1[i].GetName()] = []*accesslist.AccessListMember{member} @@ -203,7 +203,7 @@ func TestAccessListValidateWithMembers(t *testing.T) { } // Create the members for the second hierarchy. - for i := 0; i < Length; i++ { + for i := range Length { member := newAccessListMember(t, nestedAcls2[i].GetName(), nestedAcls2[i+1].GetName(), accesslist.MembershipKindList, clock) nestedAcls2[i+1].Status.MemberOf = append(nestedAcls2[i+1].Status.MemberOf, nestedAcls2[i].GetName()) accessListAndMembersGetter.members[nestedAcls2[i].GetName()] = []*accesslist.AccessListMember{member} diff --git a/lib/accessmonitoring/review/review_test.go b/lib/accessmonitoring/review/review_test.go index 95748581c46..ca721483aef 100644 --- a/lib/accessmonitoring/review/review_test.go +++ b/lib/accessmonitoring/review/review_test.go @@ -289,7 +289,7 @@ func TestHandleAccessRequest(t *testing.T) { m.On("GetUser", mock.Anything, "non-existent-user", withSecretsFalse). Return(nil, trace.NotFound("user not found")) }, - assertErr: func(t require.TestingT, err error, _ ...interface{}) { + assertErr: func(t require.TestingT, err error, _ ...any) { require.ErrorContains(t, err, "user not found") }, }, diff --git a/lib/asciitable/table.go b/lib/asciitable/table.go index ac43ea85d9e..8420adbe25f 100644 --- a/lib/asciitable/table.go +++ b/lib/asciitable/table.go @@ -132,7 +132,7 @@ func (t *Table) AddColumn(c Column) { // AddRow adds a row of cells to the table. func (t *Table) AddRow(row []string) { limit := min(len(row), len(t.columns)) - for i := 0; i < limit; i++ { + for i := range limit { cell, _ := t.truncateCell(i, row[i]) t.columns[i].width = max(len(cell), t.columns[i].width) } @@ -184,8 +184,8 @@ func (t *Table) WriteTo(w io.Writer) error { // Header and separator. if !t.IsHeadless() { - var colh []interface{} - var cols []interface{} + var colh []any + var cols []any for _, col := range t.columns { colh = append(colh, col.Title) @@ -202,7 +202,7 @@ func (t *Table) WriteTo(w io.Writer) error { // Body. footnoteLabels := make(map[string]struct{}) for _, row := range t.rows { - var rowi []interface{} + var rowi []any for i := range row { cell, addFootnote := t.truncateCell(i, row[i]) if addFootnote { diff --git a/lib/auth/grpcserver_test.go b/lib/auth/grpcserver_test.go index 612cc3cbcb8..bc36ef12e85 100644 --- a/lib/auth/grpcserver_test.go +++ b/lib/auth/grpcserver_test.go @@ -4185,7 +4185,6 @@ func TestListResources(t *testing.T) { } for name, test := range testCases { - test := test t.Run(name, func(t *testing.T) { t.Parallel() resp, err := clt.ListResources(ctx, proto.ListResourcesRequest{ diff --git a/lib/authz/permissions.go b/lib/authz/permissions.go index 06f101c11be..ca742bbbb37 100644 --- a/lib/authz/permissions.go +++ b/lib/authz/permissions.go @@ -476,7 +476,7 @@ func (a *authorizer) enforcePrivateKeyPolicy(ctx context.Context, authContext *C return nil } -func (a *authorizer) fromUser(ctx context.Context, userI interface{}) (*Context, error) { +func (a *authorizer) fromUser(ctx context.Context, userI any) (*Context, error) { switch user := userI.(type) { case LocalUser: return a.authorizeLocalUser(ctx, user) diff --git a/lib/authz/permissions_test.go b/lib/authz/permissions_test.go index a31e03e5b65..63e5ea87420 100644 --- a/lib/authz/permissions_test.go +++ b/lib/authz/permissions_test.go @@ -869,7 +869,6 @@ func TestContext_GetAccessState(t *testing.T) { }, } for _, test := range tests { - test := test t.Run(test.name, func(t *testing.T) { // Prepare AuthPreference. spec := test.authSpec diff --git a/lib/automaticupgrades/cache/cache_test.go b/lib/automaticupgrades/cache/cache_test.go index a4119cc1215..23241552d94 100644 --- a/lib/automaticupgrades/cache/cache_test.go +++ b/lib/automaticupgrades/cache/cache_test.go @@ -59,10 +59,10 @@ func TestTimedMemoize_Get(t *testing.T) { upstreamError := trace.LimitExceeded("rate-limited") oldUpstreamError := trace.CompareFailed("comparison failed") - assertUncachedError := func(t2 require.TestingT, err error, _ ...interface{}) { + assertUncachedError := func(t2 require.TestingT, err error, _ ...any) { require.ErrorIs(t2, err, upstreamError) } - assertCachedError := func(t2 require.TestingT, err error, _ ...interface{}) { + assertCachedError := func(t2 require.TestingT, err error, _ ...any) { var cachedError cachedError require.ErrorAs(t2, trace.Unwrap(err), &cachedError) } diff --git a/lib/automaticupgrades/channel_test.go b/lib/automaticupgrades/channel_test.go index 7171445e4f1..0368563db2d 100644 --- a/lib/automaticupgrades/channel_test.go +++ b/lib/automaticupgrades/channel_test.go @@ -162,8 +162,8 @@ func Test_Channel_CheckAndSetDefaults(t *testing.T) { name string channel *Channel assertError require.ErrorAssertionFunc - expectedVersionGetterType interface{} - expectedCriticalTriggerType interface{} + expectedVersionGetterType any + expectedCriticalTriggerType any }{ { name: "empty (invalid)", diff --git a/lib/automaticupgrades/maintenance/basichttp_test.go b/lib/automaticupgrades/maintenance/basichttp_test.go index cb2d9fdac9b..057532358cc 100644 --- a/lib/automaticupgrades/maintenance/basichttp_test.go +++ b/lib/automaticupgrades/maintenance/basichttp_test.go @@ -117,7 +117,7 @@ func Test_basicHTTPMaintenanceClient_Get(t *testing.T) { statusCode: http.StatusOK, response: "", expected: false, - assertErr: func(t2 require.TestingT, err2 error, _ ...interface{}) { + assertErr: func(t2 require.TestingT, err2 error, _ ...any) { require.IsType(t2, &trace.BadParameterError{}, trace.Unwrap(err2)) }, }, diff --git a/lib/automaticupgrades/maintenance/trigger_test.go b/lib/automaticupgrades/maintenance/trigger_test.go index 435b73f0f9b..98eff15f9a2 100644 --- a/lib/automaticupgrades/maintenance/trigger_test.go +++ b/lib/automaticupgrades/maintenance/trigger_test.go @@ -28,7 +28,7 @@ import ( // checkTraceError is a test helper that converts trace.IsXXXError into a require.ErrorAssertionFunc func checkTraceError(check func(error) bool) require.ErrorAssertionFunc { - return func(t require.TestingT, err error, i ...interface{}) { + return func(t require.TestingT, err error, i ...any) { require.True(t, check(err), i...) } } diff --git a/lib/automaticupgrades/version/basichttp_test.go b/lib/automaticupgrades/version/basichttp_test.go index 8a2cfacf96a..f552f4fc803 100644 --- a/lib/automaticupgrades/version/basichttp_test.go +++ b/lib/automaticupgrades/version/basichttp_test.go @@ -111,7 +111,7 @@ func Test_basicHTTPVersionClient_Get(t *testing.T) { statusCode: http.StatusOK, response: "hello", expected: nil, - assertErr: func(t2 require.TestingT, err2 error, _ ...interface{}) { + assertErr: func(t2 require.TestingT, err2 error, _ ...any) { require.IsType(t2, &trace.BadParameterError{}, trace.Unwrap(err2)) }, }, @@ -120,7 +120,7 @@ func Test_basicHTTPVersionClient_Get(t *testing.T) { statusCode: http.StatusOK, response: "", expected: nil, - assertErr: func(t2 require.TestingT, err2 error, _ ...interface{}) { + assertErr: func(t2 require.TestingT, err2 error, _ ...any) { require.IsType(t2, &trace.BadParameterError{}, trace.Unwrap(err2)) }, }, diff --git a/lib/automaticupgrades/version/proxy_test.go b/lib/automaticupgrades/version/proxy_test.go index e4a4ec8d516..d92cb6e56d6 100644 --- a/lib/automaticupgrades/version/proxy_test.go +++ b/lib/automaticupgrades/version/proxy_test.go @@ -92,7 +92,7 @@ func TestProxyVersionClient(t *testing.T) { name: "empty response", pong: &webclient.PingResponse{}, expectedVersion: nil, - expectErr: func(t require.TestingT, err error, i ...interface{}) { + expectErr: func(t require.TestingT, err error, i ...any) { require.ErrorIs(t, err, trace.NotImplemented("proxy does not seem to implement RFD-184")) }, }, diff --git a/lib/automaticupgrades/version/versionget_test.go b/lib/automaticupgrades/version/versionget_test.go index 375208e827a..ce964817396 100644 --- a/lib/automaticupgrades/version/versionget_test.go +++ b/lib/automaticupgrades/version/versionget_test.go @@ -82,7 +82,7 @@ func TestValidVersionChange(t *testing.T) { // checkTraceError is a test helper that converts trace.IsXXXError into a require.ErrorAssertionFunc func checkTraceError(check func(error) bool) require.ErrorAssertionFunc { - return func(t require.TestingT, err error, i ...interface{}) { + return func(t require.TestingT, err error, i ...any) { require.True(t, check(err), i...) } } diff --git a/lib/autoupdate/agent/installer_test.go b/lib/autoupdate/agent/installer_test.go index 80276d90e41..56ec53e1fa2 100644 --- a/lib/autoupdate/agent/installer_test.go +++ b/lib/autoupdate/agent/installer_test.go @@ -460,7 +460,7 @@ func TestLocalInstaller_Link(t *testing.T) { TargetServiceFile: filepath.Join(linkDir, serviceDir, serviceName), Log: slog.Default(), TransformService: func(b []byte, pathDir string, flags autoupdate.InstallFlags) []byte { - return []byte(fmt.Sprintf("[service=%s][path=%s][flags=%s]", string(b), pathDir, flags.Strings())) + return fmt.Appendf(nil, "[service=%s][path=%s][flags=%s]", string(b), pathDir, flags.Strings()) }, ValidateBinary: validator.IsExecutable, Template: autoupdate.DefaultCDNURITemplate, @@ -715,7 +715,7 @@ func TestLocalInstaller_TryLink(t *testing.T) { TargetServiceFile: filepath.Join(linkDir, serviceDir, serviceName), Log: slog.Default(), TransformService: func(b []byte, pathDir string, flags autoupdate.InstallFlags) []byte { - return []byte(fmt.Sprintf("[service=%s][path=%s][flags=%s]", string(b), pathDir, flags.Strings())) + return fmt.Appendf(nil, "[service=%s][path=%s][flags=%s]", string(b), pathDir, flags.Strings()) }, ValidateBinary: validator.IsExecutable, } @@ -852,7 +852,7 @@ func TestLocalInstaller_Remove(t *testing.T) { TargetServiceFile: filepath.Join(linkDir, serviceDir, serviceName), Log: slog.Default(), TransformService: func(b []byte, pathDir string, flags autoupdate.InstallFlags) []byte { - return []byte(fmt.Sprintf("[service=%s][path=%s][flags=%s]", string(b), pathDir, flags.Strings())) + return fmt.Appendf(nil, "[service=%s][path=%s][flags=%s]", string(b), pathDir, flags.Strings()) }, ValidateBinary: validator.IsExecutable, } @@ -922,7 +922,7 @@ func TestLocalInstaller_IsLinked(t *testing.T) { TargetServiceFile: filepath.Join(linkDir, serviceDir, serviceName), Log: slog.Default(), TransformService: func(b []byte, pathDir string, flags autoupdate.InstallFlags) []byte { - return []byte(fmt.Sprintf("[service=%s][path=%s][flags=%s]", string(b), pathDir, flags.Strings())) + return fmt.Appendf(nil, "[service=%s][path=%s][flags=%s]", string(b), pathDir, flags.Strings()) }, ValidateBinary: validator.IsExecutable, } @@ -1108,7 +1108,7 @@ func TestLocalInstaller_Unlink(t *testing.T) { TargetServiceFile: filepath.Join(linkDir, serviceDir, serviceName), Log: slog.Default(), TransformService: func(b []byte, pathDir string, flags autoupdate.InstallFlags) []byte { - return []byte(fmt.Sprintf("[service=%s][path=%s][flags=%s]", string(b), filepath.Base(pathDir), flags.Strings())) + return fmt.Appendf(nil, "[service=%s][path=%s][flags=%s]", string(b), filepath.Base(pathDir), flags.Strings()) }, } ctx := context.Background() diff --git a/lib/autoupdate/agent/process_test.go b/lib/autoupdate/agent/process_test.go index ff8bdc18ba3..1d515f6f736 100644 --- a/lib/autoupdate/agent/process_test.go +++ b/lib/autoupdate/agent/process_test.go @@ -292,7 +292,7 @@ func TestTickFile(t *testing.T) { _ = os.RemoveAll(filePath) switch { case tick > 0: - err := os.WriteFile(filePath, []byte(fmt.Sprintln(tick)), os.ModePerm) + err := os.WriteFile(filePath, fmt.Appendln(nil, tick), os.ModePerm) require.NoError(t, err) case tick < 0: err := os.Mkdir(filePath, os.ModePerm) diff --git a/lib/autoupdate/agent/updater_test.go b/lib/autoupdate/agent/updater_test.go index 05e78f5464e..9894ecd265e 100644 --- a/lib/autoupdate/agent/updater_test.go +++ b/lib/autoupdate/agent/updater_test.go @@ -816,12 +816,7 @@ func TestUpdater_Update(t *testing.T) { return nil }, FuncIsLinked: func(ctx context.Context, rev Revision, path string) (bool, error) { - for _, r := range tt.linkedRevisions { - if r == rev { - return true, nil - } - } - return false, nil + return slices.Contains(tt.linkedRevisions, rev), nil }, } updater.Process = &testProcess{ diff --git a/lib/autoupdate/rollout/reconciler_test.go b/lib/autoupdate/rollout/reconciler_test.go index 4ded24fec28..8dfbc641bfd 100644 --- a/lib/autoupdate/rollout/reconciler_test.go +++ b/lib/autoupdate/rollout/reconciler_test.go @@ -42,7 +42,7 @@ import ( // rolloutEquals returns a require.ValueAssertionFunc that checks the rollout is identical. // The comparison does not take into account the proto internal state. func rolloutEquals(expected *autoupdate.AutoUpdateAgentRollout) require.ValueAssertionFunc { - return func(t require.TestingT, i interface{}, _ ...interface{}) { + return func(t require.TestingT, i any, _ ...any) { require.IsType(t, &autoupdate.AutoUpdateAgentRollout{}, i, "resource should be an autoupdate_agent_rollout") actual := i.(*autoupdate.AutoUpdateAgentRollout) require.Empty(t, cmp.Diff(expected, actual, protocmp.Transform())) @@ -52,7 +52,7 @@ func rolloutEquals(expected *autoupdate.AutoUpdateAgentRollout) require.ValueAss // cancelContext wraps a require.ValueAssertionFunc so that the given context is canceled before checking the assertion. // This is used to test how the reconciler behaves when its context is canceled. func cancelContext(assertionFunc require.ValueAssertionFunc, cancel func()) require.ValueAssertionFunc { - return func(t require.TestingT, i interface{}, i2 ...interface{}) { + return func(t require.TestingT, i any, i2 ...any) { cancel() assertionFunc(t, i, i2...) } @@ -273,7 +273,6 @@ func TestTryReconcile(t *testing.T) { }, } for _, tt := range tests { - tt := tt t.Run(tt.name, func(t *testing.T) { t.Parallel() // Test setup: creating a fake client answering fixtures diff --git a/lib/autoupdate/rollout/transitions_test.go b/lib/autoupdate/rollout/transitions_test.go index 8f72b5b3de5..236d1f4aaeb 100644 --- a/lib/autoupdate/rollout/transitions_test.go +++ b/lib/autoupdate/rollout/transitions_test.go @@ -227,7 +227,7 @@ func TestTriggerGroups(t *testing.T) { }, groupNames: []string{"prod", "backup"}, desiredState: autoupdatev1pb.AutoUpdateAgentGroupState_AUTO_UPDATE_AGENT_GROUP_STATE_ACTIVE, - expectErr: func(t require.TestingT, err error, i ...interface{}) { + expectErr: func(t require.TestingT, err error, i ...any) { require.ErrorContains(t, err, "rollout has no groups") }, }, @@ -239,7 +239,7 @@ func TestTriggerGroups(t *testing.T) { }, groupNames: []string{"prod", "backup"}, desiredState: autoupdatev1pb.AutoUpdateAgentGroupState_AUTO_UPDATE_AGENT_GROUP_STATE_ROLLEDBACK, - expectErr: func(t require.TestingT, err error, i ...interface{}) { + expectErr: func(t require.TestingT, err error, i ...any) { require.ErrorContains(t, err, "unsupported desired state") }, }, @@ -257,7 +257,7 @@ func TestTriggerGroups(t *testing.T) { }, groupNames: []string{"prod", "backup"}, desiredState: autoupdatev1pb.AutoUpdateAgentGroupState_AUTO_UPDATE_AGENT_GROUP_STATE_ACTIVE, - expectErr: func(t require.TestingT, err error, i ...interface{}) { + expectErr: func(t require.TestingT, err error, i ...any) { require.ErrorContains(t, err, "not supported for rollout strategy") }, }, @@ -274,7 +274,7 @@ func TestTriggerGroups(t *testing.T) { }, groupNames: []string{"prod", "backup"}, desiredState: autoupdatev1pb.AutoUpdateAgentGroupState_AUTO_UPDATE_AGENT_GROUP_STATE_ACTIVE, - expectErr: func(t require.TestingT, err error, i ...interface{}) { + expectErr: func(t require.TestingT, err error, i ...any) { require.ErrorContains(t, err, "rollout schedule is immediate") }, }, @@ -286,7 +286,7 @@ func TestTriggerGroups(t *testing.T) { }, groupNames: []string{"stage"}, desiredState: autoupdatev1pb.AutoUpdateAgentGroupState_AUTO_UPDATE_AGENT_GROUP_STATE_ACTIVE, - expectErr: func(t require.TestingT, err error, i ...interface{}) { + expectErr: func(t require.TestingT, err error, i ...any) { require.ErrorContains(t, err, "is already active") }, }, @@ -298,7 +298,7 @@ func TestTriggerGroups(t *testing.T) { }, groupNames: []string{"dev"}, desiredState: autoupdatev1pb.AutoUpdateAgentGroupState_AUTO_UPDATE_AGENT_GROUP_STATE_ACTIVE, - expectErr: func(t require.TestingT, err error, i ...interface{}) { + expectErr: func(t require.TestingT, err error, i ...any) { require.ErrorContains(t, err, "is already done") }, }, @@ -405,7 +405,7 @@ func TestForceGroupsDone(t *testing.T) { Status: &autoupdatev1pb.AutoUpdateAgentRolloutStatus{}, }, groupNames: []string{"prod", "backup"}, - expectErr: func(t require.TestingT, err error, i ...interface{}) { + expectErr: func(t require.TestingT, err error, i ...any) { require.ErrorContains(t, err, "rollout has no groups") }, }, @@ -422,7 +422,7 @@ func TestForceGroupsDone(t *testing.T) { Status: status, }, groupNames: []string{"prod", "backup"}, - expectErr: func(t require.TestingT, err error, i ...interface{}) { + expectErr: func(t require.TestingT, err error, i ...any) { require.ErrorContains(t, err, "not supported for rollout strategy") }, }, @@ -438,7 +438,7 @@ func TestForceGroupsDone(t *testing.T) { Status: nil, }, groupNames: []string{"prod", "backup"}, - expectErr: func(t require.TestingT, err error, i ...interface{}) { + expectErr: func(t require.TestingT, err error, i ...any) { require.ErrorContains(t, err, "rollout schedule is immediate") }, }, @@ -449,7 +449,7 @@ func TestForceGroupsDone(t *testing.T) { Status: status, }, groupNames: []string{"dev"}, - expectErr: func(t require.TestingT, err error, i ...interface{}) { + expectErr: func(t require.TestingT, err error, i ...any) { require.ErrorContains(t, err, "is already done") }, }, @@ -556,7 +556,7 @@ func TestRollbackGroups(t *testing.T) { Status: &autoupdatev1pb.AutoUpdateAgentRolloutStatus{}, }, groupNames: []string{"prod", "backup"}, - expectErr: func(t require.TestingT, err error, i ...interface{}) { + expectErr: func(t require.TestingT, err error, i ...any) { require.ErrorContains(t, err, "rollout has no groups") }, }, @@ -573,7 +573,7 @@ func TestRollbackGroups(t *testing.T) { Status: status, }, groupNames: []string{"prod", "backup"}, - expectErr: func(t require.TestingT, err error, i ...interface{}) { + expectErr: func(t require.TestingT, err error, i ...any) { require.ErrorContains(t, err, "not supported for rollout strategy") }, }, @@ -589,7 +589,7 @@ func TestRollbackGroups(t *testing.T) { Status: nil, }, groupNames: []string{"prod", "backup"}, - expectErr: func(t require.TestingT, err error, i ...interface{}) { + expectErr: func(t require.TestingT, err error, i ...any) { require.ErrorContains(t, err, "rollout schedule is immediate") }, }, @@ -600,7 +600,7 @@ func TestRollbackGroups(t *testing.T) { Status: status, }, groupNames: []string{"blue"}, - expectErr: func(t require.TestingT, err error, i ...interface{}) { + expectErr: func(t require.TestingT, err error, i ...any) { require.ErrorContains(t, err, "is already in a rolled-back state") }, }, diff --git a/lib/azuredevops/token_validator_test.go b/lib/azuredevops/token_validator_test.go index b31397c29f8..820c21750ff 100644 --- a/lib/azuredevops/token_validator_test.go +++ b/lib/azuredevops/token_validator_test.go @@ -85,7 +85,7 @@ func (f *fakeIDP) issuer(orgID string) string { } func (f *fakeIDP) handleOpenIDConfig(w http.ResponseWriter, r *http.Request) { - response := map[string]interface{}{ + response := map[string]any{ "claims_supported": []string{ "sub", "aud", @@ -147,7 +147,7 @@ func (f *fakeIDP) issueToken( NotBefore: jwt.NewNumericDate(issuedAt), Expiry: jwt.NewNumericDate(expiry), } - customClaims := map[string]interface{}{ + customClaims := map[string]any{ "org_id": orgID, } token, err := jwt.Signed(f.signer). @@ -243,7 +243,7 @@ func TestIDTokenValidator_Validate(t *testing.T) { }, { name: "mismatched org id", - assertError: func(t require.TestingT, err error, i ...interface{}) { + assertError: func(t require.TestingT, err error, i ...any) { require.Error(t, err) require.ErrorContains(t, err, "organization ID in token") }, diff --git a/lib/benchmark/web.go b/lib/benchmark/web.go index 7e866c5e7ca..ebb7a4b6b2f 100644 --- a/lib/benchmark/web.go +++ b/lib/benchmark/web.go @@ -433,10 +433,7 @@ func (r repeatingReader) Read(p []byte) (int, error) { case <-time.After(r.interval): } - end := len(r.s) - if end > len(p) { - end = len(p) - } + end := min(len(r.s), len(p)) n := copy(p, r.s[:end]) return n, nil diff --git a/lib/bitbucket/token_validator_test.go b/lib/bitbucket/token_validator_test.go index 4814dad69b9..22659667f66 100644 --- a/lib/bitbucket/token_validator_test.go +++ b/lib/bitbucket/token_validator_test.go @@ -85,7 +85,7 @@ func (f *fakeIDP) issuer() string { func (f *fakeIDP) handleOpenIDConfig(w http.ResponseWriter, r *http.Request) { // mimic https://api.bitbucket.org/2.0/workspaces/$workspace/pipelines-config/identity/oidc/.well-known/openid-configuration - response := map[string]interface{}{ + response := map[string]any{ "claims_supported": []string{ "sub", "iss", @@ -147,7 +147,7 @@ func (f *fakeIDP) issueToken( NotBefore: jwt.NewNumericDate(issuedAt), Expiry: jwt.NewNumericDate(expiry), } - customClaims := map[string]interface{}{ + customClaims := map[string]any{ "workspaceUuid": workspaceUUID, "repositoryUuid": repositoryUUID, "stepUuid": stepUUID, diff --git a/lib/boundkeypair/bound_keypair_test.go b/lib/boundkeypair/bound_keypair_test.go index 293af1d362b..1cdecf3c06e 100644 --- a/lib/boundkeypair/bound_keypair_test.go +++ b/lib/boundkeypair/bound_keypair_test.go @@ -144,7 +144,7 @@ func TestChallengeValidator_ValidateChallengeResponse(t *testing.T) { clockFn: func(clock *clockwork.FakeClock) { clock.Advance(challengeExpiration * 10) }, - assert: func(tt require.TestingT, err error, i ...interface{}) { + assert: func(tt require.TestingT, err error, i ...any) { require.Error(tt, err) require.ErrorContains(tt, err, "token is expired") }, @@ -155,7 +155,7 @@ func TestChallengeValidator_ValidateChallengeResponse(t *testing.T) { clockFn: func(clock *clockwork.FakeClock) { clock.Advance(challengeNotBeforeOffset * 10) }, - assert: func(tt require.TestingT, err error, i ...interface{}) { + assert: func(tt require.TestingT, err error, i ...any) { require.Error(tt, err) require.ErrorContains(tt, err, "token not valid yet") }, @@ -166,7 +166,7 @@ func TestChallengeValidator_ValidateChallengeResponse(t *testing.T) { manipulateFn: func(doc *ChallengeDocument, now time.Time) { doc.IssuedAt = jwt.NewNumericDate(now.Add(time.Minute)) }, - assert: func(tt require.TestingT, err error, i ...interface{}) { + assert: func(tt require.TestingT, err error, i ...any) { require.Error(tt, err) require.ErrorContains(tt, err, "invalid challenge document") }, @@ -177,7 +177,7 @@ func TestChallengeValidator_ValidateChallengeResponse(t *testing.T) { manipulateFn: func(doc *ChallengeDocument, now time.Time) { doc.Expiry = jwt.NewNumericDate(now.Add(time.Hour)) }, - assert: func(tt require.TestingT, err error, i ...interface{}) { + assert: func(tt require.TestingT, err error, i ...any) { require.Error(tt, err) require.ErrorContains(tt, err, "invalid challenge document") }, @@ -188,7 +188,7 @@ func TestChallengeValidator_ValidateChallengeResponse(t *testing.T) { manipulateFn: func(doc *ChallengeDocument, now time.Time) { doc.NotBefore = jwt.NewNumericDate(now.Add(time.Minute)) }, - assert: func(tt require.TestingT, err error, i ...interface{}) { + assert: func(tt require.TestingT, err error, i ...any) { require.Error(tt, err) require.ErrorContains(tt, err, "invalid challenge document") }, @@ -199,7 +199,7 @@ func TestChallengeValidator_ValidateChallengeResponse(t *testing.T) { manipulateFn: func(doc *ChallengeDocument, now time.Time) { doc.Nonce = "abcd" }, - assert: func(tt require.TestingT, err error, i ...interface{}) { + assert: func(tt require.TestingT, err error, i ...any) { require.Error(tt, err) require.ErrorContains(tt, err, "invalid nonce") }, @@ -210,7 +210,7 @@ func TestChallengeValidator_ValidateChallengeResponse(t *testing.T) { manipulateFn: func(doc *ChallengeDocument, now time.Time) { doc.Subject = "abcd" }, - assert: func(tt require.TestingT, err error, i ...interface{}) { + assert: func(tt require.TestingT, err error, i ...any) { require.Error(tt, err) require.ErrorContains(tt, err, "invalid subject claim") }, @@ -221,7 +221,7 @@ func TestChallengeValidator_ValidateChallengeResponse(t *testing.T) { manipulateFn: func(doc *ChallengeDocument, now time.Time) { doc.Issuer = "abcd" }, - assert: func(tt require.TestingT, err error, i ...interface{}) { + assert: func(tt require.TestingT, err error, i ...any) { require.Error(tt, err) require.ErrorContains(tt, err, "invalid issuer claim") }, @@ -232,7 +232,7 @@ func TestChallengeValidator_ValidateChallengeResponse(t *testing.T) { manipulateFn: func(doc *ChallengeDocument, now time.Time) { doc.Audience = jwt.Audience{"abcd"} }, - assert: func(tt require.TestingT, err error, i ...interface{}) { + assert: func(tt require.TestingT, err error, i ...any) { require.Error(tt, err) require.ErrorContains(tt, err, "invalid audience claim") }, diff --git a/lib/boundkeypair/join_state_test.go b/lib/boundkeypair/join_state_test.go index a345d1ceb9d..06d46e67ceb 100644 --- a/lib/boundkeypair/join_state_test.go +++ b/lib/boundkeypair/join_state_test.go @@ -157,7 +157,7 @@ func TestIssueAndVerifyJoinState(t *testing.T) { return "asdf" }, verifyParams: makeParams(withRecovery(0, 1)), - assertError: func(tt require.TestingT, err error, i ...interface{}) { + assertError: func(tt require.TestingT, err error, i ...any) { require.ErrorContains(tt, err, "parsing serialized join state") }, }, @@ -165,7 +165,7 @@ func TestIssueAndVerifyJoinState(t *testing.T) { name: "invalid count", issue: makeIssuer(activeSigner, makeParams(withRecovery(0, 1))), verifyParams: makeParams(withRecovery(1, 1)), - assertError: func(tt require.TestingT, err error, i ...interface{}) { + assertError: func(tt require.TestingT, err error, i ...any) { require.ErrorContains(tt, err, "recovery counter mismatch") }, }, @@ -173,7 +173,7 @@ func TestIssueAndVerifyJoinState(t *testing.T) { name: "invalid instance ID", issue: makeIssuer(activeSigner, makeParams(withRecovery(0, 1), withInstanceID("foo"))), verifyParams: makeParams(withRecovery(0, 1), withInstanceID("bar")), - assertError: func(tt require.TestingT, err error, i ...interface{}) { + assertError: func(tt require.TestingT, err error, i ...any) { require.ErrorContains(tt, err, "bot instance mismatch") }, }, @@ -181,7 +181,7 @@ func TestIssueAndVerifyJoinState(t *testing.T) { name: "untrusted signer", issue: makeIssuer(invalidSigner, makeParams(withRecovery(0, 1), withInstanceID("foo"))), verifyParams: makeParams(withRecovery(0, 1), withInstanceID("bar")), - assertError: func(tt require.TestingT, err error, i ...interface{}) { + assertError: func(tt require.TestingT, err error, i ...any) { require.ErrorContains(tt, err, "join state could not be verified") }, }, @@ -192,7 +192,7 @@ func TestIssueAndVerifyJoinState(t *testing.T) { clockMod: func(clock *clockwork.FakeClock) { clock.Advance(-10 * time.Minute) }, - assertError: func(tt require.TestingT, err error, i ...interface{}) { + assertError: func(tt require.TestingT, err error, i ...any) { require.ErrorContains(tt, err, "token not valid yet") }, }, @@ -202,7 +202,7 @@ func TestIssueAndVerifyJoinState(t *testing.T) { jsp.ClusterName = "invalid" })), verifyParams: makeParams(withRecovery(0, 1)), - assertError: func(tt require.TestingT, err error, i ...interface{}) { + assertError: func(tt require.TestingT, err error, i ...any) { require.ErrorContains(tt, err, "invalid issuer claim") }, }, @@ -212,7 +212,7 @@ func TestIssueAndVerifyJoinState(t *testing.T) { jsp.Token.Spec.BotName = "invalid" })), verifyParams: makeParams(withRecovery(0, 1)), - assertError: func(tt require.TestingT, err error, i ...interface{}) { + assertError: func(tt require.TestingT, err error, i ...any) { require.ErrorContains(tt, err, "invalid subject claim") }, }, diff --git a/lib/circleci/token_source_test.go b/lib/circleci/token_source_test.go index 529d30d9fe6..d5e7bc73938 100644 --- a/lib/circleci/token_source_test.go +++ b/lib/circleci/token_source_test.go @@ -51,7 +51,7 @@ func TestGetIDToken(t *testing.T) { { name: "unset", getEnv: fakeGetEnv(""), - assertError: func(t require.TestingT, err error, i ...interface{}) { + assertError: func(t require.TestingT, err error, i ...any) { require.True(t, trace.IsBadParameter(err)) }, }, diff --git a/lib/circleci/token_validator_test.go b/lib/circleci/token_validator_test.go index 882ded4d2f4..8f5fe96494c 100644 --- a/lib/circleci/token_validator_test.go +++ b/lib/circleci/token_validator_test.go @@ -59,7 +59,7 @@ func (f *fakeIDP) issueToken( IssuedAt: jwt.NewNumericDate(issuedAt), Expiry: jwt.NewNumericDate(expiry), } - customClaims := map[string]interface{}{ + customClaims := map[string]any{ "oidc.circleci.com/project-id": projectID, "oidc.circleci.com/context-ids": contextIDs, } @@ -92,7 +92,7 @@ func newFakeIDP(t *testing.T, organizationID string) *fakeIDP { t.Cleanup(srv.Close) orgURL := "/org/" + organizationID providerMux.HandleFunc(orgURL+"/.well-known/openid-configuration", func(w http.ResponseWriter, r *http.Request) { - response := map[string]interface{}{ + response := map[string]any{ "claims_supported": []string{ "sub", "aud", diff --git a/lib/configurators/aws/aws.go b/lib/configurators/aws/aws.go index 1902940426b..9e8e4ced361 100644 --- a/lib/configurators/aws/aws.go +++ b/lib/configurators/aws/aws.go @@ -959,12 +959,7 @@ func hasDynamoDBDatabases(flags configurators.BootstrapFlags, targetCfg targetCo // is found. func isAutoDiscoveryEnabledForMatcher(matcherType string, matchers []types.AWSMatcher) bool { return findAWSMatcherIs(matchers, func(matcher *types.AWSMatcher) bool { - for _, databaseType := range matcher.Types { - if databaseType == matcherType { - return true - } - } - return false + return slices.Contains(matcher.Types, matcherType) }) } @@ -979,12 +974,7 @@ func findEndpointIs(databases []*servicecfg.Database, endpointIs func(string) bo // findDatabaseIs returns true if provided check returns true for any static // database config. func findDatabaseIs(databases []*servicecfg.Database, is func(*servicecfg.Database) bool) bool { - for _, database := range databases { - if is(database) { - return true - } - } - return false + return slices.ContainsFunc(databases, is) } // findAWSMatcherIs returns true if the provided check returns true for any @@ -1367,7 +1357,7 @@ func parseForcedAWSRoles(flags configurators.BootstrapFlags, target awslib.Ident return nil, nil } var out []string - for _, role := range strings.Split(flags.ForceAssumesRoles, ",") { + for role := range strings.SplitSeq(flags.ForceAssumesRoles, ",") { if role == "" { continue } diff --git a/lib/devicetrust/authz/authz_test.go b/lib/devicetrust/authz/authz_test.go index 71360acfe7c..3d5372e7b4e 100644 --- a/lib/devicetrust/authz/authz_test.go +++ b/lib/devicetrust/authz/authz_test.go @@ -116,7 +116,6 @@ func testIsDeviceVerified(t *testing.T, name string, fn func(ext *tlsca.DeviceEx }, } for _, test := range tests { - test := test t.Run(test.name, func(t *testing.T) { got := fn(test.ext) if got != test.want { diff --git a/lib/gcp/token_validator_test.go b/lib/gcp/token_validator_test.go index 70a12d66c0b..c7c7686b96b 100644 --- a/lib/gcp/token_validator_test.go +++ b/lib/gcp/token_validator_test.go @@ -83,7 +83,7 @@ func (f *fakeIDP) issuer() string { } func (f *fakeIDP) handleOpenIDConfig(w http.ResponseWriter, r *http.Request) { - response := map[string]interface{}{ + response := map[string]any{ "claims_supported": []string{ "sub", "aud", @@ -230,7 +230,7 @@ func TestIDTokenValidator_Validate(t *testing.T) { }, { name: "invalid service account email: gserviceaccount.com domain", - assertError: func(tt require.TestingT, err error, i ...interface{}) { + assertError: func(tt require.TestingT, err error, i ...any) { require.Error(tt, err, i...) require.Contains(tt, err.Error(), "invalid email claim") }, @@ -248,7 +248,7 @@ func TestIDTokenValidator_Validate(t *testing.T) { }, { name: "invalid service account email: gserviceaccount.coma domain", - assertError: func(tt require.TestingT, err error, i ...interface{}) { + assertError: func(tt require.TestingT, err error, i ...any) { require.Error(tt, err, i...) require.Contains(tt, err.Error(), "invalid email claim") }, @@ -266,7 +266,7 @@ func TestIDTokenValidator_Validate(t *testing.T) { }, { name: "invalid service account email: google domain", - assertError: func(tt require.TestingT, err error, i ...interface{}) { + assertError: func(tt require.TestingT, err error, i ...any) { require.Error(tt, err, i...) require.Contains(tt, err.Error(), "invalid email claim") }, @@ -284,7 +284,7 @@ func TestIDTokenValidator_Validate(t *testing.T) { }, { name: "empty service account email", - assertError: func(tt require.TestingT, err error, i ...interface{}) { + assertError: func(tt require.TestingT, err error, i ...any) { require.Error(tt, err, i...) require.Contains(tt, err.Error(), "invalid email claim") }, diff --git a/lib/githubactions/token_validator_test.go b/lib/githubactions/token_validator_test.go index 5e2461d2c0e..679a579bc4c 100644 --- a/lib/githubactions/token_validator_test.go +++ b/lib/githubactions/token_validator_test.go @@ -99,7 +99,7 @@ func (f *fakeIDP) issuer() string { func (f *fakeIDP) handleOpenIDConfig(w http.ResponseWriter, r *http.Request) { // mimic https://token.actions.githubusercontent.com/.well-known/openid-configuration - response := map[string]interface{}{ + response := map[string]any{ "claims_supported": []string{ "sub", "aud", @@ -173,7 +173,7 @@ func (f *fakeIDP) issueToken( NotBefore: jwt.NewNumericDate(issuedAt), Expiry: jwt.NewNumericDate(expiry), } - customClaims := map[string]interface{}{ + customClaims := map[string]any{ "actor": actor, } token, err := jwt.Signed(f.signer). diff --git a/lib/gitlab/token_validator_test.go b/lib/gitlab/token_validator_test.go index fa7fcbd8cd7..47e9ee03ca8 100644 --- a/lib/gitlab/token_validator_test.go +++ b/lib/gitlab/token_validator_test.go @@ -89,7 +89,7 @@ func (f *fakeIDP) issuer() string { func (f *fakeIDP) handleOpenIDConfig(w http.ResponseWriter, r *http.Request) { // mimic https://gitlab.com/.well-known/openid-configuration - response := map[string]interface{}{ + response := map[string]any{ "claims_supported": []string{ "sub", "aud", @@ -154,7 +154,7 @@ func (f *fakeIDP) issueToken( NotBefore: jwt.NewNumericDate(issuedAt), Expiry: jwt.NewNumericDate(expiry), } - customClaims := map[string]interface{}{ + customClaims := map[string]any{ "user_login": userLogin, } token, err := jwt.Signed(f.signer). diff --git a/lib/httplib/httplib_test.go b/lib/httplib/httplib_test.go index 33fce42ecb9..d191c876cc9 100644 --- a/lib/httplib/httplib_test.go +++ b/lib/httplib/httplib_test.go @@ -128,11 +128,11 @@ func newTestHandler() *testHandler { return h } -func (h *testHandler) postSessionChunkOriginal(_ http.ResponseWriter, _ *http.Request, _ httprouter.Params) (interface{}, error) { +func (h *testHandler) postSessionChunkOriginal(_ http.ResponseWriter, _ *http.Request, _ httprouter.Params) (any, error) { return "ok", nil } -func (h *testHandler) postSessionChunkNamespace(_ http.ResponseWriter, _ *http.Request, p httprouter.Params) (interface{}, error) { +func (h *testHandler) postSessionChunkNamespace(_ http.ResponseWriter, _ *http.Request, p httprouter.Params) (any, error) { h.capturedNamespace = p.ByName("namespace") h.capturedID = p.ByName("id") return "ok", nil diff --git a/lib/httplib/reverseproxy/rewriter_test.go b/lib/httplib/reverseproxy/rewriter_test.go index 0656708523c..d1c3e10140d 100644 --- a/lib/httplib/reverseproxy/rewriter_test.go +++ b/lib/httplib/reverseproxy/rewriter_test.go @@ -71,7 +71,6 @@ func TestIPv6Fix(t *testing.T) { } for _, test := range testCases { - test := test t.Run(test.desc, func(t *testing.T) { t.Parallel() @@ -150,7 +149,6 @@ func TestRewriter(t *testing.T) { rewriter.Hostname = hostname for _, test := range testCases { - test := test t.Run(test.desc, func(t *testing.T) { t.Parallel() diff --git a/lib/integrations/awsoidc/deployservice_iam_config_test.go b/lib/integrations/awsoidc/deployservice_iam_config_test.go index 3c0db09dd2b..49e256f7073 100644 --- a/lib/integrations/awsoidc/deployservice_iam_config_test.go +++ b/lib/integrations/awsoidc/deployservice_iam_config_test.go @@ -35,11 +35,11 @@ import ( "github.com/gravitational/teleport/lib/utils/testutils/golden" ) -var badParameterCheck = func(t require.TestingT, err error, msgAndArgs ...interface{}) { +var badParameterCheck = func(t require.TestingT, err error, msgAndArgs ...any) { require.True(t, trace.IsBadParameter(err), `expected "bad parameter", but got %v`, err) } -var notFoundCheck = func(t require.TestingT, err error, msgAndArgs ...interface{}) { +var notFoundCheck = func(t require.TestingT, err error, msgAndArgs ...any) { require.True(t, trace.IsNotFound(err), `expected "not found", but got %v`, err) } diff --git a/lib/integrations/awsoidc/deployservice_update.go b/lib/integrations/awsoidc/deployservice_update.go index 167902b20ae..73097e0714f 100644 --- a/lib/integrations/awsoidc/deployservice_update.go +++ b/lib/integrations/awsoidc/deployservice_update.go @@ -195,10 +195,7 @@ func getManagedServices(ctx context.Context, clt DeployServiceClient, log *slog. // According to AWS API docs, a maximum of 10 Services can be queried at the same time when using the ecs:DescribeServices operation. batchSize := 10 for batchStart := 0; batchStart < len(ecsServiceNames); batchStart += batchSize { - batchEnd := batchStart + batchSize - if batchEnd > len(ecsServiceNames) { - batchEnd = len(ecsServiceNames) - } + batchEnd := min(batchStart+batchSize, len(ecsServiceNames)) describeServicesOut, err := clt.DescribeServices(ctx, &ecs.DescribeServicesInput{ Cluster: wellKnownClusterName, diff --git a/lib/integrations/awsoidc/eks_enroll_clusters.go b/lib/integrations/awsoidc/eks_enroll_clusters.go index 328658b5cf6..649cc3d10da 100644 --- a/lib/integrations/awsoidc/eks_enroll_clusters.go +++ b/lib/integrations/awsoidc/eks_enroll_clusters.go @@ -310,7 +310,6 @@ func EnrollEKSClusters(ctx context.Context, log *slog.Logger, clock clockwork.Cl group.SetLimit(concurrentEKSEnrollingLimit) for _, eksClusterName := range req.ClusterNames { - eksClusterName := eksClusterName group.Go(func() error { resourceId, issueType, err := enrollEKSCluster(ctx, log, clock, clt, proxyAddr, eksClusterName, req) @@ -525,10 +524,8 @@ func maybeAddAccessEntry(ctx context.Context, log *slog.Logger, clusterName, rol return false, trace.Wrap(err) } - for _, entry := range entries.AccessEntries { - if entry == roleArn { - return false, nil - } + if slices.Contains(entries.AccessEntries, roleArn) { + return false, nil } createAccessEntryReq := &eks.CreateAccessEntryInput{ @@ -590,7 +587,7 @@ func getHelmActionConfig(ctx context.Context, clientGetter genericclioptions.RES // helm.action.Configuration requires a debug method that supports string interpolation (similar to fmt.XPrintf family of commands). // > func(format string, v ...interface{}) // slog.Log does not support it, so it must be added - debugLogWithFormat := func(format string, v ...interface{}) { + debugLogWithFormat := func(format string, v ...any) { if !log.Handler().Enabled(ctx, slog.LevelDebug) { return } diff --git a/lib/integrations/awsoidc/eks_enroll_clusters_test.go b/lib/integrations/awsoidc/eks_enroll_clusters_test.go index a84103238b8..25bad74f22e 100644 --- a/lib/integrations/awsoidc/eks_enroll_clusters_test.go +++ b/lib/integrations/awsoidc/eks_enroll_clusters_test.go @@ -475,7 +475,7 @@ func TestGetKubeClientGetter(t *testing.T) { region: "us-east-1", caData: "badCA", expectedToken: "", - errorCheck: func(t require.TestingT, err error, i ...interface{}) { + errorCheck: func(t require.TestingT, err error, i ...any) { require.ErrorContains(t, err, "illegal base64 data") }, }, diff --git a/lib/integrations/awsoidc/eks_list_clusters.go b/lib/integrations/awsoidc/eks_list_clusters.go index f24c7ec1f61..23c76282a31 100644 --- a/lib/integrations/awsoidc/eks_list_clusters.go +++ b/lib/integrations/awsoidc/eks_list_clusters.go @@ -145,7 +145,6 @@ func ListEKSClusters(ctx context.Context, clt ListEKSClustersClient, req ListEKS ret.Clusters = make([]EKSCluster, 0, len(eksClusters.Clusters)) for _, clusterName := range eksClusters.Clusters { - clusterName := clusterName if clusterName == "" { continue } diff --git a/lib/integrations/awsoidc/eks_list_clusters_test.go b/lib/integrations/awsoidc/eks_list_clusters_test.go index 9fe472d8cb6..0e311369e82 100644 --- a/lib/integrations/awsoidc/eks_list_clusters_test.go +++ b/lib/integrations/awsoidc/eks_list_clusters_test.go @@ -95,7 +95,7 @@ func TestListEKSClusters(t *testing.T) { eksClustersAmount := 203 allClusters := make([]eksTypes.Cluster, 0, eksClustersAmount) - for c := 0; c < eksClustersAmount; c++ { + for c := range eksClustersAmount { allClusters = append(allClusters, eksTypes.Cluster{ Name: aws.String(fmt.Sprintf("EKS_%d", c)), Arn: aws.String(fmt.Sprintf("%s_%d", baseArn, c)), diff --git a/lib/integrations/awsoidc/externalauditstorage_iam_config_test.go b/lib/integrations/awsoidc/externalauditstorage_iam_config_test.go index e16eb8ca0fe..0d0b858f8d5 100644 --- a/lib/integrations/awsoidc/externalauditstorage_iam_config_test.go +++ b/lib/integrations/awsoidc/externalauditstorage_iam_config_test.go @@ -21,6 +21,7 @@ package awsoidc import ( "context" "fmt" + "maps" "testing" "github.com/aws/aws-sdk-go-v2/aws" @@ -303,9 +304,7 @@ func cloneRolePolicies(in map[string]map[string]string) map[string]map[string]st out := make(map[string]map[string]string, len(in)) for role, policies := range in { out[role] = make(map[string]string, len(policies)) - for policyName, policyDoc := range policies { - out[role][policyName] = policyDoc - } + maps.Copy(out[role], policies) } return out } diff --git a/lib/integrations/awsoidc/list_ec2ice_test.go b/lib/integrations/awsoidc/list_ec2ice_test.go index d761437f099..64bf8015a7e 100644 --- a/lib/integrations/awsoidc/list_ec2ice_test.go +++ b/lib/integrations/awsoidc/list_ec2ice_test.go @@ -54,10 +54,7 @@ func (m mockListEC2ICEClient) DescribeInstanceConnectEndpoints(ctx context.Conte } sliceStart := m.pageSize * (requestedPage - 1) - sliceEnd := m.pageSize * requestedPage - if sliceEnd > totalEndpoints { - sliceEnd = totalEndpoints - } + sliceEnd := min(m.pageSize*requestedPage, totalEndpoints) ret := &ec2.DescribeInstanceConnectEndpointsOutput{ InstanceConnectEndpoints: m.ec2ICEs[sliceStart:sliceEnd], @@ -83,7 +80,7 @@ func TestListEC2ICE(t *testing.T) { totalEC2ICEs := 203 allEndpoints := make([]ec2Types.Ec2InstanceConnectEndpoint, 0, totalEC2ICEs) - for i := 0; i < totalEC2ICEs; i++ { + for i := range totalEC2ICEs { allEndpoints = append(allEndpoints, ec2Types.Ec2InstanceConnectEndpoint{ SubnetId: aws.String(fmt.Sprintf("subnet-%d", i)), InstanceConnectEndpointId: aws.String("ice-name"), diff --git a/lib/integrations/awsoidc/list_security_groups_test.go b/lib/integrations/awsoidc/list_security_groups_test.go index ba585476925..e8be46f6d10 100644 --- a/lib/integrations/awsoidc/list_security_groups_test.go +++ b/lib/integrations/awsoidc/list_security_groups_test.go @@ -53,10 +53,7 @@ func (m mockListSecurityGroupsClient) DescribeSecurityGroups(ctx context.Context } sliceStart := m.pageSize * (requestedPage - 1) - sliceEnd := m.pageSize * requestedPage - if sliceEnd > totalSG { - sliceEnd = totalSG - } + sliceEnd := min(m.pageSize*requestedPage, totalSG) ret := &ec2.DescribeSecurityGroupsOutput{ SecurityGroups: m.sgs[sliceStart:sliceEnd], @@ -82,7 +79,7 @@ func TestListSecurityGroups(t *testing.T) { totalSecurityGroups := 203 allSGs := make([]ec2Types.SecurityGroup, 0, totalSecurityGroups) - for i := 0; i < totalSecurityGroups; i++ { + for i := range totalSecurityGroups { allSGs = append(allSGs, ec2Types.SecurityGroup{ GroupId: aws.String(fmt.Sprintf("sg-%d", i)), GroupName: aws.String(fmt.Sprintf("MySG-%d", i)), diff --git a/lib/integrations/awsoidc/list_subnets_test.go b/lib/integrations/awsoidc/list_subnets_test.go index ff82397a25a..f2abc54c4ba 100644 --- a/lib/integrations/awsoidc/list_subnets_test.go +++ b/lib/integrations/awsoidc/list_subnets_test.go @@ -55,10 +55,7 @@ func (m mockListSubnetsClient) DescribeSubnets(ctx context.Context, params *ec2. } sliceStart := m.pageSize * (requestedPage - 1) - sliceEnd := m.pageSize * requestedPage - if sliceEnd > totalSubnets { - sliceEnd = totalSubnets - } + sliceEnd := min(m.pageSize*requestedPage, totalSubnets) ret := &ec2.DescribeSubnetsOutput{ Subnets: m.subnets[sliceStart:sliceEnd], @@ -84,7 +81,7 @@ func TestListSubnets(t *testing.T) { totalSubnets := 203 subnets := make([]ec2Types.Subnet, 0, totalSubnets) - for i := 0; i < totalSubnets; i++ { + for i := range totalSubnets { subnets = append(subnets, ec2Types.Subnet{ SubnetId: aws.String(fmt.Sprintf("subnet-%d", i)), Tags: makeNameTags(fmt.Sprintf("MySubnet-%d", i)), diff --git a/lib/integrations/awsoidc/list_vpcs_test.go b/lib/integrations/awsoidc/list_vpcs_test.go index dd34de093f8..12064965d47 100644 --- a/lib/integrations/awsoidc/list_vpcs_test.go +++ b/lib/integrations/awsoidc/list_vpcs_test.go @@ -55,10 +55,7 @@ func (m mockListVPCsClient) DescribeVpcs(ctx context.Context, params *ec2.Descri } sliceStart := m.pageSize * (requestedPage - 1) - sliceEnd := m.pageSize * requestedPage - if sliceEnd > totalVPCs { - sliceEnd = totalVPCs - } + sliceEnd := min(m.pageSize*requestedPage, totalVPCs) ret := &ec2.DescribeVpcsOutput{ Vpcs: m.vpcs[sliceStart:sliceEnd], @@ -84,7 +81,7 @@ func TestListVPCs(t *testing.T) { totalVPCs := 203 VPCs := make([]ec2Types.Vpc, 0, totalVPCs) - for i := 0; i < totalVPCs; i++ { + for i := range totalVPCs { VPCs = append(VPCs, ec2Types.Vpc{ VpcId: aws.String(fmt.Sprintf("VPC-%d", i)), Tags: makeNameTags(fmt.Sprintf("MyVPC-%d", i)), diff --git a/lib/integrations/awsoidc/listdatabases_test.go b/lib/integrations/awsoidc/listdatabases_test.go index 6f831668e4f..b631a1da8a1 100644 --- a/lib/integrations/awsoidc/listdatabases_test.go +++ b/lib/integrations/awsoidc/listdatabases_test.go @@ -117,7 +117,7 @@ func TestListDatabases(t *testing.T) { allInstances := make([]rdsTypes.DBInstance, 0, totalDBs) for i, vpcID := range vpcIDs { - for j := 0; j < databasesPerVPC; j++ { + for j := range databasesPerVPC { allInstances = append(allInstances, rdsTypes.DBInstance{ DBInstanceStatus: stringPointer("available"), DBInstanceIdentifier: stringPointer(fmt.Sprintf("db-%v", i*databasesPerVPC+j)), diff --git a/lib/integrations/awsoidc/listdeployeddatabaseservice_test.go b/lib/integrations/awsoidc/listdeployeddatabaseservice_test.go index 573328acba3..481c216bd76 100644 --- a/lib/integrations/awsoidc/listdeployeddatabaseservice_test.go +++ b/lib/integrations/awsoidc/listdeployeddatabaseservice_test.go @@ -132,10 +132,7 @@ func (m *mockListECSClient) ListServices(ctx context.Context, params *ecs.ListSe } sliceStart := m.pageSize * (requestedPage - 1) - sliceEnd := m.pageSize * requestedPage - if sliceEnd > totalEndpoints { - sliceEnd = totalEndpoints - } + sliceEnd := min(m.pageSize*requestedPage, totalEndpoints) for _, service := range m.services[sliceStart:sliceEnd] { ret.ServiceArns = append(ret.ServiceArns, aws.ToString(service.ServiceArn)) @@ -208,7 +205,7 @@ func TestListDeployedDatabaseServices(t *testing.T) { allServices := make([]*ecstypes.Service, 0, totalServices) mapServices := make(map[string]ecstypes.Service, totalServices) allTasks := make(map[string]*ecstypes.TaskDefinition, totalServices) - for i := 0; i < totalServices; i++ { + for i := range totalServices { ecsService, ecsTask := dummyServiceTask(i) allTasks[aws.ToString(ecsTask.Family)] = ecsTask mapServices[aws.ToString(ecsService.ServiceArn)] = ecsService diff --git a/lib/integrations/awsoidc/listec2_test.go b/lib/integrations/awsoidc/listec2_test.go index 3259496f3b4..2e3f2fa27ab 100644 --- a/lib/integrations/awsoidc/listec2_test.go +++ b/lib/integrations/awsoidc/listec2_test.go @@ -75,10 +75,7 @@ func (m mockListEC2Client) DescribeInstances(ctx context.Context, params *ec2.De } sliceStart := m.pageSize * (requestedPage - 1) - sliceEnd := m.pageSize * requestedPage - if sliceEnd > totalInstances { - sliceEnd = totalInstances - } + sliceEnd := min(m.pageSize*requestedPage, totalInstances) ret := &ec2.DescribeInstancesOutput{ Reservations: []ec2Types.Reservation{{ @@ -106,7 +103,7 @@ func TestListEC2(t *testing.T) { totalEC2s := 203 allInstances := make([]ec2Types.Instance, 0, totalEC2s) - for i := 0; i < totalEC2s; i++ { + for i := range totalEC2s { allInstances = append(allInstances, ec2Types.Instance{ PrivateDnsName: aws.String("my-private-dns.compute.aws"), InstanceId: aws.String(fmt.Sprintf("i-12345678%d", i)), diff --git a/lib/integrations/awsra/trustanchor_config_test.go b/lib/integrations/awsra/trustanchor_config_test.go index 3346216de38..560543cf137 100644 --- a/lib/integrations/awsra/trustanchor_config_test.go +++ b/lib/integrations/awsra/trustanchor_config_test.go @@ -40,7 +40,7 @@ import ( "github.com/gravitational/teleport/lib/cloud/aws/tags" ) -var badParameterCheck = func(t require.TestingT, err error, msgAndArgs ...interface{}) { +var badParameterCheck = func(t require.TestingT, err error, msgAndArgs ...any) { require.True(t, trace.IsBadParameter(err), `expected "bad parameter", but got %v`, err) } @@ -223,7 +223,7 @@ func TestConfigureRolesAnywhereTrustAnchor(t *testing.T) { existingTrustAnchors: []ratypes.TrustAnchorDetail{{ Name: aws.String("mytrustanchor"), }}, - errCheck: func(tt require.TestingT, err error, i ...interface{}) { + errCheck: func(tt require.TestingT, err error, i ...any) { require.ErrorContains(tt, err, "is not owned by this integration") }, }, @@ -233,7 +233,7 @@ func TestConfigureRolesAnywhereTrustAnchor(t *testing.T) { existingProfiles: []ratypes.ProfileDetail{{ Name: aws.String("mysyncprofile"), }}, - errCheck: func(tt require.TestingT, err error, i ...interface{}) { + errCheck: func(tt require.TestingT, err error, i ...any) { require.ErrorContains(tt, err, "is not owned by this integration") }, }, @@ -250,9 +250,7 @@ func TestConfigureRolesAnywhereTrustAnchor(t *testing.T) { } existingResourceTags := make(map[string][]ratypes.Tag, len(tt.existingRAResourceTags)) - for resourceARN, resourceTags := range tt.existingRAResourceTags { - existingResourceTags[resourceARN] = resourceTags - } + maps.Copy(existingResourceTags, tt.existingRAResourceTags) existingRoles := make(map[string]iamtypes.Role, len(tt.existingRoles)) for _, role := range tt.existingRoles { diff --git a/lib/integrations/azureoidc/accessgraph_sync.go b/lib/integrations/azureoidc/accessgraph_sync.go index 91731ca98bd..ebdb18776e2 100644 --- a/lib/integrations/azureoidc/accessgraph_sync.go +++ b/lib/integrations/azureoidc/accessgraph_sync.go @@ -219,9 +219,7 @@ func roleAssignmentAction(clt AccessGraphAzureConfigureClient, subscriptionID st return trace.Errorf("could not get the graph API service principal: %v", err) } rolesNotAssigned := make(map[string]struct{}) - for k, v := range requiredGraphRoleNames { - rolesNotAssigned[k] = v - } + maps.Copy(rolesNotAssigned, requiredGraphRoleNames) for _, appRole := range graphPrincipal.AppRoles { if _, ok := requiredGraphRoleNames[*appRole.Value]; ok { roleAssignment := msgraph.AppRoleAssignment{ diff --git a/lib/integrations/azureoidc/enterprise_app.go b/lib/integrations/azureoidc/enterprise_app.go index e7de09225ec..d0bf6222a36 100644 --- a/lib/integrations/azureoidc/enterprise_app.go +++ b/lib/integrations/azureoidc/enterprise_app.go @@ -105,7 +105,7 @@ func SetupEnterpriseApp(ctx context.Context, proxyPublicAddr string, authConnect // There are some eventual consistency shenanigans instantiating enteprise applications, // where assigning app roles may temporarily return "not found" for the newly-created App ID. // Retry a few times to remediate. - for i := 0; i < maxRetries; i++ { + for i := range maxRetries { slog.DebugContext(ctx, "assign app role", "role_id", appRoleID, "attempt", i) _, err = graphClient.GrantAppRoleToServicePrincipal(ctx, spID, assignment) if err != nil { diff --git a/lib/integrations/externalauditstorage/configurator_test.go b/lib/integrations/externalauditstorage/configurator_test.go index df845e15a1e..b5b30ed8065 100644 --- a/lib/integrations/externalauditstorage/configurator_test.go +++ b/lib/integrations/externalauditstorage/configurator_test.go @@ -178,8 +178,7 @@ func TestConfiguratorIsUsed(t *testing.T) { } func TestCredentialsCache(t *testing.T) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() + ctx := t.Context() modules.SetTestModules(t, &modules.TestModules{ TestFeatures: modules.Features{ @@ -335,8 +334,7 @@ func TestCredentialsCache(t *testing.T) { // configurator to synchronously get credentials for the current draft // ExternalAuditStorageSpec. func TestDraftConfigurator(t *testing.T) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() + ctx := t.Context() modules.SetTestModules(t, &modules.TestModules{ TestFeatures: modules.Features{ diff --git a/lib/integrations/externalauditstorage/error_counter_test.go b/lib/integrations/externalauditstorage/error_counter_test.go index c22b7facf5c..bc81c8422cb 100644 --- a/lib/integrations/externalauditstorage/error_counter_test.go +++ b/lib/integrations/externalauditstorage/error_counter_test.go @@ -37,8 +37,7 @@ import ( func TestErrorCounter(t *testing.T) { t.Parallel() - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() + ctx := t.Context() testError := errors.New("test error") badError := errors.New(strings.Repeat("bad test error\r\n", 1000)) @@ -183,7 +182,6 @@ func TestErrorCounter(t *testing.T) { }}, }, } { - tc := tc t.Run(tc.desc, func(t *testing.T) { t.Parallel() alertService := newFakeAlertService() diff --git a/lib/integrations/samlidp/gcpworkforce_test.go b/lib/integrations/samlidp/gcpworkforce_test.go index 59fb4c12ae8..361ac0ab3fb 100644 --- a/lib/integrations/samlidp/gcpworkforce_test.go +++ b/lib/integrations/samlidp/gcpworkforce_test.go @@ -55,7 +55,7 @@ func TestNewGCPWorkforceService(t *testing.T) { { name: "missing organization id", organizationID: "", - errAssertion: func(t require.TestingT, err error, i ...interface{}) { + errAssertion: func(t require.TestingT, err error, i ...any) { require.ErrorContains(t, err, "required") }, }, @@ -63,7 +63,7 @@ func TestNewGCPWorkforceService(t *testing.T) { name: "missing pool name", organizationID: "123423452", poolName: "", - errAssertion: func(t require.TestingT, err error, i ...interface{}) { + errAssertion: func(t require.TestingT, err error, i ...any) { require.ErrorContains(t, err, "required") }, }, @@ -72,7 +72,7 @@ func TestNewGCPWorkforceService(t *testing.T) { organizationID: "123423452", poolName: "test-pool-name", poolProviderName: "", - errAssertion: func(t require.TestingT, err error, i ...interface{}) { + errAssertion: func(t require.TestingT, err error, i ...any) { require.ErrorContains(t, err, "required") }, }, @@ -82,7 +82,7 @@ func TestNewGCPWorkforceService(t *testing.T) { poolName: "test-pool-name", poolProviderName: "test-pool-provider-name", samlIdPMetadataURL: "", - errAssertion: func(t require.TestingT, err error, i ...interface{}) { + errAssertion: func(t require.TestingT, err error, i ...any) { require.ErrorContains(t, err, "required") }, }, diff --git a/lib/integrations/samlidp/samlidpconfig/gcpworkforce_test.go b/lib/integrations/samlidp/samlidpconfig/gcpworkforce_test.go index a825a759344..af9cc84a30f 100644 --- a/lib/integrations/samlidp/samlidpconfig/gcpworkforce_test.go +++ b/lib/integrations/samlidp/samlidpconfig/gcpworkforce_test.go @@ -36,7 +36,7 @@ func TestSAMLIdPBuildScriptCheckAndSetDefaults(t *testing.T) { { name: "empty organization id", organizationID: "", - errAssertion: func(t require.TestingT, err error, i ...interface{}) { + errAssertion: func(t require.TestingT, err error, i ...any) { require.ErrorContains(t, err, "required") }, }, @@ -46,7 +46,7 @@ func TestSAMLIdPBuildScriptCheckAndSetDefaults(t *testing.T) { poolName: "test-pool-name", poolProviderName: "test-pool-provider-name", samlIdPMetadataURL: "https://metadata", - errAssertion: func(t require.TestingT, err error, i ...interface{}) { + errAssertion: func(t require.TestingT, err error, i ...any) { require.ErrorContains(t, err, "numeric value") }, }, @@ -62,7 +62,7 @@ func TestSAMLIdPBuildScriptCheckAndSetDefaults(t *testing.T) { name: "empty pool name", organizationID: "123423452", poolName: "", - errAssertion: func(t require.TestingT, err error, i ...interface{}) { + errAssertion: func(t require.TestingT, err error, i ...any) { require.ErrorContains(t, err, "required") }, }, @@ -71,7 +71,7 @@ func TestSAMLIdPBuildScriptCheckAndSetDefaults(t *testing.T) { organizationID: "123423452", poolName: "test-pool-name", poolProviderName: "", - errAssertion: func(t require.TestingT, err error, i ...interface{}) { + errAssertion: func(t require.TestingT, err error, i ...any) { require.ErrorContains(t, err, "required") }, }, @@ -81,7 +81,7 @@ func TestSAMLIdPBuildScriptCheckAndSetDefaults(t *testing.T) { poolName: "test-pool-name", poolProviderName: "test-pool-provider-name", samlIdPMetadataURL: "", - errAssertion: func(t require.TestingT, err error, i ...interface{}) { + errAssertion: func(t require.TestingT, err error, i ...any) { require.ErrorContains(t, err, "required") }, }, diff --git a/lib/inventory/controller_test.go b/lib/inventory/controller_test.go index 83121b6313c..4f75b91923e 100644 --- a/lib/inventory/controller_test.go +++ b/lib/inventory/controller_test.go @@ -476,7 +476,7 @@ func TestAppServerBasics(t *testing.T) { require.Equal(t, int64(1), controller.instanceHBVariableDuration.Count()) // send a fake app server heartbeat - for i := 0; i < appCount; i++ { + for i := range appCount { err := downstream.Send(ctx, &proto.InventoryHeartbeat{ AppServer: &types.AppServerV3{ Metadata: types.Metadata{ @@ -522,7 +522,7 @@ func TestAppServerBasics(t *testing.T) { // reason, we want 2x the number of apps worth of keepalives to ensure that the failed keepalive counts associated // with each app have been reset. otherwise, later parts of this test become flaky. var keepaliveEvents []testEvent - for i := 0; i < appCount; i++ { + for range appCount { keepaliveEvents = append(keepaliveEvents, []testEvent{appKeepAliveOk, appKeepAliveOk}...) } @@ -531,7 +531,7 @@ func TestAppServerBasics(t *testing.T) { deny(appKeepAliveErr, handlerClose), ) - for i := 0; i < appCount; i++ { + for i := range appCount { err := downstream.Send(ctx, &proto.InventoryHeartbeat{ AppServer: &types.AppServerV3{ Metadata: types.Metadata{ @@ -583,7 +583,7 @@ func TestAppServerBasics(t *testing.T) { // expect that all app keepalives fail, then the app is removed. var expectedEvents []testEvent - for i := 0; i < appCount; i++ { + for range appCount { expectedEvents = append(expectedEvents, []testEvent{appKeepAliveErr, appKeepAliveErr, appKeepAliveErr, appKeepAliveDel}...) } @@ -789,7 +789,7 @@ func TestDatabaseServerBasics(t *testing.T) { // reason, we want 2x the number of apps worth of keepalives to ensure that the failed keepalive counts associated // with each app have been reset. otherwise, later parts of this test become flaky. var keepaliveEvents []testEvent - for i := 0; i < dbCount; i++ { + for range dbCount { keepaliveEvents = append(keepaliveEvents, []testEvent{dbKeepAliveOk, dbKeepAliveOk}...) } @@ -798,7 +798,7 @@ func TestDatabaseServerBasics(t *testing.T) { deny(appKeepAliveErr, handlerClose), ) - for i := 0; i < dbCount; i++ { + for i := range dbCount { err := downstream.Send(ctx, &proto.InventoryHeartbeat{ DatabaseServer: &types.DatabaseServerV3{ Metadata: types.Metadata{ @@ -850,7 +850,7 @@ func TestDatabaseServerBasics(t *testing.T) { // expect that all db keepalives fail, then the db is removed. var expectedEvents []testEvent - for i := 0; i < dbCount; i++ { + for range dbCount { expectedEvents = append(expectedEvents, []testEvent{dbKeepAliveErr, dbKeepAliveErr, dbKeepAliveErr, dbKeepAliveDel}...) } @@ -1245,7 +1245,6 @@ func TestGoodbye(t *testing.T) { } for _, test := range tests { - test := test t.Run(test.name, func(t *testing.T) { // Test Setup: crafting a controller and an upstream/downstream stream pipe controller := NewController( @@ -1467,7 +1466,7 @@ func TestKubernetesServerBasics(t *testing.T) { require.Equal(t, int64(1), controller.instanceHBVariableDuration.Count()) // send a fake kube server heartbeat - for i := 0; i < kubeCount; i++ { + for i := range kubeCount { err := downstream.Send(ctx, &proto.InventoryHeartbeat{ KubernetesServer: &types.KubernetesServerV3{ Metadata: types.Metadata{ @@ -1514,7 +1513,7 @@ func TestKubernetesServerBasics(t *testing.T) { // reason, we want 2x the number of apps worth of keepalives to ensure that the failed keepalive counts associated // with each app have been reset. otherwise, later parts of this test become flaky. var keepaliveEvents []testEvent - for i := 0; i < kubeCount; i++ { + for range kubeCount { keepaliveEvents = append(keepaliveEvents, []testEvent{kubeKeepAliveOk, kubeKeepAliveOk}...) } @@ -1523,7 +1522,7 @@ func TestKubernetesServerBasics(t *testing.T) { deny(appKeepAliveErr, handlerClose), ) - for i := 0; i < kubeCount; i++ { + for i := range kubeCount { err := downstream.Send(ctx, &proto.InventoryHeartbeat{ KubernetesServer: &types.KubernetesServerV3{ Metadata: types.Metadata{ @@ -1576,7 +1575,7 @@ func TestKubernetesServerBasics(t *testing.T) { // expect that all app keepalives fail, then the app is removed. var expectedEvents []testEvent - for i := 0; i < kubeCount; i++ { + for range kubeCount { expectedEvents = append(expectedEvents, []testEvent{kubeKeepAliveErr, kubeKeepAliveErr, kubeKeepAliveErr, kubeKeepAliveDel}...) } diff --git a/lib/inventory/internal/delay/heap_test.go b/lib/inventory/internal/delay/heap_test.go index 440d8c03630..fbef39651ae 100644 --- a/lib/inventory/internal/delay/heap_test.go +++ b/lib/inventory/internal/delay/heap_test.go @@ -39,7 +39,7 @@ func TestHeapBasics(t *testing.T) { require.Equal(t, entry[int]{tick: t1, key: 1}, heap.Pop()) require.Equal(t, entry[int]{tick: t2, key: 2}, heap.Pop()) - for i := 0; i < 100; i++ { + for i := range 100 { ts := now.Add(time.Duration(i+1) * time.Millisecond) heap.Push(entry[int]{tick: ts, key: i}) } @@ -55,7 +55,7 @@ func TestHeapBasics(t *testing.T) { require.Equal(t, 1, newRoot.key) var prev *entry[int] - for i := 0; i < 100; i++ { + for i := range 100 { next := heap.Pop() if prev != nil { require.True(t, prev.tick.Before(next.tick), "prev: %v, next: %v", prev, next) diff --git a/lib/inventory/internal/delay/multi_test.go b/lib/inventory/internal/delay/multi_test.go index 24c7a04c081..42aef2d9590 100644 --- a/lib/inventory/internal/delay/multi_test.go +++ b/lib/inventory/internal/delay/multi_test.go @@ -43,7 +43,7 @@ func TestMultiBasics(t *testing.T) { multi.Add(i) } - for i := 0; i < 30; i++ { + for i := range 30 { now := <-multi.Elapsed() require.Equal(t, i%10+1, multi.Tick(now)) } @@ -54,7 +54,7 @@ func TestMultiBasics(t *testing.T) { } // verify that remaining subintervals are still being serviced - for i := 0; i < 30; i++ { + for i := range 30 { k := 10 if i%2 == 0 { k = 9 @@ -98,11 +98,11 @@ func TestMultiJitter(t *testing.T) { Jitter: fakeJitter, }) - for i := 0; i < 10; i++ { + for i := range 10 { multi.Add(i + 1) } - for i := 0; i < 10; i++ { + for range 10 { select { case now := <-multi.Elapsed(): multi.Tick(now) diff --git a/lib/inventory/metadata/metadata.go b/lib/inventory/metadata/metadata.go index c31fd4fa2a8..b60a080c12a 100644 --- a/lib/inventory/metadata/metadata.go +++ b/lib/inventory/metadata/metadata.go @@ -297,7 +297,6 @@ func (c *fetchConfig) fetchCloudEnvironment(ctx context.Context) string { cloudEnv := make(chan string, len(checks)) for _, check := range checks { - check := check go func() { if check.f(ctx) { cloudEnv <- check.env diff --git a/lib/inventory/store_test.go b/lib/inventory/store_test.go index d8b39d3a1da..54d025bc7a4 100644 --- a/lib/inventory/store_test.go +++ b/lib/inventory/store_test.go @@ -50,7 +50,7 @@ func BenchmarkStore(b *testing.B) { store := NewStore() var wg sync.WaitGroup - for i := 0; i < insertions; i++ { + for i := range insertions { wg.Add(1) go func(sn int) { defer wg.Done() @@ -107,7 +107,7 @@ func TestStoreAccess(t *testing.T) { handles := make(map[*upstreamHandle]int) // create 1_000 handles across 100 unique server IDs. - for i := 0; i < 1_000; i++ { + for i := range 1_000 { serverID := fmt.Sprintf("server-%d", i%100) handle := &upstreamHandle{ hello: &proto.UpstreamInventoryHello{ @@ -125,7 +125,7 @@ func TestStoreAccess(t *testing.T) { } // ensure that all handles are visited if we iterate many times - for i := 0; i < 1_000; i++ { + for range 1_000 { store.UniqueHandles(func(h UpstreamHandle) { ptr := h.(*upstreamHandle) n, ok := handles[ptr] @@ -160,7 +160,7 @@ func TestAllHandles(t *testing.T) { handles := make(map[*upstreamHandle]int) // create 1_000 handles across 100 unique server IDs. - for i := 0; i < 1_000; i++ { + for i := range 1_000 { serverID := fmt.Sprintf("server-%d", i%100) handle := &upstreamHandle{ hello: &proto.UpstreamInventoryHello{ diff --git a/lib/itertools/stream/legacy_test.go b/lib/itertools/stream/legacy_test.go index 3cce69d2c69..9702c85c23f 100644 --- a/lib/itertools/stream/legacy_test.go +++ b/lib/itertools/stream/legacy_test.go @@ -42,7 +42,7 @@ func TestLegacyCompat(t *testing.T) { // basic into legacy compat s, err = legacy.Collect(IntoLegacy(func(yield func(int, error) bool) { - for i := 0; i < 4; i++ { + for i := range 4 { if !yield(i, nil) { return } diff --git a/lib/itertools/stream/stream_test.go b/lib/itertools/stream/stream_test.go index 44b39c1284f..77e4842c1f8 100644 --- a/lib/itertools/stream/stream_test.go +++ b/lib/itertools/stream/stream_test.go @@ -673,7 +673,7 @@ func TestRateLimit(t *testing.T) { items := make(chan struct{}, tokens+1) - for i := 0; i < workers; i++ { + for range workers { go func() { stream := RateLimit(repeat("some-item", maxItemsPerWorker), func() error { select { @@ -706,7 +706,7 @@ func TestRateLimit(t *testing.T) { // limiter isn't applied until after the first item is yielded, so pop the first item // from each worker immediately to simplify test logic. - for i := 0; i < workers; i++ { + for range workers { select { case <-items: case <-time.After(time.Second * 10): @@ -718,7 +718,7 @@ func TestRateLimit(t *testing.T) { var yielded int // do an initial fill of limiter channel - for i := 0; i < burst; i++ { + for range burst { select { case lim <- struct{}{}: yielded++ @@ -731,7 +731,7 @@ func TestRateLimit(t *testing.T) { // consume item receipt events timeoutC := time.After(time.Second * 30) - for i := 0; i < burst; i++ { + for range burst { select { case <-items: consumed++ @@ -762,7 +762,7 @@ func TestRateLimit(t *testing.T) { close(done) // wait for all workers to finish - for i := 0; i < workers; i++ { + for range workers { select { case err := <-results: require.NoError(t, err) diff --git a/lib/joinserver/joinserver_test.go b/lib/joinserver/joinserver_test.go index 2934ed3e08a..686dc8fe4b7 100644 --- a/lib/joinserver/joinserver_test.go +++ b/lib/joinserver/joinserver_test.go @@ -136,7 +136,7 @@ func (c *mockJoinServiceClient) RegisterUsingToken( } func ConnectionCountingStreamInterceptor(count *atomic.Int32) grpc.StreamServerInterceptor { - return func(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { + return func(srv any, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { count.Add(1) defer count.Add(-1) return handler(srv, ss) diff --git a/lib/jwt/jwt.go b/lib/jwt/jwt.go index 74e04a232e0..f027d284595 100644 --- a/lib/jwt/jwt.go +++ b/lib/jwt/jwt.go @@ -194,7 +194,7 @@ func AlgorithmForPublicKey(pub crypto.PublicKey) (jose.SignatureAlgorithm, error // wrapping it in an opaque signer if necessary. func SigningKeyFromPrivateKey(priv crypto.Signer) (jose.SigningKey, error) { // Create a signer with configured private key and algorithm. - var signer interface{} + var signer any switch priv.(type) { case *rsa.PrivateKey, *ecdsa.PrivateKey, ed25519.PrivateKey: signer = priv diff --git a/lib/labels/cloud.go b/lib/labels/cloud.go index fbbffd494d0..f29d646a30e 100644 --- a/lib/labels/cloud.go +++ b/lib/labels/cloud.go @@ -131,9 +131,7 @@ func (l *CloudImporter) Get() map[string]string { // Apply adds cloud labels to the provided resource. func (l *CloudImporter) Apply(r types.ResourceWithLabels) { labels := l.Get() - for k, v := range r.GetStaticLabels() { - labels[k] = v - } + maps.Copy(labels, r.GetStaticLabels()) r.SetStaticLabels(labels) } diff --git a/lib/linux/dmi_sysfs.go b/lib/linux/dmi_sysfs.go index 2e7baf4e752..af0bae701e5 100644 --- a/lib/linux/dmi_sysfs.go +++ b/lib/linux/dmi_sysfs.go @@ -77,8 +77,6 @@ func DMIInfoFromFS(dmifs fs.FS) (*DMIInfo, error) { vals := make([]string, len(names)) errs := make([]error, len(names)) for i, name := range names { - i := i - name := name wg.Add(1) go func() { diff --git a/lib/modules/modules.go b/lib/modules/modules.go index 906ce1c2be1..7b2928e040b 100644 --- a/lib/modules/modules.go +++ b/lib/modules/modules.go @@ -288,7 +288,7 @@ type Modules interface { // IsOSSBuild returns if the binary was built without enterprise modules IsOSSBuild() bool // AttestHardwareKey attests a hardware key and returns its associated private key policy. - AttestHardwareKey(context.Context, interface{}, *hardwarekey.AttestationStatement, crypto.PublicKey, time.Duration) (*keys.AttestationData, error) + AttestHardwareKey(context.Context, any, *hardwarekey.AttestationStatement, crypto.PublicKey, time.Duration) (*keys.AttestationData, error) // GenerateAccessRequestPromotions generates a list of valid promotions for given access request. GenerateAccessRequestPromotions(context.Context, AccessResourcesGetter, types.AccessRequest) (*types.AccessRequestAllowedPromotions, error) // GetSuggestedAccessLists generates a list of valid promotions for given access request. @@ -427,7 +427,7 @@ func (p *defaultModules) IsBoringBinary() bool { } // AttestHardwareKey attests a hardware key. -func (p *defaultModules) AttestHardwareKey(_ context.Context, _ interface{}, _ *hardwarekey.AttestationStatement, _ crypto.PublicKey, _ time.Duration) (*keys.AttestationData, error) { +func (p *defaultModules) AttestHardwareKey(_ context.Context, _ any, _ *hardwarekey.AttestationStatement, _ crypto.PublicKey, _ time.Duration) (*keys.AttestationData, error) { // Default modules do not support attesting hardware keys. return nil, trace.NotFound("no attestation data for the given key") } diff --git a/lib/modules/test.go b/lib/modules/test.go index efbe9c1e266..6f020d07b69 100644 --- a/lib/modules/test.go +++ b/lib/modules/test.go @@ -105,7 +105,7 @@ func (m *TestModules) IsOSSBuild() bool { } // AttestHardwareKey attests a hardware key. -func (m *TestModules) AttestHardwareKey(ctx context.Context, obj interface{}, as *hardwarekey.AttestationStatement, pk crypto.PublicKey, d time.Duration) (*keys.AttestationData, error) { +func (m *TestModules) AttestHardwareKey(ctx context.Context, obj any, as *hardwarekey.AttestationStatement, pk crypto.PublicKey, d time.Duration) (*keys.AttestationData, error) { if m.MockAttestationData != nil { return m.MockAttestationData, nil } diff --git a/lib/msgraph/client.go b/lib/msgraph/client.go index 3c98f8e6c94..b074bc1f4c8 100644 --- a/lib/msgraph/client.go +++ b/lib/msgraph/client.go @@ -177,7 +177,7 @@ func (c *Client) request(ctx context.Context, method string, uri string, payload } var lastErr error - for i := 0; i < maxRetries; i++ { + for range maxRetries { if retryAfter > 0 { select { case <-c.clock.After(retryAfter): diff --git a/lib/observability/tracing/client_test.go b/lib/observability/tracing/client_test.go index 217f3c28f7a..e3839b50082 100644 --- a/lib/observability/tracing/client_test.go +++ b/lib/observability/tracing/client_test.go @@ -105,7 +105,7 @@ func TestRotatingFileClient(t *testing.T) { } for _, tt := range cases { - tt := tt // capture range variable + // capture range variable t.Run(tt.name, func(t *testing.T) { t.Parallel() dir := t.TempDir() @@ -119,7 +119,7 @@ func TestRotatingFileClient(t *testing.T) { require.Len(t, entries, 1) // upload spans a bunch of spans - for i := 0; i < uploadCount; i++ { + for range uploadCount { require.NoError(t, client.UploadTraces(context.Background(), testSpans)) } diff --git a/lib/observability/tracing/tracing_test.go b/lib/observability/tracing/tracing_test.go index ce7253b380e..e74d1952603 100644 --- a/lib/observability/tracing/tracing_test.go +++ b/lib/observability/tracing/tracing_test.go @@ -165,7 +165,7 @@ func TestNewExporter(t *testing.T) { }{ { name: "invalid config", - errAssertion: func(t require.TestingT, err error, i ...interface{}) { + errAssertion: func(t require.TestingT, err error, i ...any) { require.Error(t, err, i...) require.True(t, trace.IsBadParameter(err), i...) }, @@ -177,7 +177,7 @@ func TestNewExporter(t *testing.T) { Service: "test", ExporterURL: "tcp://localhost:123", }, - errAssertion: func(t require.TestingT, err error, i ...interface{}) { + errAssertion: func(t require.TestingT, err error, i ...any) { require.Error(t, err, i...) require.True(t, trace.IsBadParameter(err), i...) }, @@ -358,7 +358,7 @@ func TestTraceProvider(t *testing.T) { return } - for i := 0; i < spansCreated; i++ { + for i := range spansCreated { _, span := provider.Tracer("test").Start(ctx, fmt.Sprintf("test%d", i)) span.End() } diff --git a/lib/player/player_test.go b/lib/player/player_test.go index 0ffd8417c13..7289d933162 100644 --- a/lib/player/player_test.go +++ b/lib/player/player_test.go @@ -184,7 +184,7 @@ func TestRewind(t *testing.T) { require.NoError(t, p.Play()) // play through 7 events at regular speed - for i := 0; i < 7; i++ { + for range 7 { clk.BlockUntil(1) // player is now waiting to emit event clk.Advance(1000 * time.Millisecond) // unblock event <-p.C() // read event @@ -327,7 +327,7 @@ func (s *simpleStreamer) StreamSessionEvents(ctx context.Context, sessionID sess // to access without a type assertion Code: strconv.FormatInt((i+1)*s.delay, 10), }, - Data: []byte(fmt.Sprintf("event %d\n", i)), + Data: fmt.Appendf(nil, "event %d\n", i), ChunkIndex: i, // TODO(zmb3) deprecate this DelayMilliseconds: (i + 1) * s.delay, }: diff --git a/lib/plugin/registry.go b/lib/plugin/registry.go index 7303ad88d97..31e4ea3ae93 100644 --- a/lib/plugin/registry.go +++ b/lib/plugin/registry.go @@ -32,9 +32,9 @@ type Plugin interface { // GetName returns plugin name GetName() string // RegisterProxyWebHandlers registers new methods with the ProxyWebHandler - RegisterProxyWebHandlers(handler interface{}) error + RegisterProxyWebHandlers(handler any) error // RegisterAuthWebHandlers registers new methods with the Auth Web Handler - RegisterAuthWebHandlers(service interface{}) error + RegisterAuthWebHandlers(service any) error // RegisterAuthServices registers new services on the AuthServer RegisterAuthServices(ctx context.Context, server any, getClientCert getCertFunc) error } @@ -46,9 +46,9 @@ type Registry interface { // Add adds plugin to the registry Add(plugin Plugin) error // RegisterProxyWebHandlers registers Teleport Proxy web handlers - RegisterProxyWebHandlers(handler interface{}) error + RegisterProxyWebHandlers(handler any) error // RegisterAuthWebHandlers registers Teleport Auth web handlers - RegisterAuthWebHandlers(handler interface{}) error + RegisterAuthWebHandlers(handler any) error // RegisterAuthServices registers Teleport AuthServer services RegisterAuthServices(ctx context.Context, server any, getClientCert getCertFunc) error } @@ -91,7 +91,7 @@ func (r *registry) Add(p Plugin) error { } // RegisterProxyWebHandlers registers Teleport Proxy web handlers -func (r *registry) RegisterProxyWebHandlers(handler interface{}) error { +func (r *registry) RegisterProxyWebHandlers(handler any) error { for _, p := range r.plugins { if err := p.RegisterProxyWebHandlers(handler); err != nil { return trace.Wrap(err, "plugin %v failed to register", p.GetName()) @@ -102,7 +102,7 @@ func (r *registry) RegisterProxyWebHandlers(handler interface{}) error { } // RegisterAuthWebHandlers registers Teleport Auth web handlers -func (r *registry) RegisterAuthWebHandlers(handler interface{}) error { +func (r *registry) RegisterAuthWebHandlers(handler any) error { for _, p := range r.plugins { if err := p.RegisterAuthWebHandlers(handler); err != nil { return trace.Wrap(err, "plugin %v failed to register", p.GetName()) diff --git a/lib/proxy/peer/client_test.go b/lib/proxy/peer/client_test.go index 6ed0abb156f..f005fd7057e 100644 --- a/lib/proxy/peer/client_test.go +++ b/lib/proxy/peer/client_test.go @@ -19,7 +19,6 @@ package peer import ( - "context" "testing" "time" @@ -154,8 +153,7 @@ func TestCAChange(t *testing.T) { require.NoError(t, err) require.NotNil(t, conn) require.IsType(t, (*grpcClientConn)(nil), conn) - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() + ctx := t.Context() stream, err := proto.NewProxyServiceClient(conn.(*grpcClientConn).cc).DialNode(ctx) require.NoError(t, err) require.NotNil(t, stream) diff --git a/lib/proxy/peer/quic/quic_test.go b/lib/proxy/peer/quic/quic_test.go index 5ed5a446b69..eaac4224c84 100644 --- a/lib/proxy/peer/quic/quic_test.go +++ b/lib/proxy/peer/quic/quic_test.go @@ -102,7 +102,7 @@ func TestCertificateVerification(t *testing.T) { clientCAs: correctCAPool, clientCert: clientProxyCert, rootCAs: correctCAPool, - check: func(t require.TestingT, err error, msgAndArgs ...interface{}) { + check: func(t require.TestingT, err error, msgAndArgs ...any) { require.Error(t, err, msgAndArgs...) require.ErrorIs(t, err, internal.WrongProxyError{}, msgAndArgs...) }, @@ -116,7 +116,7 @@ func TestCertificateVerification(t *testing.T) { clientCAs: correctCAPool, clientCert: clientProxyCert, rootCAs: correctCAPool, - check: func(t require.TestingT, err error, msgAndArgs ...interface{}) { + check: func(t require.TestingT, err error, msgAndArgs ...any) { require.Error(t, err, msgAndArgs...) require.NotErrorIs(t, err, internal.WrongProxyError{}, msgAndArgs...) require.ErrorAs(t, err, new(*trace.AccessDeniedError), msgAndArgs...) @@ -131,7 +131,7 @@ func TestCertificateVerification(t *testing.T) { clientCAs: correctCAPool, clientCert: clientProxyCert, rootCAs: correctCAPool, - check: func(t require.TestingT, err error, msgAndArgs ...interface{}) { + check: func(t require.TestingT, err error, msgAndArgs ...any) { require.Error(t, err, msgAndArgs...) require.ErrorAs(t, err, new(*tls.CertificateVerificationError)) }, @@ -145,7 +145,7 @@ func TestCertificateVerification(t *testing.T) { Groups: []string{string(types.RoleProxy)}, }), rootCAs: correctCAPool, - check: func(t require.TestingT, err error, msgAndArgs ...interface{}) { + check: func(t require.TestingT, err error, msgAndArgs ...any) { require.Error(t, err, msgAndArgs...) var transportError *quic.TransportError require.ErrorAs(t, err, &transportError, msgAndArgs...) @@ -166,7 +166,7 @@ func TestCertificateVerification(t *testing.T) { Groups: []string{string(types.RoleNode)}, }), rootCAs: correctCAPool, - check: func(t require.TestingT, err error, msgAndArgs ...interface{}) { + check: func(t require.TestingT, err error, msgAndArgs ...any) { require.Error(t, err, msgAndArgs...) var transportError *quic.TransportError require.ErrorAs(t, err, &transportError, msgAndArgs...) @@ -181,7 +181,6 @@ func TestCertificateVerification(t *testing.T) { } for _, tc := range testCases { - tc := tc t.Run(tc.name, func(t *testing.T) { t.Parallel() diff --git a/lib/proxy/peer/service_test.go b/lib/proxy/peer/service_test.go index 1510d65d9de..3661fb5d2cf 100644 --- a/lib/proxy/peer/service_test.go +++ b/lib/proxy/peer/service_test.go @@ -115,7 +115,7 @@ func TestSendReceive(t *testing.T) { _, err = stream.Recv() require.NoError(t, err) - for i := 0; i < 10; i++ { + for i := range 10 { send := append(send, byte(i)) err = stream.Send(&proto.Frame{Message: &proto.Frame_Data{Data: &proto.Data{ Bytes: send, diff --git a/lib/proxy/router_test.go b/lib/proxy/router_test.go index 2ff023e2519..0ab1786bd3c 100644 --- a/lib/proxy/router_test.go +++ b/lib/proxy/router_test.go @@ -116,8 +116,7 @@ func (r *mockHostResolver) LookupHost(ctx context.Context, host string) (addrs [ func TestRouteScoring(t *testing.T) { t.Parallel() - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() + ctx := t.Context() // set up various servers with overlapping IPs and hostnames servers := createServers([]server{ @@ -395,7 +394,7 @@ func TestGetServers(t *testing.T) { name: "no matches for uuid", site: testSite{cfg: &mostRecentCfg}, host: uuid.NewString(), - errAssertion: func(t require.TestingT, err error, i ...interface{}) { + errAssertion: func(t require.TestingT, err error, i ...any) { require.True(t, trace.IsNotFound(err), i...) }, serverAssertion: func(t *testing.T, srv types.Server) { @@ -406,7 +405,7 @@ func TestGetServers(t *testing.T) { name: "no matches for ec2 id", site: testSite{cfg: &unambiguousCfg}, host: "123456789012-i-1234567890abcdef0", - errAssertion: func(t require.TestingT, err error, i ...interface{}) { + errAssertion: func(t require.TestingT, err error, i ...any) { require.True(t, trace.IsNotFound(err), i...) }, serverAssertion: func(t *testing.T, srv types.Server) { @@ -417,7 +416,7 @@ func TestGetServers(t *testing.T) { name: "ambiguous match fails", site: testSite{cfg: &unambiguousCfg, nodes: servers}, host: "sheep", - errAssertion: func(t require.TestingT, err error, i ...interface{}) { + errAssertion: func(t require.TestingT, err error, i ...any) { require.ErrorIs(t, err, teleport.ErrNodeIsAmbiguous) }, serverAssertion: func(t *testing.T, srv types.Server) { @@ -489,7 +488,7 @@ func TestGetServers(t *testing.T) { name: "case-insensitive ambiguous", site: testSite{cfg: &unambiguousInsensitiveCfg, nodes: servers}, host: "platypus", - errAssertion: func(t require.TestingT, err error, i ...interface{}) { + errAssertion: func(t require.TestingT, err error, i ...any) { require.ErrorIs(t, err, teleport.ErrNodeIsAmbiguous) }, serverAssertion: func(t *testing.T, srv types.Server) { @@ -522,7 +521,7 @@ func TestGetServers(t *testing.T) { name: "git server not found", site: testSite{cfg: &unambiguousCfg, gitServers: gitServers}, host: "org-not-found.teleport-github-org", - errAssertion: func(t require.TestingT, err error, i ...interface{}) { + errAssertion: func(t require.TestingT, err error, i ...any) { require.True(t, trace.IsNotFound(err), i...) }, serverAssertion: func(t *testing.T, srv types.Server) { diff --git a/lib/resumption/client.go b/lib/resumption/client.go index 3325a3b74e7..223212e3139 100644 --- a/lib/resumption/client.go +++ b/lib/resumption/client.go @@ -355,7 +355,7 @@ func dialResumable(ctx context.Context, token resumptionToken, hostID string, re otp32 := sha256.Sum256(dhSecret) - for i := 0; i < 16; i++ { + for i := range 16 { otp32[i] ^= token[i] } diff --git a/lib/resumption/resumable_test.go b/lib/resumption/resumable_test.go index c7446c794ee..f4eceabe10f 100644 --- a/lib/resumption/resumable_test.go +++ b/lib/resumption/resumable_test.go @@ -59,7 +59,6 @@ func TestConnNetTest(t *testing.T) { } for _, tc := range testCases { - tc := tc t.Run(tc.testName, func(t *testing.T) { t.Parallel() @@ -117,7 +116,6 @@ func TestConnResume(t *testing.T) { } for _, tc := range testCases { - tc := tc t.Run(tc.testName, func(t *testing.T) { t.Parallel() testConnResume(t, tc.syncPipe) diff --git a/lib/resumption/utils.go b/lib/resumption/utils.go index 3db74115fc2..fe938694de0 100644 --- a/lib/resumption/utils.go +++ b/lib/resumption/utils.go @@ -49,7 +49,7 @@ func peekPrelude(peeker peeker, prelude string) (bool, error) { // peekLine peeks up to maxSize bytes looking for a newline ('\n'), returning // the peeked line (or the first maxSize bytes, if no newline is found). func peekLine(peeker peeker, maxSize int) (line []byte, err error) { - for i := 0; i < maxSize; i++ { + for i := range maxSize { line, err = peeker.Peek(i + 1) if err != nil { return nil, trace.Wrap(err) diff --git a/lib/reversetunnel/discovery_test.go b/lib/reversetunnel/discovery_test.go index 944a29abc12..08832fe48bd 100644 --- a/lib/reversetunnel/discovery_test.go +++ b/lib/reversetunnel/discovery_test.go @@ -104,7 +104,7 @@ func TestDiscoveryRequestMarshalling(t *testing.T) { // prepare some random proxies for the discovery request proxies := make([]types.Server, 0, proxyCount) - for i := 0; i < proxyCount; i++ { + for range proxyCount { p, err := types.NewServer(uuid.New().String(), types.KindProxy, types.ServerSpecV2{}) require.NoError(t, err) proxies = append(proxies, p) diff --git a/lib/reversetunnel/localsite.go b/lib/reversetunnel/localsite.go index 4d489738b4e..15c270bffc8 100644 --- a/lib/reversetunnel/localsite.go +++ b/lib/reversetunnel/localsite.go @@ -1028,10 +1028,7 @@ func (s *localSite) sshTunnelStats() error { if len(missing) > 0 { // Don't show all the missing nodes, thousands could be missing, just show // the first 10. - n := len(missing) - if n > 10 { - n = 10 - } + n := min(len(missing), 10) s.logger.DebugContext(s.srv.ctx, "Cluster is missing some tunnels. A small number of missing tunnels is normal, for example, a node could have just been shut down, the proxy restarted, etc. However, if this error persists with an elevated number of missing tunnels, it often indicates nodes can not discover all registered proxies. Check that all of your proxies are behind a load balancer and the load balancer is using a round robin strategy", "cluster", s.domainName, "missing_count", len(missing), diff --git a/lib/reversetunnel/localsite_test.go b/lib/reversetunnel/localsite_test.go index 543ecfd894c..85066564a17 100644 --- a/lib/reversetunnel/localsite_test.go +++ b/lib/reversetunnel/localsite_test.go @@ -240,8 +240,7 @@ func TestLocalSiteOverlap(t *testing.T) { func TestProxyResync(t *testing.T) { t.Parallel() - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() + ctx := t.Context() clock := clockwork.NewFakeClock() @@ -317,7 +316,7 @@ func TestProxyResync(t *testing.T) { expected := []types.Server{proxy1, proxy2} sort.Slice(expected, func(i, j int) bool { return expected[i].GetName() < expected[j].GetName() }) - for i := 0; i < 5; i++ { + for range 5 { // wait for the heartbeat loop to select clock.BlockUntil(3) // periodic ticker + heart beat timer + resync ticker = 3 diff --git a/lib/reversetunnel/srv_test.go b/lib/reversetunnel/srv_test.go index 4a9615f4cb2..53a6e72c38a 100644 --- a/lib/reversetunnel/srv_test.go +++ b/lib/reversetunnel/srv_test.go @@ -365,7 +365,6 @@ func TestOnlyAuthDial(t *testing.T) { "RemoteAuthServer": constants.RemoteAuthServer, "ArbitraryDial": badListenerAddr, } { - addr := addr t.Run(name, func(t *testing.T) { ch, reqC, err := clientConn.conn.OpenChannel(constants.ChanTransport, nil) require.NoError(t, err) diff --git a/lib/reversetunnel/track/tracker_test.go b/lib/reversetunnel/track/tracker_test.go index b1fe9746c5b..2179ee2f38d 100644 --- a/lib/reversetunnel/track/tracker_test.go +++ b/lib/reversetunnel/track/tracker_test.go @@ -36,7 +36,7 @@ type simpleTestProxies struct { func (s *simpleTestProxies) AddRandProxies(n int, min time.Duration, max time.Duration) { s.Lock() defer s.Unlock() - for i := 0; i < n; i++ { + for range n { proxy := newTestProxy(prDuration(min, max)) s.proxies = append(s.proxies, proxy) } @@ -119,7 +119,7 @@ type testProxy struct { func newTestProxy(life time.Duration) testProxy { principals := make([]string, 0, 3) - for i := 0; i < 3; i++ { + for range 3 { p := fmt.Sprintf("proxy-%d", rand.Int()) principals = append(principals, p) } diff --git a/lib/reversetunnel/transport.go b/lib/reversetunnel/transport.go index eb4b60c9b6f..1e69f42a2bb 100644 --- a/lib/reversetunnel/transport.go +++ b/lib/reversetunnel/transport.go @@ -358,7 +358,7 @@ func (p *transport) start() { // wait for both io.Copy goroutines to finish, or for // the context to be canceled. - for i := 0; i < 2; i++ { + for range 2 { select { case <-errorCh: case <-p.closeContext.Done(): diff --git a/lib/scopes/cache/cache_test.go b/lib/scopes/cache/cache_test.go index 34ba6cc6c66..362a208c554 100644 --- a/lib/scopes/cache/cache_test.go +++ b/lib/scopes/cache/cache_test.go @@ -315,7 +315,7 @@ func TestCacheConcurrency(t *testing.T) { // we can't really guarantee that the background writer is waiting, but we can // be reasonably sure by stepping through multiple qery cycles and asserting that // the writer hasn't completed at each iteration. - for i := 0; i < 3; i++ { + for range 3 { // perform initial check to verify that write hasn't succeeded (racy) select { case <-putDone: diff --git a/lib/secretsscanner/reporter/report.go b/lib/secretsscanner/reporter/report.go index 09e0bfe0ba9..9396c111fde 100644 --- a/lib/secretsscanner/reporter/report.go +++ b/lib/secretsscanner/reporter/report.go @@ -128,10 +128,7 @@ func (r *Reporter) reportPrivateKeys(stream accessgraphsecretsv1pb.SecretsScanne batchSize := r.batchSize for i := 0; len(privateKeys) > i; i += batchSize { start := i - end := i + batchSize - if end > len(privateKeys) { - end = len(privateKeys) - } + end := min(i+batchSize, len(privateKeys)) if err := stream.Send(&accessgraphsecretsv1pb.ReportSecretsRequest{ Payload: &accessgraphsecretsv1pb.ReportSecretsRequest_PrivateKeys{ PrivateKeys: &accessgraphsecretsv1pb.ReportPrivateKeys{ diff --git a/lib/secretsscanner/reporter/report_test.go b/lib/secretsscanner/reporter/report_test.go index afc63df2738..9755e1ad725 100644 --- a/lib/secretsscanner/reporter/report_test.go +++ b/lib/secretsscanner/reporter/report_test.go @@ -82,7 +82,6 @@ func TestReporter(t *testing.T) { } for _, tt := range tests { - tt := tt t.Run(tt.name, func(t *testing.T) { t.Parallel() e := setup( @@ -151,7 +150,7 @@ func sortPrivateKeys(keys []*accessgraphsecretsv1pb.PrivateKey) { func newPrivateKeys(t *testing.T, deviceID string) []*accessgraphsecretsv1pb.PrivateKey { t.Helper() var pks []*accessgraphsecretsv1pb.PrivateKey - for i := 0; i < 10; i++ { + for i := range 10 { pk, err := accessgraph.NewPrivateKey( &accessgraphsecretsv1pb.PrivateKeySpec{ PublicKeyFingerprint: "key" + strconv.Itoa(i), diff --git a/lib/services/local/presence_test.go b/lib/services/local/presence_test.go index dcdd55d6e40..999b18e3712 100644 --- a/lib/services/local/presence_test.go +++ b/lib/services/local/presence_test.go @@ -619,7 +619,6 @@ func TestListResources(t *testing.T) { } for testName, test := range tests { - test := test t.Run(testName, func(t *testing.T) { t.Parallel() backend, err := lite.NewWithConfig(ctx, lite.Config{ diff --git a/lib/spacelift/token_validator_test.go b/lib/spacelift/token_validator_test.go index cf2f02df477..43f335d9e11 100644 --- a/lib/spacelift/token_validator_test.go +++ b/lib/spacelift/token_validator_test.go @@ -90,7 +90,7 @@ func (f *fakeIDP) audience() string { func (f *fakeIDP) handleOpenIDConfig(w http.ResponseWriter, r *http.Request) { // mimic https://teleport-noah-dev.app.spacelift.io/.well-known/openid-configuration - response := map[string]interface{}{ + response := map[string]any{ "claims_supported": []string{ "aud", "callerId", @@ -152,7 +152,7 @@ func (f *fakeIDP) issueToken( NotBefore: jwt.NewNumericDate(issuedAt), Expiry: jwt.NewNumericDate(expiry), } - customClaims := map[string]interface{}{ + customClaims := map[string]any{ "spaceId": spaceID, } token, err := jwt.Signed(f.signer). diff --git a/lib/srv/server/ssm_install.go b/lib/srv/server/ssm_install.go index ae9d4ebbb56..d8e00296d85 100644 --- a/lib/srv/server/ssm_install.go +++ b/lib/srv/server/ssm_install.go @@ -236,7 +236,6 @@ func (si *SSMInstaller) Run(ctx context.Context, req SSMRunRequest) error { g, ctx := errgroup.WithContext(ctx) g.SetLimit(10) for instanceID, instanceName := range validInstances { - instanceName := instanceName g.Go(func() error { return trace.Wrap(si.checkCommand(ctx, req, output.Command.CommandId, &instanceID, instanceName)) }) diff --git a/lib/sshutils/scp/scp_test.go b/lib/sshutils/scp/scp_test.go index 820b6807df4..221802aaaec 100644 --- a/lib/sshutils/scp/scp_test.go +++ b/lib/sshutils/scp/scp_test.go @@ -78,7 +78,6 @@ func TestSend(t *testing.T) { }, } for _, tt := range testCases { - tt := tt t.Run(tt.desc, func(t *testing.T) { t.Parallel() cmd, err := CreateCommand(tt.config) @@ -171,7 +170,6 @@ func TestReceive(t *testing.T) { }, } for _, tt := range testCases { - tt := tt t.Run(tt.desc, func(t *testing.T) { logger := logger.With("test", tt.desc) t.Parallel() @@ -361,7 +359,6 @@ func TestInvalidDir(t *testing.T) { } for _, tt := range testCases { - tt := tt t.Run(tt.desc, func(t *testing.T) { t.Parallel() diff --git a/lib/sshutils/sftp/parse_test.go b/lib/sshutils/sftp/parse_test.go index bdab9cafc99..464ad101800 100644 --- a/lib/sshutils/sftp/parse_test.go +++ b/lib/sshutils/sftp/parse_test.go @@ -213,35 +213,35 @@ var parseTestCases = []struct { { name: "missing path", in: "user@server", - errCheck: func(t require.TestingT, err error, i ...interface{}) { + errCheck: func(t require.TestingT, err error, i ...any) { require.EqualError(t, err, fmt.Sprintf("%q is missing a path, use form [user@]host:[path]", i[0])) }, }, { name: "missing host", in: "user@:/foo", - errCheck: func(t require.TestingT, err error, i ...interface{}) { + errCheck: func(t require.TestingT, err error, i ...any) { require.EqualError(t, err, fmt.Sprintf("%q is missing a host, use form [user@]host:[path]", i[0])) }, }, { name: "invalid IPv6 addr, only one colon", in: "[user]@[:", - errCheck: func(t require.TestingT, err error, i ...interface{}) { + errCheck: func(t require.TestingT, err error, i ...any) { require.EqualError(t, err, fmt.Sprintf("%q has an invalid host, host cannot contain '[' unless it is an IPv6 address", i[0])) }, }, { name: "invalid IPv6 addr, only one colon", in: "[user]@[::1:file", - errCheck: func(t require.TestingT, err error, i ...interface{}) { + errCheck: func(t require.TestingT, err error, i ...any) { require.EqualError(t, err, fmt.Sprintf("%q has an invalid host, host cannot contain '[' or ':' unless it is an IPv6 address", i[0])) }, }, { name: "missing path with IPv6 addr", in: "[user]@[::1]", - errCheck: func(t require.TestingT, err error, i ...interface{}) { + errCheck: func(t require.TestingT, err error, i ...any) { require.EqualError(t, err, fmt.Sprintf("%q is missing a path, use form [user@]host:[path]", i[0])) }, }, diff --git a/lib/sshutils/sftp/sftp.go b/lib/sshutils/sftp/sftp.go index 69b1146ba23..9430408eb3d 100644 --- a/lib/sshutils/sftp/sftp.go +++ b/lib/sshutils/sftp/sftp.go @@ -31,6 +31,7 @@ import ( "os" "path" // SFTP requires UNIX-style path separators "runtime" + "slices" "strconv" "strings" "time" @@ -164,10 +165,8 @@ type FileSystem interface { // CreateUploadConfig returns a Config ready to upload files over SFTP. func CreateUploadConfig(src []string, dst string, opts Options) (*Config, error) { - for _, srcPath := range src { - if srcPath == "" { - return nil, trace.BadParameter("source path is empty") - } + if slices.Contains(src, "") { + return nil, trace.BadParameter("source path is empty") } if dst == "" { return nil, trace.BadParameter("destination path is empty") diff --git a/lib/sshutils/sftp/sftp_test.go b/lib/sshutils/sftp/sftp_test.go index cbd7050f4aa..b709510e797 100644 --- a/lib/sshutils/sftp/sftp_test.go +++ b/lib/sshutils/sftp/sftp_test.go @@ -296,7 +296,7 @@ func TestUpload(t *testing.T) { "tres", "dst_file", }, - errCheck: func(t require.TestingT, err error, i ...interface{}) { + errCheck: func(t require.TestingT, err error, i ...any) { require.EqualError(t, err, fmt.Sprintf(`local file "%s/dst_file" is not a directory, but multiple source files were specified`, i[0])) }, }, @@ -312,7 +312,7 @@ func TestUpload(t *testing.T) { "glob3", "dst_file", }, - errCheck: func(t require.TestingT, err error, i ...interface{}) { + errCheck: func(t require.TestingT, err error, i ...any) { require.EqualError(t, err, fmt.Sprintf(`local file "%s/dst_file" is not a directory, but multiple source files were matched by a glob pattern`, i[0])) }, }, @@ -325,7 +325,7 @@ func TestUpload(t *testing.T) { files: []string{ "src/", }, - errCheck: func(t require.TestingT, err error, i ...interface{}) { + errCheck: func(t require.TestingT, err error, i ...any) { require.EqualError(t, err, fmt.Sprintf(`"%s/src" is a directory, but the recursive option was not passed`, i[0])) require.ErrorAs(t, err, new(*NonRecursiveDirectoryTransferError)) }, @@ -335,7 +335,7 @@ func TestUpload(t *testing.T) { srcPaths: []string{ "idontexist", }, - errCheck: func(t require.TestingT, err error, i ...interface{}) { + errCheck: func(t require.TestingT, err error, i ...any) { require.ErrorIs(t, err, os.ErrNotExist) }, }, @@ -508,14 +508,14 @@ func TestDownload(t *testing.T) { files: []string{ "src/", }, - errCheck: func(t require.TestingT, err error, i ...interface{}) { + errCheck: func(t require.TestingT, err error, i ...any) { require.EqualError(t, err, fmt.Sprintf(`"%s/src" is a directory, but the recursive option was not passed`, i[0])) }, }, { name: "non-existent src file", srcPath: "idontexist", - errCheck: func(t require.TestingT, err error, i ...interface{}) { + errCheck: func(t require.TestingT, err error, i ...any) { require.ErrorIs(t, err, os.ErrNotExist) }, }, @@ -590,7 +590,7 @@ func TestHomeDirExpansion(t *testing.T) { { name: "~user path", path: "~user/foo", - errCheck: func(t require.TestingT, err error, i ...interface{}) { + errCheck: func(t require.TestingT, err error, i ...any) { require.ErrorIs(t, err, PathExpansionError{path: "~user/foo"}) }, }, diff --git a/lib/teleterm/apiserver/middleware.go b/lib/teleterm/apiserver/middleware.go index 53bf1e6ecd8..6f0c2f54db4 100644 --- a/lib/teleterm/apiserver/middleware.go +++ b/lib/teleterm/apiserver/middleware.go @@ -31,10 +31,10 @@ import ( func withErrorHandling(log *slog.Logger) grpc.UnaryServerInterceptor { return func( ctx context.Context, - req interface{}, + req any, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler, - ) (interface{}, error) { + ) (any, error) { resp, err := handler(ctx, req) if err != nil { log.ErrorContext(ctx, "Request failed", "error", err) diff --git a/lib/teleterm/daemon/daemon_test.go b/lib/teleterm/daemon/daemon_test.go index 5b6387514a4..21ef638fd43 100644 --- a/lib/teleterm/daemon/daemon_test.go +++ b/lib/teleterm/daemon/daemon_test.go @@ -293,7 +293,6 @@ func TestGatewayCRUD(t *testing.T) { } for _, tt := range tests { - tt := tt t.Run(tt.name, func(t *testing.T) { t.Parallel() @@ -320,7 +319,6 @@ func TestGatewayCRUD(t *testing.T) { nameToGateway := make(map[string]gateway.Gateway, len(tt.gatewayNamesToCreate)) for _, gatewayName := range tt.gatewayNamesToCreate { - gatewayName := gatewayName gateway, err := daemon.CreateGateway(context.Background(), CreateGatewayParams{ TargetURI: tt.appendGatewayTargetURI(gatewayName).String(), TargetUser: "alice", @@ -473,7 +471,6 @@ func TestRetryWithRelogin(t *testing.T) { } for _, tt := range tests { - tt := tt t.Run(tt.name, func(t *testing.T) { t.Parallel() diff --git a/lib/teleterm/gateway/db_middleware_test.go b/lib/teleterm/gateway/db_middleware_test.go index 1f786a5d822..f175e1efba9 100644 --- a/lib/teleterm/gateway/db_middleware_test.go +++ b/lib/teleterm/gateway/db_middleware_test.go @@ -102,8 +102,7 @@ func TestDBMiddleware_OnNewConnection(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() + ctx := t.Context() hasCalledOnExpiredCert := false diff --git a/lib/teleterm/teleterm_test.go b/lib/teleterm/teleterm_test.go index bf7b2f6a2e5..fa28364cc62 100644 --- a/lib/teleterm/teleterm_test.go +++ b/lib/teleterm/teleterm_test.go @@ -105,7 +105,6 @@ func TestStart(t *testing.T) { } for _, test := range tests { - test := test t.Run(test.name, func(t *testing.T) { t.Parallel() diff --git a/lib/terraformcloud/token_validator_test.go b/lib/terraformcloud/token_validator_test.go index 450aac2f567..acda310bbd0 100644 --- a/lib/terraformcloud/token_validator_test.go +++ b/lib/terraformcloud/token_validator_test.go @@ -85,7 +85,7 @@ func (f *fakeIDP) issuer() string { func (f *fakeIDP) handleOpenIDConfig(w http.ResponseWriter, r *http.Request) { // mimic https://app.terraform.io/.well-known/openid-configuration - response := map[string]interface{}{ + response := map[string]any{ "claims_supported": []string{ "sub", "aud", @@ -152,7 +152,7 @@ func (f *fakeIDP) issueToken( NotBefore: jwt.NewNumericDate(issuedAt), Expiry: jwt.NewNumericDate(expiry), } - customClaims := map[string]interface{}{ + customClaims := map[string]any{ "terraform_organization_name": organizationName, "terraform_workspace_name": workspaceName, "terraform_project_name": projectName, diff --git a/lib/tlsca/ca_test.go b/lib/tlsca/ca_test.go index 62e86012b35..81027d4daa3 100644 --- a/lib/tlsca/ca_test.go +++ b/lib/tlsca/ca_test.go @@ -82,7 +82,6 @@ func TestPrincipals(t *testing.T) { } for _, test := range tests { - test := test t.Run(test.name, func(t *testing.T) { t.Parallel() diff --git a/lib/versioncontrol/github/github.go b/lib/versioncontrol/github/github.go index f3c2f6ea83c..e9b760fa446 100644 --- a/lib/versioncontrol/github/github.go +++ b/lib/versioncontrol/github/github.go @@ -243,7 +243,7 @@ func parseReleaseNoteLabels(notes string) map[string]string { continue } l = strings.TrimPrefix(l, labelPrefix) - for _, kv := range strings.Split(l, ",") { + for kv := range strings.SplitSeq(l, ",") { if !strings.Contains(kv, "=") { logger.DebugContext(context.Background(), "Skipping invalid release label keypair", "label", kv) continue diff --git a/lib/versioncontrol/target.go b/lib/versioncontrol/target.go index 6f034fb4f9e..d1da926b580 100644 --- a/lib/versioncontrol/target.go +++ b/lib/versioncontrol/target.go @@ -174,7 +174,7 @@ func (t Target) SecurityPatchAltOf(other Target) bool { // iterSecAlts is a helper for iterating the valide values of the // security-patch-alts label. func (t Target) iterSecAlts(fn func(v string)) { - for _, alt := range strings.Split(t[LabelSecurityPatchAlts], "|") { + for alt := range strings.SplitSeq(t[LabelSecurityPatchAlts], "|") { alt = strings.TrimSpace(alt) if !semver.IsValid(alt) { continue diff --git a/lib/versioncontrol/upgradewindow/encoding_test.go b/lib/versioncontrol/upgradewindow/encoding_test.go index c32b0695ad3..dbefb3a7f4d 100644 --- a/lib/versioncontrol/upgradewindow/encoding_test.go +++ b/lib/versioncontrol/upgradewindow/encoding_test.go @@ -56,7 +56,7 @@ func TestKubeControllerScheduleBasics(t *testing.T) { require.Len(t, repr.Windows, 3) // ensure that times are equivalent - for i := 0; i < 3; i++ { + for i := range 3 { require.False(t, repr.Windows[i].Start.IsZero()) require.False(t, repr.Windows[i].Stop.IsZero()) diff --git a/lib/versioncontrol/upgradewindow/upgradewindow_test.go b/lib/versioncontrol/upgradewindow/upgradewindow_test.go index 3adb1bc9e95..a42782516e5 100644 --- a/lib/versioncontrol/upgradewindow/upgradewindow_test.go +++ b/lib/versioncontrol/upgradewindow/upgradewindow_test.go @@ -51,8 +51,7 @@ func (b *fakeKubeBackend) Put(ctx context.Context, item backend.Item) (*backend. func TestKubeControllerDriver(t *testing.T) { t.Parallel() - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() + ctx := t.Context() bk := newFakeKubeBackend() @@ -112,8 +111,7 @@ func TestKubeControllerDriver(t *testing.T) { func TestSystemdUnitDriver(t *testing.T) { t.Parallel() - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() + ctx := t.Context() // use a sub-directory of a temp dir in order to verify that // driver creates dir when needed. @@ -228,8 +226,7 @@ func (d *fakeDriver) withLock(fn func()) { func TestExporterBasics(t *testing.T) { t.Parallel() - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() + ctx := t.Context() sc := make(chan context.Context) diff --git a/lib/vnet/dns/dns_test.go b/lib/vnet/dns/dns_test.go index 9d981c977dd..b89418b5df6 100644 --- a/lib/vnet/dns/dns_test.go +++ b/lib/vnet/dns/dns_test.go @@ -58,7 +58,7 @@ func TestServer(t *testing.T) { // Create two upstream nameservers that are able to resolve A and AAAA records for all names. var upstreamAddrs []string - for i := 0; i < 2; i++ { + for i := range 2 { upstreamServer, err := NewServer(staticResolver, noUpstreams) require.NoError(t, err) conn, err := net.ListenUDP("udp", udpLocalhost) diff --git a/lib/vnet/ipbits_test.go b/lib/vnet/ipbits_test.go index 7b1d4fa7417..078d579a08c 100644 --- a/lib/vnet/ipbits_test.go +++ b/lib/vnet/ipbits_test.go @@ -42,7 +42,7 @@ func TestRandomFreeIPv4InNet(t *testing.T) { } // Assign every free IP. - for i := 0; i < freeIPCount; i++ { + for range freeIPCount { ip, err := randomFreeIPv4InNet(ipNet, ipIsFree) require.NoError(t, err) assignedIPs[ip] = struct{}{} diff --git a/lib/vnet/vnet_test.go b/lib/vnet/vnet_test.go index 07f6075aed1..6d4e584ec0b 100644 --- a/lib/vnet/vnet_test.go +++ b/lib/vnet/vnet_test.go @@ -940,7 +940,7 @@ func TestDialFakeApp(t *testing.T) { // // It's important not to run these subtests which advance a shared clock in parallel. It's okay for // the inner app dial/connection tests to run in parallel because they don't advance the clock. - for i := 0; i < 3; i++ { + for i := range 3 { t.Run(fmt.Sprint(i), func(t *testing.T) { for _, tc := range validTestCases { if tc.expectRouteToApp.URI == "" && tc.expectRouteToApp.PublicAddr != "" { @@ -1021,7 +1021,7 @@ func testEchoConnection(t *testing.T, conn net.Conn) { writeBuf := bytes.Repeat([]byte(testString), 200) readBuf := make([]byte, len(writeBuf)) - for i := 0; i < 10; i++ { + for range 10 { written, err := conn.Write(writeBuf) for written < len(writeBuf) && err == nil { var n int diff --git a/lib/winpki/ldap.go b/lib/winpki/ldap.go index 16155347ca0..3a1f6494711 100644 --- a/lib/winpki/ldap.go +++ b/lib/winpki/ldap.go @@ -68,8 +68,8 @@ func (cfg LDAPConfig) Check() error { // DomainDN returns the distinguished name for an Active Directory Domain. func DomainDN(domain string) string { var sb strings.Builder - parts := strings.Split(domain, ".") - for _, p := range parts { + parts := strings.SplitSeq(domain, ".") + for p := range parts { if sb.Len() > 0 { sb.WriteString(",") } diff --git a/lib/winpki/objectsid.go b/lib/winpki/objectsid.go index 1f2e148e5da..02beb1c5e53 100644 --- a/lib/winpki/objectsid.go +++ b/lib/winpki/objectsid.go @@ -79,7 +79,7 @@ func decodeADSID(b []byte) (adSID, error) { var size = 4 for i := 0; i < sid.SubAuthorityCount; i++ { var subAuthority int - for k := 0; k < size; k++ { + for k := range size { index := offset + k if index >= len { return adSID{}, trace.BadParameter("AD SID response was too short to decode")