Skip to content

Commit 45382dc

Browse files
authored
[aggregator] Reduce delays in integration tests (#2896)
1 parent 7e31044 commit 45382dc

File tree

2 files changed

+46
-16
lines changed

2 files changed

+46
-16
lines changed

src/aggregator/integration/integration.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ func waitUntil(fn conditionFn, timeout time.Duration) bool {
3232
if fn() {
3333
return true
3434
}
35-
time.Sleep(time.Second)
35+
time.Sleep(10 * time.Millisecond)
3636
}
3737
return false
3838
}

src/aggregator/integration/setup.go

Lines changed: 45 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,14 @@
2121
package integration
2222

2323
import (
24+
"encoding/json"
2425
"errors"
2526
"fmt"
27+
"io/ioutil"
2628
"net/http"
2729
"sort"
2830
"sync"
2931
"testing"
30-
"time"
3132

3233
"github.com/m3db/m3/src/aggregator/aggregator"
3334
"github.com/m3db/m3/src/aggregator/aggregator/handler"
@@ -246,14 +247,41 @@ func (ts *testServerSetup) newClient() *client {
246247
return newClient(ts.rawTCPAddr, ts.opts.ClientBatchSize(), connectTimeout)
247248
}
248249

250+
func (ts *testServerSetup) getStatusResponse(path string, response interface{}) error {
251+
resp, err := http.Get("http://" + ts.httpAddr + path) //nolint
252+
if err != nil {
253+
return err
254+
}
255+
256+
defer resp.Body.Close() //nolint:errcheck
257+
b, err := ioutil.ReadAll(resp.Body)
258+
if err != nil {
259+
return err
260+
}
261+
if resp.StatusCode != http.StatusOK {
262+
return fmt.Errorf("got a non-200 status code: %v", resp.StatusCode)
263+
}
264+
return json.Unmarshal(b, response)
265+
}
266+
249267
func (ts *testServerSetup) waitUntilServerIsUp() error {
250-
c := ts.newClient()
251-
defer c.close()
268+
isUp := func() bool {
269+
var resp httpserver.Response
270+
if err := ts.getStatusResponse(httpserver.HealthPath, &resp); err != nil {
271+
return false
272+
}
252273

253-
serverIsUp := func() bool { return c.testConnection() }
254-
if waitUntil(serverIsUp, ts.opts.ServerStateChangeTimeout()) {
274+
if resp.State == "OK" {
275+
return true
276+
}
277+
278+
return false
279+
}
280+
281+
if waitUntil(isUp, ts.opts.ServerStateChangeTimeout()) {
255282
return nil
256283
}
284+
257285
return errServerStartTimedOut
258286
}
259287

@@ -302,20 +330,22 @@ func (ts *testServerSetup) startServer() error {
302330

303331
func (ts *testServerSetup) waitUntilLeader() error {
304332
isLeader := func() bool {
305-
leader, err := ts.leaderService.Leader(ts.electionKey)
306-
if err != nil {
333+
var resp httpserver.StatusResponse
334+
if err := ts.getStatusResponse(httpserver.StatusPath, &resp); err != nil {
307335
return false
308336
}
309-
return leader == ts.leaderValue
337+
338+
if resp.Status.FlushStatus.ElectionState == aggregator.LeaderState {
339+
return true
340+
}
341+
return false
310342
}
311-
if !waitUntil(isLeader, ts.opts.ElectionStateChangeTimeout()) {
312-
return errLeaderElectionTimeout
343+
344+
if waitUntil(isLeader, ts.opts.ElectionStateChangeTimeout()) {
345+
return nil
313346
}
314-
// TODO(xichen): replace the sleep here by using HTTP client to explicit
315-
// curl the server for election status.
316-
// Give the server some time to transition into leader state if needed.
317-
time.Sleep(time.Second)
318-
return nil
347+
348+
return errLeaderElectionTimeout
319349
}
320350

321351
func (ts *testServerSetup) sortedResults() []aggregated.MetricWithStoragePolicy {

0 commit comments

Comments
 (0)