github.com/kardianos/nomad@v0.1.3-0.20151022182107-b13df73ee850/testutil/wait.go (about)

     1  package testutil
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	"github.com/hashicorp/nomad/nomad/structs"
     8  )
     9  
    10  type testFn func() (bool, error)
    11  type errorFn func(error)
    12  
    13  func WaitForResult(test testFn, error errorFn) {
    14  	retries := 1000
    15  
    16  	for retries > 0 {
    17  		time.Sleep(10 * time.Millisecond)
    18  		retries--
    19  
    20  		success, err := test()
    21  		if success {
    22  			return
    23  		}
    24  
    25  		if retries == 0 {
    26  			error(err)
    27  		}
    28  	}
    29  }
    30  
    31  type rpcFn func(string, interface{}, interface{}) error
    32  
    33  func WaitForLeader(t *testing.T, rpc rpcFn) {
    34  	WaitForResult(func() (bool, error) {
    35  		args := &structs.GenericRequest{}
    36  		var leader string
    37  		err := rpc("Status.Leader", args, &leader)
    38  		return leader != "", err
    39  	}, func(err error) {
    40  		t.Fatalf("failed to find leader: %v", err)
    41  	})
    42  }