diff --git a/async/panic_handler.go b/async/panic_handler.go index 3043db1b..18c9e2f9 100644 --- a/async/panic_handler.go +++ b/async/panic_handler.go @@ -1,12 +1,12 @@ package async type PanicHandler interface { - HandlePanic(interface{}) + HandlePanic(any) } type NoopPanicHandler struct{} -func (n NoopPanicHandler) HandlePanic(r interface{}) {} +func (n NoopPanicHandler) HandlePanic(r any) {} func HandlePanic(panicHandler PanicHandler) { if panicHandler == nil { diff --git a/async/panic_handler_test.go b/async/panic_handler_test.go index 0f7ab6b7..cd503d2e 100644 --- a/async/panic_handler_test.go +++ b/async/panic_handler_test.go @@ -9,7 +9,7 @@ import ( type recoverHandler struct{} -func (h recoverHandler) HandlePanic(r interface{}) { +func (h recoverHandler) HandlePanic(r any) { fmt.Println("recoverHandler", r) } diff --git a/benchmarks/gluon_bench/benchmark/run.go b/benchmarks/gluon_bench/benchmark/run.go index 5e49689f..290e6795 100644 --- a/benchmarks/gluon_bench/benchmark/run.go +++ b/benchmarks/gluon_bench/benchmark/run.go @@ -78,7 +78,7 @@ func RunMain() { benchmarkStats := make([]*reporter.BenchmarkStatistics, 0, numRuns) - for r := uint(0); r < numRuns; r++ { + for r := range numRuns { if *flags.Verbose { fmt.Printf("Benchmark Run: %v\n", r) } diff --git a/benchmarks/gluon_bench/imap_benchmarks/build_mailbox.go b/benchmarks/gluon_bench/imap_benchmarks/build_mailbox.go index da53378a..2ea7d309 100644 --- a/benchmarks/gluon_bench/imap_benchmarks/build_mailbox.go +++ b/benchmarks/gluon_bench/imap_benchmarks/build_mailbox.go @@ -35,7 +35,7 @@ func BuildMailbox(cl *client.Client, mailbox string, messageCount int) error { func BuildMailboxWithMessages(cl *client.Client, mailbox string, messageCount int, messages []string) error { messagesLen := len(messages) - for i := 0; i < messageCount; i++ { + for i := range messageCount { literal := fmt.Sprintf("To: %v@a.com\r\nFrom: %v@a.com\r\n", uuid.NewString(), uuid.NewString()) + messages[i%messagesLen] if err := AppendToMailbox(cl, mailbox, literal, time.Now()); err != nil { return err diff --git a/benchmarks/gluon_bench/imap_benchmarks/client.go b/benchmarks/gluon_bench/imap_benchmarks/client.go index bf69be26..0519821c 100644 --- a/benchmarks/gluon_bench/imap_benchmarks/client.go +++ b/benchmarks/gluon_bench/imap_benchmarks/client.go @@ -34,9 +34,9 @@ func FetchMessage(cl *client.Client, sequenceSet *imap.SeqSet, items ...imap.Fet return cl.Fetch(sequenceSet, items, ch) } -func flagsToInterface(flags ...string) []interface{} { - return xslices.Map(flags, func(f string) interface{} { - return interface{}(f) +func flagsToInterface(flags ...string) []any { + return xslices.Map(flags, func(f string) any { + return any(f) }) } diff --git a/benchmarks/gluon_bench/imap_benchmarks/parallel_seqset.go b/benchmarks/gluon_bench/imap_benchmarks/parallel_seqset.go index e3c5d75b..5d5cd37f 100644 --- a/benchmarks/gluon_bench/imap_benchmarks/parallel_seqset.go +++ b/benchmarks/gluon_bench/imap_benchmarks/parallel_seqset.go @@ -26,7 +26,7 @@ func NewParallelSeqSetFromFile(path string, numWorkers uint) (*ParallelSeqSet, e } seqSets := make([][]*imap.SeqSet, numWorkers) - for i := uint(0); i < numWorkers; i++ { + for i := range numWorkers { seqSets[i] = list } @@ -43,11 +43,11 @@ func NewParallelSeqSetExpunge(count uint32, numWorkers uint, generateIntervals, workerSplit := count / uint32(numWorkers) available := make([]uint32, count) - for r := uint32(0); r < count; r++ { + for r := range count { available[r] = r + 1 } - for i := uint(0); i < numWorkers; i++ { + for i := range numWorkers { available := available[(uint32(i) * workerSplit):(uint32(i+1) * workerSplit)] list := make([]*imap.SeqSet, 0, workerSplit) @@ -80,7 +80,7 @@ func NewParallelSeqSetExpunge(count uint32, numWorkers uint, generateIntervals, } } else { count := uint32(len(available)) - for r := uint32(0); r < count; r++ { + for r := range count { index := rand.Uint32() % (count - r) seqSet := &imap.SeqSet{} if uid { @@ -106,12 +106,12 @@ func NewParallelSeqSetExpunge(count uint32, numWorkers uint, generateIntervals, func NewParallelSeqSetRandom(count uint32, numWorkers uint, generateIntervals, randomDrain, uid bool) *ParallelSeqSet { lists := make([][]*imap.SeqSet, numWorkers) - for i := uint(0); i < numWorkers; i++ { + for i := range numWorkers { list := make([]*imap.SeqSet, 0, count) if randomDrain { available := make([]uint32, count) - for r := uint32(0); r < count; r++ { + for r := range count { available[r] = r + 1 } @@ -134,11 +134,7 @@ func NewParallelSeqSetRandom(count uint32, numWorkers uint, generateIntervals, r if uid { seqSet.AddRange(available[index], available[index+intervalRange-1]) } else { - endSeq := index + intervalRange + 1 - - if endSeq > itemsLeft { - endSeq = itemsLeft - } + endSeq := min(index+intervalRange+1, itemsLeft) seqSet.AddRange(index+1, endSeq) } @@ -153,7 +149,7 @@ func NewParallelSeqSetRandom(count uint32, numWorkers uint, generateIntervals, r available = append(available[:cutIndex], available[index+intervalRange:]...) } } else { - for r := uint32(0); r < count; r++ { + for r := range count { index := rand.Uint32() % (count - r) seqSet := &imap.SeqSet{} if uid { @@ -167,7 +163,7 @@ func NewParallelSeqSetRandom(count uint32, numWorkers uint, generateIntervals, r } } } else { - for r := uint32(0); r < count; r++ { + for range count { var seqSet *imap.SeqSet if !generateIntervals { seqSet = RandomSequenceSetNum(count) @@ -188,7 +184,7 @@ func NewParallelSeqSetRandom(count uint32, numWorkers uint, generateIntervals, r // NewParallelSeqSetAll generates once sequence set for each worker which covers everything (1:*). func NewParallelSeqSetAll(numWorkers uint) *ParallelSeqSet { lists := make([][]*imap.SeqSet, numWorkers) - for i := uint(0); i < numWorkers; i++ { + for i := range numWorkers { lists[i] = []*imap.SeqSet{NewSequenceSetAll()} } diff --git a/benchmarks/gluon_bench/imap_benchmarks/search.go b/benchmarks/gluon_bench/imap_benchmarks/search.go index 673e796d..d5004faa 100644 --- a/benchmarks/gluon_bench/imap_benchmarks/search.go +++ b/benchmarks/gluon_bench/imap_benchmarks/search.go @@ -120,8 +120,8 @@ func (s *SearchTextQuery) Run(ctx context.Context, cl *client.Client, workerInde fieldsStr := []string{"TEXT", s.queries[keywordIndex]} - fields := xslices.Map(fieldsStr, func(v string) interface{} { - return interface{}(v) + fields := xslices.Map(fieldsStr, func(v string) any { + return any(v) }) if err := criteria.ParseWithCharset(fields, nil); err != nil { @@ -162,7 +162,7 @@ func (s *SearchSinceQuery) Setup(ctx context.Context, cl *client.Client, searchC } else { s.dates = make([]string, 0, searchCount) - for i := uint32(0); i < searchCount; i++ { + for range searchCount { t := time.Date(1980+rand.Intn(40), time.Month(rand.Intn(12)), rand.Intn(28), 0, 0, 0, 0, time.UTC) s.dates = append(s.dates, t.Format("02-Jan-2006")) } @@ -181,8 +181,8 @@ func (s *SearchSinceQuery) Run(ctx context.Context, cl *client.Client, workerInd fieldsStr := []string{"SINCE", d} - fields := xslices.Map(fieldsStr, func(v string) interface{} { - return interface{}(v) + fields := xslices.Map(fieldsStr, func(v string) any { + return any(v) }) if err := criteria.ParseWithCharset(fields, nil); err != nil { @@ -215,8 +215,8 @@ func (s *SearchCmdQuery) Setup(ctx context.Context, cl *client.Client, searchCou queries := strings.Split(*searchCmdQueryFlag, " ") - fields := xslices.Map(queries, func(v string) interface{} { - return interface{}(v) + fields := xslices.Map(queries, func(v string) any { + return any(v) }) if err := s.criteria.ParseWithCharset(fields, nil); err != nil { diff --git a/benchmarks/gluon_bench/reporter/reporter.go b/benchmarks/gluon_bench/reporter/reporter.go index a58f45e2..a77be3c0 100644 --- a/benchmarks/gluon_bench/reporter/reporter.go +++ b/benchmarks/gluon_bench/reporter/reporter.go @@ -3,7 +3,7 @@ package reporter import ( "fmt" "math" - "sort" + "slices" "strings" "time" @@ -39,9 +39,7 @@ func (b *BenchmarkStatistics) String() string { func NewBenchmarkStatistics(extra BenchmarkExtra, durations ...time.Duration) *BenchmarkStatistics { sortedDurations := durations - sort.Slice(sortedDurations, func(i1, i2 int) bool { - return sortedDurations[i1] < sortedDurations[i2] - }) + slices.Sort(sortedDurations) statistics := &BenchmarkStatistics{ Extra: extra, diff --git a/benchmarks/gluon_bench/store_benchmarks/get.go b/benchmarks/gluon_bench/store_benchmarks/get.go index b6f8766c..0d5733d5 100644 --- a/benchmarks/gluon_bench/store_benchmarks/get.go +++ b/benchmarks/gluon_bench/store_benchmarks/get.go @@ -39,7 +39,7 @@ func (g *Get) Run(ctx context.Context, st store.Store) (*reporter.BenchmarkRun, uuidLen := len(g.uuids) return RunStoreWorkers(ctx, st, func(ctx context.Context, s store.Store, dc *timing.Collector, u uint) error { - for i := 0; i < uuidLen; i++ { + for range uuidLen { index := rand.Intn(uuidLen) dc.Start() diff --git a/benchmarks/gluon_bench/store_benchmarks/utils.go b/benchmarks/gluon_bench/store_benchmarks/utils.go index d3b12854..e45ad057 100644 --- a/benchmarks/gluon_bench/store_benchmarks/utils.go +++ b/benchmarks/gluon_bench/store_benchmarks/utils.go @@ -17,7 +17,7 @@ func CreateRandomState(st store.Store, count uint) ([]imap.InternalMessageID, er uuids := make([]imap.InternalMessageID, 0, count) data := make([]byte, *flags.StoreItemSize) - for i := uint(0); i < count; i++ { + for range count { uuid := imap.NewInternalMessageID() if err := st.Set(uuid, bytes.NewReader(data)); err != nil { @@ -65,10 +65,7 @@ func RunStoreWorkersSplitRange(ctx context.Context, st store.Store, length uint, workDivision := length / *flags.StoreWorkers return RunStoreWorkers(ctx, st, func(ctx context.Context, s store.Store, collector *timing.Collector, u uint) error { - end := workDivision * (u + 1) - if end > length { - end = length - } + end := min(workDivision*(u+1), length) return fn(ctx, st, collector, u*workDivision, end) }) diff --git a/benchmarks/gluon_bench/utils/cmd_profiler.go b/benchmarks/gluon_bench/utils/cmd_profiler.go index 8935a029..e3c89334 100644 --- a/benchmarks/gluon_bench/utils/cmd_profiler.go +++ b/benchmarks/gluon_bench/utils/cmd_profiler.go @@ -25,7 +25,7 @@ func (c *DurationCmdProfiler) Stop(cmdType int) { func NewDurationCmdProfiler() *DurationCmdProfiler { profiler := &DurationCmdProfiler{} - for i := 0; i < len(profiler.durations); i++ { + for i := range len(profiler.durations) { profiler.durations[i] = make([]time.Duration, 0, 128) } @@ -59,7 +59,7 @@ func (c *DurationCmdProfilerBuilder) Merge() [profiling.CmdTypeTotal][]time.Dura var result [profiling.CmdTypeTotal][]time.Duration for _, v := range c.profilers { - for i := 0; i < len(result); i++ { + for i := range len(result) { result[i] = append(result[i], v.durations[i]...) } } diff --git a/connector/dummy_simulate.go b/connector/dummy_simulate.go index ac66a241..9b4b97c4 100644 --- a/connector/dummy_simulate.go +++ b/connector/dummy_simulate.go @@ -105,7 +105,7 @@ func (conn *Dummy) MessagesCreated(messages []imap.Message, literals [][]byte, m var updates []*imap.MessageCreated - for i := 0; i < len(messages); i++ { + for i := range messages { parsedMessage, err := imap.NewParsedMessage(literals[i]) if err != nil { return err diff --git a/imap/command/authenticate_test.go b/imap/command/authenticate_test.go index 58beb9e9..b1531bac 100644 --- a/imap/command/authenticate_test.go +++ b/imap/command/authenticate_test.go @@ -26,7 +26,7 @@ func TestParser_Authenticate(t *testing.T) { var continued bool tag := fmt.Sprintf("A%04d", i) - authString := base64.StdEncoding.EncodeToString([]byte(fmt.Sprintf("\x00%s\x00%s", data.UserID, data.Password))) + authString := base64.StdEncoding.EncodeToString(fmt.Appendf(nil, "\x00%s\x00%s", data.UserID, data.Password)) input := toIMAPLine(tag+` AUTHENTICATE PLAIN`, authString) s := rfcparser.NewScanner(bytes.NewReader(input)) p := NewParser(s, WithLiteralContinuationCallback(continuationChecker(&continued))) diff --git a/imap/command/date_time.go b/imap/command/date_time.go index 8efcc58a..c5e7b740 100644 --- a/imap/command/date_time.go +++ b/imap/command/date_time.go @@ -95,7 +95,7 @@ var dateMonthToInt = map[string]time.Month{ func ParseDateMonth(p *rfcparser.Parser) (time.Month, error) { month := make([]byte, 3) - for i := 0; i < 3; i++ { + for i := range 3 { if err := p.Consume(rfcparser.TokenTypeChar, "unexpected character for date month"); err != nil { return 0, err } diff --git a/imap/seqset_test.go b/imap/seqset_test.go index 76ec9b61..79b6bdbc 100644 --- a/imap/seqset_test.go +++ b/imap/seqset_test.go @@ -22,7 +22,6 @@ func TestSeqSet(t *testing.T) { } for _, tc := range tests { - tc := tc t.Run(tc.want, func(t *testing.T) { assert.Equal(t, tc.want, NewSeqSet(tc.have).String()) diff --git a/imap/uid_validity_generator_test.go b/imap/uid_validity_generator_test.go index 285b2ba4..3ad26ca6 100644 --- a/imap/uid_validity_generator_test.go +++ b/imap/uid_validity_generator_test.go @@ -17,7 +17,7 @@ func TestEpochUIDValidityGenerator_Generate(t *testing.T) { var uids = make([]UID, UIDCount) - for i := 0; i < UIDCount; i++ { + for i := range UIDCount { uid, err := generator.Generate() require.NoError(t, err) @@ -29,7 +29,7 @@ func TestEpochUIDValidityGenerator_Generate(t *testing.T) { uid, err := generator.Generate() require.NoError(t, err) - for i := 0; i < UIDCount-1; i++ { + for i := range UIDCount - 1 { assert.Less(t, uids[i], uids[i+1]) } @@ -51,7 +51,7 @@ func TestEpochUIDValidityGenerator_GenerateParallel(t *testing.T) { slices.Sort(uids) - for i := 0; i < UIDCount-1; i++ { + for i := range UIDCount - 1 { assert.Less(t, uids[i], uids[i+1]) } } diff --git a/internal/backend/connector_updates.go b/internal/backend/connector_updates.go index 031c65ea..b6db5525 100644 --- a/internal/backend/connector_updates.go +++ b/internal/backend/connector_updates.go @@ -357,10 +357,7 @@ func (user *user) applyMessagesCreated(ctx context.Context, update *imap.Message for _, chunk := range xslices.Chunk(messagesToCreate, db.ChunkLimit) { // Create messages in the store in parallel - numStoreRoutines := runtime.NumCPU() / 4 - if numStoreRoutines < len(chunk) { - numStoreRoutines = len(chunk) - } + numStoreRoutines := max(runtime.NumCPU()/4, len(chunk)) if err := parallel.DoContext(ctx, numStoreRoutines, len(chunk), func(ctx context.Context, i int) error { msg := chunk[i] if err := user.store.SetUnchecked(msg.InternalID, msg.reader); err != nil { diff --git a/internal/session/cmdwatcher/watcher_test.go b/internal/session/cmdwatcher/watcher_test.go index 80faaf85..70e6018e 100644 --- a/internal/session/cmdwatcher/watcher_test.go +++ b/internal/session/cmdwatcher/watcher_test.go @@ -73,7 +73,7 @@ func (m *mockFeatureFlagProvider) SetFlag(key string, value bool) { type mockPanicHandler struct{} -func (m *mockPanicHandler) HandlePanic(r interface{}) {} +func (m *mockPanicHandler) HandlePanic(r any) {} func createTestService(testInterval time.Duration, featureFlags map[string]bool) (*cmdwatcher.Service, *mockProgressSender) { ctx := context.Background() diff --git a/internal/state/filters.go b/internal/state/filters.go index 3ddcc505..25b197c9 100644 --- a/internal/state/filters.go +++ b/internal/state/filters.go @@ -2,6 +2,7 @@ package state import ( "fmt" + "slices" "github.com/ProtonMail/gluon/imap" ) @@ -83,11 +84,5 @@ func (f *AnyMessageIDStateFilter) Filter(s *State) bool { return false } - for _, msgID := range f.MessageIDs { - if s.snap.hasMessage(msgID) { - return true - } - } - - return false + return slices.ContainsFunc(f.MessageIDs, s.snap.hasMessage) } diff --git a/internal/state/mailbox.go b/internal/state/mailbox.go index a75b2719..1121f418 100644 --- a/internal/state/mailbox.go +++ b/internal/state/mailbox.go @@ -296,7 +296,7 @@ func (m *Mailbox) Copy(ctx context.Context, seq []command.SeqRange, name string) msgIDs := make([]db.MessageIDPair, len(messages)) msgUIDs := make([]imap.UID, len(messages)) - for i := 0; i < len(messages); i++ { + for i := range messages { snapMsg := messages[i] msgUIDs[i] = snapMsg.UID msgIDs[i] = snapMsg.ID @@ -351,7 +351,7 @@ func (m *Mailbox) Move(ctx context.Context, seq []command.SeqRange, name string) msgIDs := make([]db.MessageIDPair, len(messages)) msgUIDs := make([]imap.UID, len(messages)) - for i := 0; i < len(messages); i++ { + for i := range messages { snapMsg := messages[i] msgUIDs[i] = snapMsg.UID msgIDs[i] = snapMsg.ID diff --git a/internal/state/mailbox_fetch.go b/internal/state/mailbox_fetch.go index de1518d2..cad1bcd4 100644 --- a/internal/state/mailbox_fetch.go +++ b/internal/state/mailbox_fetch.go @@ -108,12 +108,9 @@ func (m *Mailbox) Fetch(ctx context.Context, cmd *command.Fetch, ch chan respons if !contexts.IsParallelismDisabledCtx(ctx) && (len(snapMessages) > minCountForParallelism || (len(snapMessages) > 1 && needsLiteral)) { // If multiple fetch request are happening in parallel, reduce the number of goroutines in proportion to that // to avoid overloading the user's machine. - parallelism = runtime.NumCPU() / int(activeFetchRequests) - - // make sure that if division hits 0, we run single threaded rather than use MAXGOPROCS - if parallelism < 1 { - parallelism = 1 - } + parallelism = max( + // make sure that if division hits 0, we run single threaded rather than use MAXGOPROCS + runtime.NumCPU()/int(activeFetchRequests), 1) } else { parallelism = 1 } diff --git a/internal/state/match_test.go b/internal/state/match_test.go index 1c5aa62d..29954f0b 100644 --- a/internal/state/match_test.go +++ b/internal/state/match_test.go @@ -79,7 +79,6 @@ func TestMatch(t *testing.T) { } for _, tt := range tests { - tt := tt t.Run(fmt.Sprintf("%#v", tt), func(t *testing.T) { res, match := match(tt.ref, tt.pattern, tt.delimiter, tt.name) diff --git a/observability/metrics/metrics.go b/observability/metrics/metrics.go index ce1f5741..71075814 100644 --- a/observability/metrics/metrics.go +++ b/observability/metrics/metrics.go @@ -5,12 +5,12 @@ import "time" const schemaName = "bridge_gluon_errors_total" const schemaVersion = 1 -func generateGluonErrorMetric(errorType string) map[string]interface{} { - return map[string]interface{}{ +func generateGluonErrorMetric(errorType string) map[string]any { + return map[string]any{ "Name": schemaName, "Version": schemaVersion, "Timestamp": time.Now().Unix(), - "Data": map[string]interface{}{ + "Data": map[string]any{ "Value": 1, "Labels": map[string]string{ "errorType": errorType, @@ -19,42 +19,42 @@ func generateGluonErrorMetric(errorType string) map[string]interface{} { } } -func GenerateFailedParseIMAPCommandMetric() map[string]interface{} { +func GenerateFailedParseIMAPCommandMetric() map[string]any { return generateGluonErrorMetric("failedParseIMAPCommand") } -func GenerateFailedToCreateMailbox() map[string]interface{} { +func GenerateFailedToCreateMailbox() map[string]any { return generateGluonErrorMetric("failedCreateMailbox") } -func GenerateFailedToDeleteMailboxMetric() map[string]interface{} { +func GenerateFailedToDeleteMailboxMetric() map[string]any { return generateGluonErrorMetric("failedDeleteMailbox") } -func GenerateFailedToCopyMessagesMetric() map[string]interface{} { +func GenerateFailedToCopyMessagesMetric() map[string]any { return generateGluonErrorMetric("failedCopyMessages") } -func GenerateFailedToMoveMessagesFromMailboxMetric() map[string]interface{} { +func GenerateFailedToMoveMessagesFromMailboxMetric() map[string]any { return generateGluonErrorMetric("failedMoveMessagesFromMailbox") } -func GenerateFailedToRemoveDeletedMessagesMetric() map[string]interface{} { +func GenerateFailedToRemoveDeletedMessagesMetric() map[string]any { return generateGluonErrorMetric("failedRemoveDeletedMessages") } -func GenerateFailedToCommitDatabaseTransactionMetric() map[string]interface{} { +func GenerateFailedToCommitDatabaseTransactionMetric() map[string]any { return generateGluonErrorMetric("failedCommitDatabaseTransaction") } -func GenerateAppendToDraftsMustNotReturnExistingRemoteID() map[string]interface{} { +func GenerateAppendToDraftsMustNotReturnExistingRemoteID() map[string]any { return generateGluonErrorMetric("appendToDraftsReturnedExistingRemoteID") } -func GenerateDatabaseMigrationFailed() map[string]interface{} { +func GenerateDatabaseMigrationFailed() map[string]any { return generateGluonErrorMetric("databaseMigrationFailed") } -func GenerateFailedToStoreFlagsOnMessages() map[string]interface{} { +func GenerateFailedToStoreFlagsOnMessages() map[string]any { return generateGluonErrorMetric("failedToStoreFlagsOnMessages") } diff --git a/observability/observability.go b/observability/observability.go index 24ac0f52..f938dd12 100644 --- a/observability/observability.go +++ b/observability/observability.go @@ -5,8 +5,8 @@ var messageErrorMetricType int var otherErrorMetricType int type Sender interface { - AddMetrics(metrics ...map[string]interface{}) - AddDistinctMetrics(errType interface{}, metrics ...map[string]interface{}) + AddMetrics(metrics ...map[string]any) + AddDistinctMetrics(errType any, metrics ...map[string]any) AddIMAPConnectionsExceededThresholdMetric(totalOpenIMAPConnections, newIMAPConnections int) } diff --git a/observability/utils.go b/observability/utils.go index b27fbf90..a772f908 100644 --- a/observability/utils.go +++ b/observability/utils.go @@ -2,7 +2,7 @@ package observability import "context" -func AddImapMetric(ctx context.Context, metric ...map[string]interface{}) { +func AddImapMetric(ctx context.Context, metric ...map[string]any) { sender, ok := getObservabilitySenderFromContext(ctx) if !ok { return @@ -11,7 +11,7 @@ func AddImapMetric(ctx context.Context, metric ...map[string]interface{}) { sender.AddDistinctMetrics(imapErrorMetricType, metric...) } -func AddMessageRelatedMetric(ctx context.Context, metric ...map[string]interface{}) { +func AddMessageRelatedMetric(ctx context.Context, metric ...map[string]any) { sender, ok := getObservabilitySenderFromContext(ctx) if !ok { return @@ -20,7 +20,7 @@ func AddMessageRelatedMetric(ctx context.Context, metric ...map[string]interface sender.AddDistinctMetrics(messageErrorMetricType, metric...) } -func AddOtherMetric(ctx context.Context, metric ...map[string]interface{}) { +func AddOtherMetric(ctx context.Context, metric ...map[string]any) { sender, ok := getObservabilitySenderFromContext(ctx) if !ok { return diff --git a/rfc5322/address.go b/rfc5322/address.go index 05b68801..844e386e 100644 --- a/rfc5322/address.go +++ b/rfc5322/address.go @@ -2,6 +2,7 @@ package rfc5322 import ( "net/mail" + "strings" "github.com/ProtonMail/gluon/rfcparser" ) @@ -543,7 +544,8 @@ func isDText(tokenType rfcparser.TokenType) bool { } func joinWithSpacingRules(v []parserString) string { - result := v[0].String.Value + var result strings.Builder + result.WriteString(v[0].String.Value) prevStrType := v[0].Type @@ -552,18 +554,18 @@ func joinWithSpacingRules(v []parserString) string { if prevStrType == parserStringTypeEncoded { if curStrType == parserStringTypeOther { - result += " " + result.WriteString(" ") } } else if prevStrType != parserStringTypeUnspaced { if curStrType != parserStringTypeUnspaced { - result += " " + result.WriteString(" ") } } prevStrType = curStrType - result += v[i].String.Value + result.WriteString(v[i].String.Value) } - return result + return result.String() } diff --git a/rfc5322/date_time.go b/rfc5322/date_time.go index c5e31aa4..18999a16 100644 --- a/rfc5322/date_time.go +++ b/rfc5322/date_time.go @@ -124,7 +124,7 @@ func parseDTMonth(p *rfcparser.Parser) (time.Month, error) { // month := make([]byte, 3) - for i := 0; i < 3; i++ { + for i := range 3 { if err := p.Consume(rfcparser.TokenTypeChar, "unexpected character for date month"); err != nil { return 0, err } diff --git a/rfc5322/date_time_test.go b/rfc5322/date_time_test.go index a3be26fd..fdcc4b37 100644 --- a/rfc5322/date_time_test.go +++ b/rfc5322/date_time_test.go @@ -163,7 +163,6 @@ func TestParseDateTime(t *testing.T) { }, } for _, test := range tests { - test := test t.Run(test.input, func(t *testing.T) { got, err := ParseDateTime(test.input) @@ -196,7 +195,6 @@ func TestParseDateTimeObsolete(t *testing.T) { }, } for _, test := range tests { - test := test t.Run(test.input, func(t *testing.T) { got, err := ParseDateTime(test.input) @@ -221,7 +219,6 @@ func TestParseDateTimeRelaxed(t *testing.T) { }, } for _, test := range tests { - test := test t.Run(test.input, func(t *testing.T) { got, err := ParseDateTime(test.input) @@ -236,7 +233,6 @@ func TestParseDateTimeRejected(t *testing.T) { `Mon, 25 Sep 2017 5:25:40 +02`, } for _, test := range tests { - test := test t.Run(test, func(t *testing.T) { _, err := ParseDateTime(test) diff --git a/rfc5322/parser_test.go b/rfc5322/parser_test.go index 74288518..64420dbd 100644 --- a/rfc5322/parser_test.go +++ b/rfc5322/parser_test.go @@ -258,7 +258,6 @@ func TestParseAddress(t *testing.T) { }, } for _, test := range tests { - test := test t.Run(test.input, func(t *testing.T) { addrs, err := ParseAddress(test.input) @@ -418,7 +417,6 @@ func TestParseAddressList(t *testing.T) { }, } for _, test := range tests { - test := test t.Run(test.input, func(t *testing.T) { addrs, err := ParseAddressList(test.input) @@ -595,7 +593,6 @@ func TestParseGroup(t *testing.T) { }, } for _, test := range tests { - test := test t.Run(test.input, func(t *testing.T) { addrs, err := ParseAddressList(test.input) @@ -724,7 +721,6 @@ func TestParseSingleAddressEncodedWord(t *testing.T) { }, } for _, test := range tests { - test := test t.Run(test.input, func(t *testing.T) { addrs, err := ParseAddressList(test.input) @@ -747,7 +743,6 @@ func TestParseAddressInvalid(t *testing.T) { } for _, test := range inputs { - test := test t.Run(test, func(t *testing.T) { _, err := ParseAddressList(test) @@ -844,7 +839,6 @@ func TestParserAddressEmailValidation(t *testing.T) { } for _, test := range inputs { - test := test t.Run(test, func(t *testing.T) { _, err := ParseAddressList(test) diff --git a/rfc822/hash.go b/rfc822/hash.go index fb478456..668ca02d 100644 --- a/rfc822/hash.go +++ b/rfc822/hash.go @@ -155,7 +155,7 @@ func hashBody(writer io.Writer, body []byte, mimeType MIMEType, encoding string) } func getAddresses(fieldAddr string) string { - var addresses string + var addresses strings.Builder addrList, err := rfc5322.ParseAddressList(fieldAddr) if err != nil { @@ -163,8 +163,8 @@ func getAddresses(fieldAddr string) string { } for _, addr := range addrList { - addresses += addr.Address + addresses.WriteString(addr.Address) } - return addresses + return addresses.String() } diff --git a/rfc822/header_parser.go b/rfc822/header_parser.go index 571e8dcd..b920a5de 100644 --- a/rfc822/header_parser.go +++ b/rfc822/header_parser.go @@ -109,11 +109,7 @@ func (hp *headerParser) next() (parsedHeaderEntry, error) { searchOffset++ } - if searchOffset < headerLen { - result.valueStart = searchOffset - } else { - result.valueStart = headerLen - } + result.valueStart = min(searchOffset, headerLen) for searchOffset < headerLen { b := hp.header[searchOffset] diff --git a/store/semaphore_test.go b/store/semaphore_test.go index 4c04c9ad..563279eb 100644 --- a/store/semaphore_test.go +++ b/store/semaphore_test.go @@ -44,9 +44,7 @@ func TestSemaphore(t *testing.T) { func wait(fn func()) func() { var wg sync.WaitGroup - wg.Add(1) - - go func() { defer wg.Done(); fn() }() + wg.Go(func() { fn() }) return wg.Wait } diff --git a/store/write_controlled_store_test.go b/store/write_controlled_store_test.go index fa047e57..eaf8fd67 100644 --- a/store/write_controlled_store_test.go +++ b/store/write_controlled_store_test.go @@ -24,7 +24,7 @@ func TestWriteControlledStore(t *testing.T) { wg := sync.WaitGroup{} - for i := 0; i < 256; i++ { + for i := range 256 { wg.Add(1) go func(i int) { diff --git a/tests/append_test.go b/tests/append_test.go index efc9e36a..167c40a5 100644 --- a/tests/append_test.go +++ b/tests/append_test.go @@ -285,7 +285,7 @@ func TestAppendConnectorReturnsSameRemoteIDShouldRemoveDeletedFlag(t *testing.T) require.Equal(t, uint32(1), status.Messages, "Expected message count does not match") // Mark it as deleted. - require.NoError(t, client.Store(createSeqSet("1"), goimap.AddFlags, []interface{}{goimap.DeletedFlag}, nil)) + require.NoError(t, client.Store(createSeqSet("1"), goimap.AddFlags, []any{goimap.DeletedFlag}, nil)) // Check flag got set newFetchCommand(t, client).withItems("FLAGS").fetch("1").forSeqNum(1, func(builder *validatorBuilder) { @@ -326,7 +326,7 @@ func TestAppendConnectorReturnsSameInternalIDRemoveDeletedFlag(t *testing.T) { require.Equal(t, uint32(1), status.Messages, "Expected message count does not match") // Mark it as deleted. - require.NoError(t, client.Store(createSeqSet("1"), goimap.AddFlags, []interface{}{goimap.DeletedFlag}, nil)) + require.NoError(t, client.Store(createSeqSet("1"), goimap.AddFlags, []any{goimap.DeletedFlag}, nil)) // Check flag got set newFetchCommand(t, client).withItems("FLAGS").fetch("1").forSeqNum(1, func(builder *validatorBuilder) { @@ -376,7 +376,7 @@ func TestAppendCanHandleOutOfOrderUIDUpdates(t *testing.T) { c[2].C("A002 SELECT INBOX").OK("A002") appendFN := func(clientIndex int) { - for i := 0; i < MessageCount; i++ { + for range MessageCount { c[clientIndex+1].doAppend("INBOX", buildRFC5322TestLiteral("To: f3@pm.me\r\n"), "\\Seen").expect("OK") } } @@ -384,7 +384,7 @@ func TestAppendCanHandleOutOfOrderUIDUpdates(t *testing.T) { wg := sync.WaitGroup{} wg.Add(2) - for i := 0; i < 2; i++ { + for i := range 2 { go func(index int) { defer wg.Done() appendFN(index) diff --git a/tests/authenticate_test.go b/tests/authenticate_test.go index 4ad2cba1..2a3df0c8 100644 --- a/tests/authenticate_test.go +++ b/tests/authenticate_test.go @@ -12,7 +12,7 @@ import ( ) func base64AuthString(username, password string) string { - return base64.StdEncoding.EncodeToString([]byte(fmt.Sprintf("\x00%v\x00%v", username, password))) + return base64.StdEncoding.EncodeToString(fmt.Appendf(nil, "\x00%v\x00%v", username, password)) } func TestAuthenticateSuccess(t *testing.T) { @@ -93,7 +93,6 @@ func TestAuthenticateTooManyAttemptsMany(t *testing.T) { // All clients should be jailed for 1 sec. for _, i := range []int{1, 2, 3} { - i := i tag := fmt.Sprintf("A%03d", i) wg.Go(func() { diff --git a/tests/benchmark_big_mailbox_test.go b/tests/benchmark_big_mailbox_test.go index 33f41281..72e32e7c 100644 --- a/tests/benchmark_big_mailbox_test.go +++ b/tests/benchmark_big_mailbox_test.go @@ -14,7 +14,7 @@ func BenchmarkBigMailboxStatus(b *testing.B) { mboxID := s.mailboxCreated("user", []string{"mbox"}) ids := s.batchMessageCreated("user", mboxID, 32515, func(n int) ([]byte, []string) { - return []byte(fmt.Sprintf(`To: %v@pm.me`, n)), []string{} + return fmt.Appendf(nil, `To: %v@pm.me`, n), []string{} }) b.Run("status", func(b *testing.B) { @@ -28,7 +28,7 @@ func BenchmarkBigMailboxFetchSequence(b *testing.B) { mboxID := s.mailboxCreated("user", []string{"mbox"}) ids := s.batchMessageCreated("user", mboxID, 128515, func(n int) ([]byte, []string) { - return []byte(fmt.Sprintf(`To: %v@pm.me`, n)), []string{} + return fmt.Appendf(nil, `To: %v@pm.me`, n), []string{} }) _, err := client.Select("mbox", false) @@ -47,7 +47,7 @@ func BenchmarkBigMailboxFetchUID(b *testing.B) { mboxID := s.mailboxCreated("user", []string{"mbox"}) ids := s.batchMessageCreated("user", mboxID, 128515, func(n int) ([]byte, []string) { - return []byte(fmt.Sprintf(`To: %v@pm.me`, n)), []string{} + return fmt.Appendf(nil, `To: %v@pm.me`, n), []string{} }) _, err := client.Select("mbox", false) diff --git a/tests/benchmark_fetch_test.go b/tests/benchmark_fetch_test.go index 5fb929b1..dd6058d0 100644 --- a/tests/benchmark_fetch_test.go +++ b/tests/benchmark_fetch_test.go @@ -6,14 +6,14 @@ import ( ) func BenchmarkFetchDatabase(b *testing.B) { - for n := 0; n < 15; n++ { + for n := range 15 { mboxSize := 1 << n b.Run(strconv.Itoa(mboxSize), func(b *testing.B) { runOneToOneTestWithAuth(b, defaultServerOptions(b), func(c *testConnection, s *testSession) { benchID := s.mailboxCreated("user", []string{"BENCH"}) - for i := 0; i < mboxSize; i++ { + for range mboxSize { s.messageCreatedFromFile("user", benchID, `testdata/multipart-mixed.eml`) } @@ -46,14 +46,14 @@ func BenchmarkFetchDatabase(b *testing.B) { } func BenchmarkFetchSingleCache(b *testing.B) { - for n := 0; n < 15; n++ { + for n := range 15 { mboxSize := 1 << n b.Run(strconv.Itoa(mboxSize), func(b *testing.B) { runOneToOneTestWithAuth(b, defaultServerOptions(b), func(c *testConnection, s *testSession) { benchID := s.mailboxCreated("user", []string{"BENCH"}) - for i := 0; i < mboxSize; i++ { + for range mboxSize { s.messageCreatedFromFile("user", benchID, `testdata/multipart-mixed.eml`) } diff --git a/tests/close_test.go b/tests/close_test.go index c0e22c70..b684126e 100644 --- a/tests/close_test.go +++ b/tests/close_test.go @@ -106,15 +106,15 @@ func TestCloseWithClient(t *testing.T) { { sequenceSet, _ := goimap.ParseSeqSet("1") - require.NoError(t, client.Store(sequenceSet, goimap.AddFlags, []interface{}{goimap.DeletedFlag}, nil)) + require.NoError(t, client.Store(sequenceSet, goimap.AddFlags, []any{goimap.DeletedFlag}, nil)) } { sequenceSet, _ := goimap.ParseSeqSet("2") - require.NoError(t, client.Store(sequenceSet, goimap.AddFlags, []interface{}{goimap.DeletedFlag}, nil)) + require.NoError(t, client.Store(sequenceSet, goimap.AddFlags, []any{goimap.DeletedFlag}, nil)) } { sequenceSet, _ := goimap.ParseSeqSet("3") - require.NoError(t, client.Store(sequenceSet, goimap.AddFlags, []interface{}{goimap.DeletedFlag}, nil)) + require.NoError(t, client.Store(sequenceSet, goimap.AddFlags, []any{goimap.DeletedFlag}, nil)) } require.NoError(t, client.Close()) diff --git a/tests/connection_test.go b/tests/connection_test.go index 50e345b1..a74c1a15 100644 --- a/tests/connection_test.go +++ b/tests/connection_test.go @@ -30,7 +30,7 @@ func lines(lines ...string) string { func repeat(line string, n int) []string { var res []string - for i := 0; i < n; i++ { + for range n { res = append(res, line) } @@ -38,13 +38,16 @@ func repeat(line string, n int) []string { } func seq(begin, end int) string { - var res string + var res strings.Builder for i := begin; i < end; i++ { - res += strconv.Itoa(i) + " " + res.WriteString(strconv.Itoa(i)) + res.WriteString(" ") } - return res + strconv.Itoa(end) + res.WriteString(strconv.Itoa(end)) + + return res.String() } type testConnection struct { @@ -217,7 +220,7 @@ func (s *testConnection) read() []byte { func (s *testConnection) readN(n int) [][]byte { var res [][]byte - for i := 0; i < n; i++ { + for range n { res = append(res, s.read()) } diff --git a/tests/counts_test.go b/tests/counts_test.go index 6badbb0e..9b302d26 100644 --- a/tests/counts_test.go +++ b/tests/counts_test.go @@ -19,7 +19,7 @@ func TestCounts(t *testing.T) { require.Equal(t, 0, count) } - for i := 0; i < 10; i++ { + for range 10 { require.NoError(t, doAppendWithClientFromFile(t, client, "INBOX", "testdata/afternoon-meeting.eml", time.Now(), goimap.SeenFlag)) } }) diff --git a/tests/examine_test.go b/tests/examine_test.go index e87f781e..27919df4 100644 --- a/tests/examine_test.go +++ b/tests/examine_test.go @@ -91,7 +91,7 @@ func TestExamineClient(t *testing.T) { require.Equal(t, uint32(2), mailboxStatus.UnseenSeqNum) // Can't perform store on read only mailbox. - require.Error(t, client.Store(createSeqSet("2"), goimap.AddFlags, []interface{}{goimap.SeenFlag}, nil)) + require.Error(t, client.Store(createSeqSet("2"), goimap.AddFlags, []any{goimap.SeenFlag}, nil)) // Can't move out of read only mailbox require.Error(t, client.Move(createSeqSet("2"), "Archive")) diff --git a/tests/expunge_test.go b/tests/expunge_test.go index 8f7c5564..777fdab7 100644 --- a/tests/expunge_test.go +++ b/tests/expunge_test.go @@ -29,7 +29,7 @@ func TestExpungeSingle(t *testing.T) { require.NoError(t, client.Append("mbox", []string{goimap.SeenFlag}, time.Now(), strings.NewReader(buildRFC5322TestLiteral("To: 1@pm.me")))) - messages := storeWithRetrievalClient(t, client, createSeqSet("1"), goimap.AddFlags, []interface{}{goimap.DeletedFlag}) + messages := storeWithRetrievalClient(t, client, createSeqSet("1"), goimap.AddFlags, []any{goimap.DeletedFlag}) require.Len(t, messages, 1) require.ElementsMatch(t, messages[0].Flags, []string{goimap.SeenFlag, goimap.DeletedFlag, goimap.RecentFlag}) expungedIds := expungeClient(t, client) @@ -76,7 +76,7 @@ func TestExpungeInterval(t *testing.T) { for i := 1; i <= 4; i++ { require.NoError(t, client.Append("mbox", []string{goimap.SeenFlag}, time.Now(), strings.NewReader(buildRFC5322TestLiteral(fmt.Sprintf(`To: %d@pm.me`, i))))) } - messages := storeWithRetrievalClient(t, client, createSeqSet("1,3"), goimap.AddFlags, []interface{}{goimap.DeletedFlag}) + messages := storeWithRetrievalClient(t, client, createSeqSet("1,3"), goimap.AddFlags, []any{goimap.DeletedFlag}) require.Len(t, messages, 2) for _, message := range messages { require.ElementsMatch(t, message.Flags, []string{goimap.SeenFlag, goimap.DeletedFlag, goimap.RecentFlag}) @@ -91,17 +91,17 @@ func beforeOrAfterExpungeCheck(t *testing.T, client *client.Client, mailboxName // Shared code used to for checking the mailbox state after expunge for the // TestExpungeWithAppendBeforeMailboxSelect and TestExpungeWithAppendAfterMailboxSelect { - messages := storeWithRetrievalClient(t, client, createSeqSet("1"), goimap.AddFlags, []interface{}{goimap.DeletedFlag}) + messages := storeWithRetrievalClient(t, client, createSeqSet("1"), goimap.AddFlags, []any{goimap.DeletedFlag}) require.Len(t, messages, 1) require.ElementsMatch(t, messages[0].Flags, []string{goimap.SeenFlag, goimap.RecentFlag, goimap.DeletedFlag}) } { - messages := storeWithRetrievalClient(t, client, createSeqSet("2"), goimap.AddFlags, []interface{}{goimap.DeletedFlag}) + messages := storeWithRetrievalClient(t, client, createSeqSet("2"), goimap.AddFlags, []any{goimap.DeletedFlag}) require.Len(t, messages, 1) require.ElementsMatch(t, messages[0].Flags, []string{goimap.RecentFlag, goimap.DeletedFlag}) } { - messages := storeWithRetrievalClient(t, client, createSeqSet("3"), goimap.AddFlags, []interface{}{goimap.DeletedFlag}) + messages := storeWithRetrievalClient(t, client, createSeqSet("3"), goimap.AddFlags, []any{goimap.DeletedFlag}) require.Len(t, messages, 1) require.ElementsMatch(t, messages[0].Flags, []string{goimap.SeenFlag, goimap.RecentFlag, goimap.DeletedFlag}) } @@ -169,7 +169,7 @@ func TestExpungeUID(t *testing.T) { uidClient := uidplus.NewClient(client) { - messages := storeWithRetrievalClient(t, client, createSeqSet("1"), goimap.AddFlags, []interface{}{goimap.DeletedFlag}) + messages := storeWithRetrievalClient(t, client, createSeqSet("1"), goimap.AddFlags, []any{goimap.DeletedFlag}) require.Len(t, messages, 1) require.ElementsMatch(t, messages[0].Flags, []string{goimap.SeenFlag, goimap.RecentFlag, goimap.DeletedFlag}) } @@ -197,7 +197,7 @@ func TestExpungeUID(t *testing.T) { } { - messages := uidStoreWithRetrievalClient(t, client, createSeqSet("2,4"), goimap.AddFlags, []interface{}{goimap.DeletedFlag}) + messages := uidStoreWithRetrievalClient(t, client, createSeqSet("2,4"), goimap.AddFlags, []any{goimap.DeletedFlag}) require.Len(t, messages, 2) for _, message := range messages { require.ElementsMatch(t, message.Flags, []string{goimap.SeenFlag, goimap.RecentFlag, goimap.DeletedFlag}) @@ -232,7 +232,7 @@ func TestExpungeResponseSequence(t *testing.T) { } { - messages := storeWithRetrievalClient(t, client, createSeqSet("3,4,7,11"), goimap.AddFlags, []interface{}{goimap.DeletedFlag}) + messages := storeWithRetrievalClient(t, client, createSeqSet("3,4,7,11"), goimap.AddFlags, []any{goimap.DeletedFlag}) require.Len(t, messages, 4) for _, message := range messages { require.ElementsMatch(t, message.Flags, []string{goimap.SeenFlag, goimap.RecentFlag, goimap.DeletedFlag}) diff --git a/tests/fetch_test.go b/tests/fetch_test.go index 853bae3d..70469955 100644 --- a/tests/fetch_test.go +++ b/tests/fetch_test.go @@ -248,7 +248,7 @@ func TestFetchSequence(t *testing.T) { fillAndSelectMailboxWithMultipleEntries(t, client) // delete message number 4 - require.NoError(t, client.Store(createSeqSet("4"), goimap.AddFlags, []interface{}{goimap.DeletedFlag}, nil)) + require.NoError(t, client.Store(createSeqSet("4"), goimap.AddFlags, []any{goimap.DeletedFlag}, nil)) require.NoError(t, client.Expunge(nil)) fetchResult := newFetchCommand(t, client).withItems(goimap.FetchEnvelope, goimap.FetchUid).fetch("4,1:2") @@ -289,7 +289,7 @@ func TestFetchUID(t *testing.T) { fillAndSelectMailboxWithMultipleEntries(t, client) // delete message number 4 - require.NoError(t, client.Store(createSeqSet("4"), goimap.AddFlags, []interface{}{goimap.DeletedFlag}, nil)) + require.NoError(t, client.Store(createSeqSet("4"), goimap.AddFlags, []any{goimap.DeletedFlag}, nil)) require.NoError(t, client.Expunge(nil)) messages := uidFetchMessagesClient(t, client, createSeqSet("2:5"), []goimap.FetchItem{goimap.FetchEnvelope, goimap.FetchUid}) @@ -403,7 +403,7 @@ func TestFetchFromDataSequences(t *testing.T) { func TestFetchFromDataUIDs(t *testing.T) { runOneToOneTestClientWithData(t, defaultServerOptions(t), func(client *client.Client, _ *testSession, _ string, _ imap.MailboxID) { // Remove a couple of messages - require.NoError(t, client.Store(createSeqSet("20:29,50:60,90"), goimap.AddFlags, []interface{}{goimap.DeletedFlag}, nil)) + require.NoError(t, client.Store(createSeqSet("20:29,50:60,90"), goimap.AddFlags, []any{goimap.DeletedFlag}, nil)) require.NoError(t, client.Expunge(nil)) const sectionStr = "BODY[HEADER.FIELDS (To Subject)]" fetchResult := newFetchCommand(t, client).withItems(sectionStr).fetchUid("1:4,30:31,81") diff --git a/tests/full_state_test.go b/tests/full_state_test.go index 747c4914..cc762a68 100644 --- a/tests/full_state_test.go +++ b/tests/full_state_test.go @@ -133,7 +133,7 @@ func TestReceptionOnIdle(t *testing.T) { require.NoError(t, cli.Login("user", "pass")) - for i := 0; i < 3; i++ { + for range 3 { require.NoError(t, doAppendWithClientFromFile(t, cli, mailboxName, messagePath, time.Now())) } }, logging.Labels{ @@ -221,13 +221,13 @@ func TestMorningFiltering(t *testing.T) { switch i % 3 { case 0: // either Delete - uidStoreWithRetrievalClient(t, client, createSeqSet(strId), goimap.AddFlags, []interface{}{goimap.DeletedFlag}) + uidStoreWithRetrievalClient(t, client, createSeqSet(strId), goimap.AddFlags, []any{goimap.DeletedFlag}) expungedIds := expungeClient(t, client) require.Len(t, expungedIds, 1) case 1: // or unseen - uidStoreWithRetrievalClient(t, client, createSeqSet(strId), goimap.RemoveFlags, []interface{}{goimap.SeenFlag}) + uidStoreWithRetrievalClient(t, client, createSeqSet(strId), goimap.RemoveFlags, []any{goimap.SeenFlag}) require.NoError(t, client.UidMove(createSeqSet(strId), "ReadLater")) nbUnseen++ diff --git a/tests/helper_test.go b/tests/helper_test.go index 80e2e823..776c5dc0 100644 --- a/tests/helper_test.go +++ b/tests/helper_test.go @@ -127,7 +127,7 @@ func matchMailboxNamesClient(t testing.TB, client *client.Client, reference stri require.ElementsMatch(t, expectedNames, mailboxes) } -func storeWithRetrievalClient(t testing.TB, client *client.Client, seqset *goimap.SeqSet, item goimap.StoreItem, value interface{}) []*goimap.Message { +func storeWithRetrievalClient(t testing.TB, client *client.Client, seqset *goimap.SeqSet, item goimap.StoreItem, value any) []*goimap.Message { ch := make(chan *goimap.Message) go func() { @@ -137,7 +137,7 @@ func storeWithRetrievalClient(t testing.TB, client *client.Client, seqset *goima return iterator.Collect(iterator.Chan(ch)) } -func uidStoreWithRetrievalClient(t testing.TB, client *client.Client, seqset *goimap.SeqSet, item goimap.StoreItem, value interface{}) []*goimap.Message { +func uidStoreWithRetrievalClient(t testing.TB, client *client.Client, seqset *goimap.SeqSet, item goimap.StoreItem, value any) []*goimap.Message { ch := make(chan *goimap.Message) go func() { @@ -155,7 +155,7 @@ type macroFetchCommand struct { func (cmd *macroFetchCommand) Command() *goimap.Command { return &goimap.Command{ Name: "FETCH", - Arguments: []interface{}{cmd.SeqSet, goimap.RawString(cmd.Item)}, + Arguments: []any{cmd.SeqSet, goimap.RawString(cmd.Item)}, } } diff --git a/tests/imap_limits_test.go b/tests/imap_limits_test.go index bae9dedd..dd06d5e3 100644 --- a/tests/imap_limits_test.go +++ b/tests/imap_limits_test.go @@ -41,7 +41,7 @@ func TestMaxUIDLimitRespected_Append(t *testing.T) { require.NoError(t, doAppendWithClient(client, "INBOX", buildRFC5322TestLiteral("To: Foo@bar.com"), time.Now())) _, err := client.Select("INBOX", false) require.NoError(t, err) - require.NoError(t, client.Store(createSeqSet("1"), goimap.AddFlags, []interface{}{goimap.DeletedFlag}, nil)) + require.NoError(t, client.Store(createSeqSet("1"), goimap.AddFlags, []any{goimap.DeletedFlag}, nil)) require.NoError(t, client.Expunge(nil)) // Append should fail now as we triggered max UID validity error. require.Error(t, doAppendWithClient(client, "INBOX", buildRFC5322TestLiteral("To: Bar@bar.com"), time.Now())) @@ -70,7 +70,7 @@ func TestMaxUIDLimitRespected_Copy(t *testing.T) { // Delete existing message in mbox1 to trigget UID validity check _, err := client.Select("mbox1", false) require.NoError(t, err) - require.NoError(t, client.Store(createSeqSet("1"), goimap.AddFlags, []interface{}{goimap.DeletedFlag}, nil)) + require.NoError(t, client.Store(createSeqSet("1"), goimap.AddFlags, []any{goimap.DeletedFlag}, nil)) require.NoError(t, client.Expunge(nil)) // Try to copy message to mbox @@ -102,7 +102,7 @@ func TestMaxUIDLimitRespected_Move(t *testing.T) { // Delete existing message in mbox1 to trigget UID validity check _, err := client.Select("mbox1", false) require.NoError(t, err) - require.NoError(t, client.Store(createSeqSet("1"), goimap.AddFlags, []interface{}{goimap.DeletedFlag}, nil)) + require.NoError(t, client.Store(createSeqSet("1"), goimap.AddFlags, []any{goimap.DeletedFlag}, nil)) require.NoError(t, client.Expunge(nil)) // Try to copy message to mbox diff --git a/tests/login_test.go b/tests/login_test.go index 823a7371..96d166c8 100644 --- a/tests/login_test.go +++ b/tests/login_test.go @@ -129,7 +129,6 @@ func TestLoginTooManyAttemptsMany(t *testing.T) { // All clients should be jailed for 1 sec. for _, i := range []int{1, 2, 3} { - i := i wg.Go(func() { require.Greater(t, timeFunc(func() { diff --git a/tests/move_test.go b/tests/move_test.go index a6deeaf2..da945815 100644 --- a/tests/move_test.go +++ b/tests/move_test.go @@ -214,7 +214,7 @@ func TestConcurrency(t *testing.T) { runOneToOneTestWithData(t, defaultServerOptions(t), func(c *testConnection, s *testSession, mbox string, mboxID imap.MailboxID) { c.C(`tag create archive`).OK(`tag`) - for i := 0; i < 100; i++ { + for i := range 100 { c.Cf(`tag status %v (messages)`, mbox).Sx(fmt.Sprintf(`MESSAGES %v`, 100-i)).OK(`tag`) c.Cf(`tag uid move %v archive`, 1+i).Sxe(`1 EXPUNGE`).OK(`tag`) } diff --git a/tests/parallel_test.go b/tests/parallel_test.go index 6c0e7991..bb33833e 100644 --- a/tests/parallel_test.go +++ b/tests/parallel_test.go @@ -39,7 +39,7 @@ func TestSelectWhileSyncing(t *testing.T) { }() // Select a bunch of mailboxes. - for i := 0; i < 100; i++ { + for range 100 { mboxName := mailboxNames[rand.Int()%len(mailboxNames)] //nolint:gosec _, err := client.Select(mboxName, false) require.NoError(t, err) @@ -60,7 +60,7 @@ func TestTwoFetchesAtOnce(t *testing.T) { runOneToOneTestWithAuth(t, defaultServerOptions(t), func(c *testConnection, s *testSession) { mboxID := s.mailboxCreated("user", []string{"mbox"}) - for i := 0; i < 1000; i++ { + for range 1000 { s.messageCreatedFromFile("user", mboxID, `testdata/multipart-mixed.eml`, `\Seen`) } diff --git a/tests/recovery_mailbox_test.go b/tests/recovery_mailbox_test.go index 54ca98d4..72659dcb 100644 --- a/tests/recovery_mailbox_test.go +++ b/tests/recovery_mailbox_test.go @@ -156,7 +156,7 @@ func TestRecoveryMBoxCanBeExpunged(t *testing.T) { status, err := client.Select(ids.GluonRecoveryMailboxName, false) require.NoError(t, err) require.Equal(t, uint32(1), status.Messages) - require.NoError(t, client.Store(createSeqSet("1"), goimap.AddFlags, []interface{}{goimap.DeletedFlag}, nil)) + require.NoError(t, client.Store(createSeqSet("1"), goimap.AddFlags, []any{goimap.DeletedFlag}, nil)) require.NoError(t, client.Expunge(nil)) status, err = client.Status(ids.GluonRecoveryMailboxName, []goimap.StatusItem{goimap.StatusMessages}) require.NoError(t, err) diff --git a/tests/sequence_range_test.go b/tests/sequence_range_test.go index b7df8e1e..5eeb2a60 100644 --- a/tests/sequence_range_test.go +++ b/tests/sequence_range_test.go @@ -30,12 +30,12 @@ func TestSequenceRange(t *testing.T) { c.OK(`A007`) c.C(`A008 FETCH 6 (FLAGS)`).BAD(`A008`) c.C(`A009 FETCH 1,3:4 (FLAGS)`) - for i := 0; i < 3; i++ { + for range 3 { c.Sx(`\* \d FETCH`) } c.OK(`A009`) c.C(`A010 STORE 1,2,3,4 +FLAGS (flag)`) - for i := 0; i < 4; i++ { + for range 4 { c.Sx(`\* \d FETCH \(FLAGS \(\\Recent flag\)\)`) } c.OK(`A010`) @@ -45,7 +45,7 @@ func TestSequenceRange(t *testing.T) { c.C(`A012 COPY 6:* mbox2`).BAD(`A012`) c.C(`A013 MOVE 1,5,3 mbox2`) c.Sx(`\* OK \[COPYUID`) - for i := 0; i < 3; i++ { + for range 3 { c.Sx(`\* \d EXPUNGE`) } c.OK(`A013`) @@ -97,12 +97,12 @@ func TestUIDSequenceRange(t *testing.T) { c.C(`A008 UID FETCH 6 (FLAGS)`) c.OK(`A008`) c.C(`A009 UID FETCH 1,3:4 (FLAGS)`) - for i := 0; i < 3; i++ { + for range 3 { c.Sx(`\* \d FETCH .*`) } c.OK(`A009`) c.C(`A010 UID STORE 1,2,3,4 +FLAGS (flag)`) - for i := 0; i < 4; i++ { + for range 4 { c.Sx(`\* \d FETCH \(FLAGS \(\\Recent flag\) UID \d\)`) } c.OK(`A010`) @@ -114,7 +114,7 @@ func TestUIDSequenceRange(t *testing.T) { c.Sx(`A012 OK \[COPYUID`) c.C(`A013 UID MOVE 1,5,3 mbox2`) c.Sx(`\* OK \[COPYUID`) - for i := 0; i < 3; i++ { + for range 3 { c.Sx(`\* \d EXPUNGE`) } c.OK(`A013`) @@ -123,7 +123,7 @@ func TestUIDSequenceRange(t *testing.T) { c.doAppend(`mbox1`, buildRFC5322TestLiteral(`To: 6@pm.me`)).expect("OK") c.doAppend(`mbox1`, buildRFC5322TestLiteral(`To: 7@pm.me`)).expect("OK") c.C(`A014 UID STORE 4:2 -FLAGS (flag)`) - for i := 0; i < 2; i++ { + for range 2 { c.Sx(`\* \d FETCH`) } c.OK(`A014`) diff --git a/tests/session_test.go b/tests/session_test.go index 79c375a6..c98de208 100644 --- a/tests/session_test.go +++ b/tests/session_test.go @@ -178,7 +178,7 @@ func (s *testSession) mailboxCreatedWithAttributes(user string, name []string, a func (s *testSession) batchMailboxCreated(user string, count int, mailboxNameGen func(number int) string) []imap.MailboxID { var mboxIDs []imap.MailboxID - for i := 0; i < count; i++ { + for i := range count { mboxID := imap.MailboxID(utils.NewRandomMailboxID()) require.NoError(s.tb, s.conns[s.userIDs[user]].MailboxCreated(imap.Mailbox{ @@ -283,7 +283,7 @@ func (s *testSession) batchMessageCreatedWithID(user string, mailboxID imap.Mail literals := make([][]byte, 0, count) mailboxes := make([][]imap.MailboxID, 0, count) - for i := 0; i < count; i++ { + for i := range count { messageID, literal, flags := createMessage(i) messages = append(messages, imap.Message{ diff --git a/tests/store_test.go b/tests/store_test.go index c0425694..fbabdb51 100644 --- a/tests/store_test.go +++ b/tests/store_test.go @@ -361,7 +361,7 @@ func TestStoreFlagsPersistBetweenRuns(t *testing.T) { builder.wantFlags(goimap.RecentFlag) }).check() - require.NoError(t, client.Store(createSeqSet("1"), goimap.AddFlags, []interface{}{goimap.DeletedFlag}, nil)) + require.NoError(t, client.Store(createSeqSet("1"), goimap.AddFlags, []any{goimap.DeletedFlag}, nil)) }) // Check if delete flag was persisted.