Skip to content

Commit b5fc538

Browse files
committed
fix(tests): fix flaky timing assertions across four test files
1 parent b4e287b commit b5fc538

4 files changed

Lines changed: 22 additions & 9 deletions

File tree

src/code.cloudfoundry.org/gorouter/handlers/reporter_test.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,9 @@ var _ = Describe("Reporter Handler", func() {
8888
})
8989

9090
It("emits routing response metrics", func() {
91+
before := time.Now()
9192
handler.ServeHTTP(resp, req)
93+
after := time.Now()
9294

9395
Expect(fakeReporter.CaptureBadGatewayCallCount()).To(Equal(0))
9496

@@ -102,7 +104,11 @@ var _ = Describe("Reporter Handler", func() {
102104
Expect(capturedEndpoint.PrivateInstanceId).To(Equal("id"))
103105
Expect(capturedEndpoint.PrivateInstanceIndex).To(Equal("1"))
104106
Expect(capturedRespCode).To(Equal(http.StatusTeapot))
105-
Expect(startTime).To(BeTemporally("~", time.Now(), 100*time.Millisecond))
107+
// ReceivedAt is set to timeNow-1ms where timeNow is captured inside
108+
// the handler (between before and after), so the exact bracket is:
109+
// before-1ms <= startTime <= after-1ms
110+
Expect(startTime).To(BeTemporally(">=", before.Add(-1*time.Millisecond)))
111+
Expect(startTime).To(BeTemporally("<=", after.Add(-1*time.Millisecond)))
106112
Expect(latency).To(BeNumerically(">", 0))
107113
Expect(latency).To(BeNumerically("<", 10*time.Millisecond))
108114

src/code.cloudfoundry.org/gorouter/handlers/requestinfo_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,16 +59,17 @@ var _ = Describe("RequestInfoHandler", func() {
5959
})
6060

6161
It("sets RequestInfo with StartTime on the context", func() {
62+
before := time.Now()
6263
handler.ServeHTTP(resp, req, nextHandler)
6364
var contextReq *http.Request
6465
Eventually(reqChan).Should(Receive(&contextReq))
65-
66-
expectedStartTime := time.Now()
66+
after := time.Now()
6767

6868
ri, err := handlers.ContextRequestInfo(contextReq)
6969
Expect(err).ToNot(HaveOccurred())
7070
Expect(ri).ToNot(BeNil())
71-
Expect(ri.ReceivedAt).To(BeTemporally("~", expectedStartTime, 10*time.Millisecond))
71+
Expect(ri.ReceivedAt).To(BeTemporally(">=", before))
72+
Expect(ri.ReceivedAt).To(BeTemporally("<=", after))
7273

7374
})
7475
})

src/code.cloudfoundry.org/gorouter/proxy/proxy_test.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ package proxy_test
33
import (
44
"bufio"
55
"bytes"
6-
"code.cloudfoundry.org/gorouter/proxy"
7-
"code.cloudfoundry.org/gorouter/routeservice"
86
"crypto/tls"
97
"crypto/x509"
108
"fmt"
@@ -22,6 +20,9 @@ import (
2220
"sync/atomic"
2321
"time"
2422

23+
"code.cloudfoundry.org/gorouter/proxy"
24+
"code.cloudfoundry.org/gorouter/routeservice"
25+
2526
"github.com/cloudfoundry/dropsonde/factories"
2627
"github.com/cloudfoundry/sonde-go/events"
2728
uuid "github.com/nu7hatch/gouuid"
@@ -2888,9 +2889,11 @@ var _ = Describe("Proxy", func() {
28882889
conn := dialProxy(proxyServer)
28892890

28902891
req := test_util.NewRequest("GET", "reporter-test", "/", nil)
2892+
before := time.Now()
28912893
conn.WriteRequest(req)
28922894

28932895
resp, _ := conn.ReadResponse()
2896+
after := time.Now()
28942897
Expect(resp.StatusCode).To(Equal(http.StatusOK))
28952898

28962899
Expect(fakeReporter.CaptureBadGatewayCallCount()).To(Equal(0))
@@ -2906,7 +2909,8 @@ var _ = Describe("Proxy", func() {
29062909
Expect(capturedEndpoint.PrivateInstanceId).To(Equal(""))
29072910
Expect(capturedEndpoint.PrivateInstanceIndex).To(Equal("2"))
29082911
Expect(capturedRespCode).To(Equal(http.StatusOK))
2909-
Expect(startTime).To(BeTemporally("~", time.Now(), 100*time.Millisecond))
2912+
Expect(startTime).To(BeTemporally(">=", before))
2913+
Expect(startTime).To(BeTemporally("<=", after))
29102914
Expect(latency).To(BeNumerically(">", 0))
29112915

29122916
Expect(fakeReporter.CaptureRoutingRequestCallCount()).To(Equal(1))

src/code.cloudfoundry.org/gorouter/proxy/round_tripper/proxy_round_tripper_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3028,13 +3028,14 @@ var _ = Describe("ProxyRoundTripper", func() {
30283028
}
30293029
})
30303030
It("sets a http/1 timeout on the request context", func() {
3031+
before := time.Now()
30313032
proxyRoundTripper.RoundTrip(req)
30323033
var request *http.Request
30333034
Eventually(reqCh).Should(Receive(&request))
30343035

30353036
deadLine, deadlineSet := request.Context().Deadline()
30363037
Expect(deadlineSet).To(BeTrue())
3037-
Expect(deadLine).To(BeTemporally("~", time.Now().Add(20*time.Millisecond), 11*time.Millisecond))
3038+
Expect(deadLine).To(BeTemporally("~", before.Add(20*time.Millisecond), 20*time.Millisecond))
30383039
Eventually(func() string {
30393040
err := request.Context().Err()
30403041
if err != nil {
@@ -3053,13 +3054,14 @@ var _ = Describe("ProxyRoundTripper", func() {
30533054
}
30543055
})
30553056
It("sets a http/2 timeout on the request context", func() {
3057+
before := time.Now()
30563058
proxyRoundTripper.RoundTrip(req)
30573059
var request *http.Request
30583060
Eventually(reqCh).Should(Receive(&request))
30593061

30603062
deadLine, deadlineSet := request.Context().Deadline()
30613063
Expect(deadlineSet).To(BeTrue())
3062-
Expect(deadLine).To(BeTemporally("~", time.Now().Add(15*time.Millisecond), 6*time.Millisecond))
3064+
Expect(deadLine).To(BeTemporally("~", before.Add(15*time.Millisecond), 15*time.Millisecond))
30633065
Eventually(func() string {
30643066
err := request.Context().Err()
30653067
if err != nil {

0 commit comments

Comments
 (0)