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  }