@@ -10,6 +10,7 @@ import (
1010 "fmt"
1111 "io"
1212 "log"
13+ "math/rand"
1314 "net"
1415 "net/http"
1516 "net/url"
@@ -68,8 +69,17 @@ func NewTester(db *DB, concurrency int, timeout time.Duration) *Tester {
6869}
6970
7071func (t * Tester ) TestAll (resolvers []Resolver ) {
71- jobs := make (chan TestJob , len (resolvers )* 2 )
72- results := make (chan TestJobResult , len (resolvers )* 2 )
72+ // Shuffle resolvers to ensure random testing order each interval.
73+ // This guarantees all entries get a fair chance to be tested early,
74+ // regardless of their position in the source files.
75+ shuffled := make ([]Resolver , len (resolvers ))
76+ copy (shuffled , resolvers )
77+ rand .Shuffle (len (shuffled ), func (i , j int ) {
78+ shuffled [i ], shuffled [j ] = shuffled [j ], shuffled [i ]
79+ })
80+
81+ jobs := make (chan TestJob , len (shuffled )* 2 )
82+ results := make (chan TestJobResult , len (shuffled )* 2 )
7383
7484 var wg sync.WaitGroup
7585 for i := 0 ; i < t .concurrency ; i ++ {
@@ -84,7 +94,7 @@ func (t *Tester) TestAll(resolvers []Resolver) {
8494 }
8595
8696 go func () {
87- for _ , r := range resolvers {
97+ for _ , r := range shuffled {
8898 resolverID , err := t .db .UpsertResolver (r .Name , string (r .Type ), r .Description , r .SourceFile )
8999 if err != nil {
90100 log .Printf ("Failed to upsert resolver %s: %v" , r .Name , err )
0 commit comments