From df30a110fbec6697683c58e34afa402e69b01d09 Mon Sep 17 00:00:00 2001 From: Michael Schurter Date: Thu, 6 Apr 2017 17:05:09 -0700 Subject: [PATCH] Create AssertUntil helper func --- client/client_test.go | 40 ++++++++++++++++++++++++---------------- testutil/wait.go | 15 +++++++++++++++ 2 files changed, 39 insertions(+), 16 deletions(-) diff --git a/client/client_test.go b/client/client_test.go index 0c4dee962..0e79c77e7 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -414,14 +414,18 @@ func TestClient_MixedTLS(t *testing.T) { QueryOptions: structs.QueryOptions{Region: "global"}, } var out structs.SingleNodeResponse - deadline := time.Now().Add(100 * time.Millisecond) - for time.Now().Before(deadline) { - err := c1.RPC("Node.GetNode", &req, &out) - if err == nil { - t.Fatalf("client RPC succeeded when it should have failed:\n%+v", out) - } - time.Sleep(3 * time.Millisecond) - } + testutil.AssertUntil(100*time.Millisecond, + func() (bool, error) { + err := c1.RPC("Node.GetNode", &req, &out) + if err == nil { + return false, fmt.Errorf("client RPC succeeded when it should have failed:\n%+v", out) + } + return true, nil + }, + func(err error) { + t.Fatalf(err.Error()) + }, + ) } // TestClient_BadTLS asserts that when a client and server are running with TLS @@ -467,14 +471,18 @@ func TestClient_BadTLS(t *testing.T) { QueryOptions: structs.QueryOptions{Region: "global"}, } var out structs.SingleNodeResponse - deadline := time.Now().Add(100 * time.Millisecond) - for time.Now().Before(deadline) { - err := c1.RPC("Node.GetNode", &req, &out) - if err == nil { - t.Fatalf("client RPC succeeded when it should have failed:\n%+v", out) - } - time.Sleep(3 * time.Millisecond) - } + testutil.AssertUntil(100*time.Millisecond, + func() (bool, error) { + err := c1.RPC("Node.GetNode", &req, &out) + if err == nil { + return false, fmt.Errorf("client RPC succeeded when it should have failed:\n%+v", out) + } + return true, nil + }, + func(err error) { + t.Fatalf(err.Error()) + }, + ) } func TestClient_Register(t *testing.T) { diff --git a/testutil/wait.go b/testutil/wait.go index bdac812d0..60198dc98 100644 --- a/testutil/wait.go +++ b/testutil/wait.go @@ -37,6 +37,21 @@ func WaitForResultRetries(retries int64, test testFn, error errorFn) { } } +// AssertUntil asserts the test function passes throughout the given duration. +// Otherwise error is called on failure. +func AssertUntil(until time.Duration, test testFn, error errorFn) { + deadline := time.Now().Add(until) + for time.Now().Before(deadline) { + success, err := test() + if !success { + error(err) + return + } + // Sleep some arbitrary fraction of the deadline + time.Sleep(until / 30) + } +} + // TestMultiplier returns a multiplier for retries and waits given environment // the tests are being run under. func TestMultiplier() int64 {