github.com/muhammadn/cortex@v1.9.1-0.20220510110439-46bb7000d03d/pkg/util/test/poll.go (about) 1 package test 2 3 import ( 4 "reflect" 5 "testing" 6 "time" 7 ) 8 9 // Poll repeatedly evaluates condition until we either timeout, or it succeeds. 10 func Poll(t testing.TB, d time.Duration, want interface{}, have func() interface{}) { 11 t.Helper() 12 deadline := time.Now().Add(d) 13 for { 14 if time.Now().After(deadline) { 15 break 16 } 17 if reflect.DeepEqual(want, have()) { 18 return 19 } 20 time.Sleep(d / 100) 21 } 22 h := have() 23 if !reflect.DeepEqual(want, h) { 24 t.Fatalf("expected %v, got %v", want, h) 25 } 26 }