From 5bee53e27659d1ffe4e1c23f89c9c69065b0aa56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20D=C3=ADaz?= Date: Tue, 19 Mar 2019 17:09:42 +0100 Subject: [PATCH] Remove sleeps and use client retries to handle the e2e async tests --- client/client.go | 8 ++++---- tests/e2e/add_verify_test.go | 5 ++--- tests/e2e/incremental_test.go | 3 +-- tests/e2e/server_test.go | 21 ++++++++++++++++++--- tests/e2e/setup.go | 2 +- 5 files changed, 26 insertions(+), 13 deletions(-) diff --git a/client/client.go b/client/client.go index 0660346a6..b5657bde5 100644 --- a/client/client.go +++ b/client/client.go @@ -144,7 +144,7 @@ func NewHTTPClient(options ...HTTPClientOptionF) (*HTTPClient, error) { if client.discoveryEnabled { // try to discover the cluster topology initially if err := client.discover(); err != nil { - return nil, err + log.Infof("Unable to get QED topology, we will try it later: %v", err) } } @@ -153,9 +153,9 @@ func NewHTTPClient(options ...HTTPClientOptionF) (*HTTPClient, error) { client.healthCheck(client.healthcheckTimeout) } - // Ensure thath we have at least one endpoint, the primary, available + // Ensure that we have at least one endpoint, the primary, available if !client.topology.HasActivePrimary() { - return nil, ErrNoPrimary + log.Infof("QED does not have a primary node or it is down, we will try it later.") } // if t.discoveryEnabled { @@ -215,7 +215,7 @@ func (c *HTTPClient) setRetrier(maxRetries int) error { // Create a Retrier that will wait for 100ms between requests. ticks := make([]int, maxRetries) for i := 0; i < len(ticks); i++ { - ticks[i] = 100 + ticks[i] = 1000 } backoff := NewSimpleBackoff(ticks...) c.retrier = NewBackoffRequestRetrier(c.httpClient, c.maxRetries, backoff) diff --git a/tests/e2e/add_verify_test.go b/tests/e2e/add_verify_test.go index 05fd02ef8..bb2aca8a6 100644 --- a/tests/e2e/add_verify_test.go +++ b/tests/e2e/add_verify_test.go @@ -19,7 +19,6 @@ package e2e import ( "fmt" "testing" - "time" "github.com/bbva/qed/hashing" "github.com/bbva/qed/protocol" @@ -30,8 +29,8 @@ import ( func TestAddVerify(t *testing.T) { before, after := setupServer(0, "", false, t) - scenario, let := scope.Scope(t, before, merge(after, delay(2*time.Second))) - + scenario, let := scope.Scope(t, before, after) + // log.SetLogger("", log.DEBUG) event := rand.RandomString(10) scenario("Add one event and get its membership proof", func() { diff --git a/tests/e2e/incremental_test.go b/tests/e2e/incremental_test.go index 410c0fe16..86b04e1ee 100644 --- a/tests/e2e/incremental_test.go +++ b/tests/e2e/incremental_test.go @@ -18,7 +18,6 @@ package e2e import ( "testing" - "time" "github.com/bbva/qed/hashing" "github.com/bbva/qed/protocol" @@ -30,7 +29,7 @@ import ( func TestIncrementalConsistency(t *testing.T) { before, after := setupServer(0, "", false, t) - scenario, let := scope.Scope(t, before, merge(after, delay(2*time.Second))) + scenario, let := scope.Scope(t, before, after) scenario("Add multiple events and verify consistency between two of them", func() { diff --git a/tests/e2e/server_test.go b/tests/e2e/server_test.go index 8eae5f503..2f655fd0f 100644 --- a/tests/e2e/server_test.go +++ b/tests/e2e/server_test.go @@ -35,13 +35,23 @@ func TestStart(t *testing.T) { scenario("Test availability of qed server", func() { let("Query metrics endpoint", func(t *testing.T) { - resp, err := doReq("GET", "http://localhost:8800/info", APIKey, nil) + var resp *http.Response + var err error + retry(3, 1*time.Second, func() error { + resp, err = doReq("GET", "http://localhost:8800/info", APIKey, nil) + return err + }) assert.NoError(t, err, "Subprocess must not exit with non-zero status") assert.Equal(t, resp.StatusCode, http.StatusOK, "Server should respond with http status code 200") }) let("Query to unexpected context", func(t *testing.T) { - resp, err := doReq("GET", "http://localhost:8800/xD", APIKey, nil) + var resp *http.Response + var err error + retry(3, 1*time.Second, func() error { + resp, err = doReq("GET", "http://localhost:8800/xD", APIKey, nil) + return err + }) assert.NoError(t, err) assert.Equal(t, resp.StatusCode, http.StatusNotFound, "Server should respond with http status code 404") @@ -50,7 +60,12 @@ func TestStart(t *testing.T) { scenario("Test availability of metrics server", func() { let("Query metrics endpoint", func(t *testing.T) { - resp, err := doReq("GET", "http://localhost:8600/metrics", APIKey, nil) + var resp *http.Response + var err error + retry(3, 1*time.Second, func() error { + resp, err = doReq("GET", "http://localhost:8600/metrics", APIKey, nil) + return err + }) assert.NoError(t, err, "Subprocess must not exit with non-zero status") assert.Equal(t, resp.StatusCode, http.StatusOK, "Server should respond with http status code 200") }) diff --git a/tests/e2e/setup.go b/tests/e2e/setup.go index 1b04c23c4..df5e7d8f7 100644 --- a/tests/e2e/setup.go +++ b/tests/e2e/setup.go @@ -298,7 +298,6 @@ func setupServer(id int, joinAddr string, tls bool, t *testing.T) (scope.TestF, t.Log(err) } })() - time.Sleep(2 * time.Second) } after := func(t *testing.T) { @@ -328,6 +327,7 @@ func getClient(t *testing.T, id int) *client.HTTPClient { client.SetAPIKey(APIKey), client.SetTopologyDiscovery(false), client.SetHealthchecks(false), + client.SetMaxRetries(3), ) if err != nil { t.Fatal(errors.Wrap(err, "Cannot start http client: "))