Skip to content

Commit 0aea76d

Browse files
committed
fix(tests): replace ReservePort with NextAvailPort for in-process router ports to fix parallel test flakiness
1 parent 051f912 commit 0aea76d

2 files changed

Lines changed: 47 additions & 58 deletions

File tree

src/code.cloudfoundry.org/gorouter/router/router_drain_test.go

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,6 @@ var _ = Describe("Router", func() {
108108
}
109109

110110
runRouter := func(r *router.Router) (chan os.Signal, chan struct{}) {
111-
test_util.ReleaseAllPorts()
112111
signals := make(chan os.Signal, 1)
113112
readyChan := make(chan struct{}, 1)
114113
closeChannel := make(chan struct{}, 1)
@@ -157,13 +156,13 @@ var _ = Describe("Router", func() {
157156
natsRunner = test_util.NewNATSRunner(int(natsPort))
158157
natsRunner.Start()
159158

160-
proxyPort := test_util.ReservePort()
161-
statusPort := test_util.ReservePort()
162-
statusTlsPort := test_util.ReservePort()
163-
statusRoutesPort := test_util.ReservePort()
159+
proxyPort := test_util.NextAvailPort()
160+
statusPort := test_util.NextAvailPort()
161+
statusTlsPort := test_util.NextAvailPort()
162+
statusRoutesPort := test_util.NextAvailPort()
164163

165-
sslPort := test_util.ReservePort()
166-
routeServiceServerPort := test_util.ReservePort()
164+
sslPort := test_util.NextAvailPort()
165+
routeServiceServerPort := test_util.NextAvailPort()
167166

168167
defaultCert := test_util.CreateCert("default")
169168
cert2 := test_util.CreateCert("default")
@@ -205,7 +204,6 @@ var _ = Describe("Router", func() {
205204
})
206205

207206
AfterEach(func() {
208-
test_util.ReleaseAllPorts()
209207
if subscriber != nil {
210208
subscriber.Signal(os.Interrupt)
211209
<-subscriber.Wait()
@@ -421,9 +419,9 @@ var _ = Describe("Router", func() {
421419
h = &health.Health{}
422420
h.SetHealth(health.Healthy)
423421
config.HealthCheckUserAgent = "HTTP-Monitor/1.1"
424-
config.Status.Port = test_util.ReservePort()
425-
config.Status.TLS.Port = test_util.ReservePort()
426-
config.Status.Routes.Port = test_util.ReservePort()
422+
config.Status.Port = test_util.NextAvailPort()
423+
config.Status.TLS.Port = test_util.NextAvailPort()
424+
config.Status.Routes.Port = test_util.NextAvailPort()
427425
rt := &sharedfakes.RoundTripper{}
428426
p := proxy.NewProxy(logger.Logger, &accesslog.NullAccessLogger{}, ew, config, registry, combinedReporter,
429427
&routeservice.RouteServiceConfig{}, &tls.Config{}, &tls.Config{}, h, rt)

src/code.cloudfoundry.org/gorouter/router/router_test.go

Lines changed: 38 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -81,16 +81,16 @@ var _ = Describe("Router", func() {
8181
)
8282

8383
BeforeEach(func() {
84-
proxyPort := test_util.ReservePort()
85-
statusPort = test_util.ReservePort()
86-
statusTLSPort = test_util.ReservePort()
87-
statusRoutesPort = test_util.ReservePort()
84+
proxyPort := test_util.NextAvailPort()
85+
statusPort = test_util.NextAvailPort()
86+
statusTLSPort = test_util.NextAvailPort()
87+
statusRoutesPort = test_util.NextAvailPort()
8888
natsPort = test_util.ReservePort()
8989
config = test_util.SpecConfig(statusPort, statusTLSPort, statusRoutesPort, proxyPort, natsPort)
9090
backendIdleTimeout = config.EndpointTimeout
9191
requestTimeout = config.EndpointTimeout
9292
config.EnableSSL = true
93-
config.SSLPort = test_util.ReservePort()
93+
config.SSLPort = test_util.NextAvailPort()
9494
config.DisableHTTP = false
9595
cert := test_util.CreateCert("default")
9696
config.SSLCertificates = []tls.Certificate{cert}
@@ -115,7 +115,6 @@ var _ = Describe("Router", func() {
115115
})
116116

117117
JustBeforeEach(func() {
118-
test_util.ReleaseAllPorts()
119118
router, err = initializeRouter(config, backendIdleTimeout, requestTimeout, registry, varz, mbusClient, logger.Logger, routeServicesServer)
120119
Expect(err).ToNot(HaveOccurred())
121120

@@ -132,7 +131,6 @@ var _ = Describe("Router", func() {
132131
})
133132

134133
AfterEach(func() {
135-
test_util.ReleaseAllPorts()
136134
if router != nil {
137135
router.Stop()
138136
}
@@ -159,19 +157,18 @@ var _ = Describe("Router", func() {
159157

160158
Context("when an error occurs immediately during serve", func() {
161159
It("causes the router not to run", func() {
162-
rss := &sharedfakes.RouteServicesServer{}
163-
rss.ServeReturns(errors.New("serve error"))
164-
natsPort := test_util.ReservePort()
165-
proxyPort := test_util.ReservePort()
166-
statusPort = test_util.ReservePort()
167-
statusTLSPort = test_util.ReservePort()
168-
statusRoutesPort = test_util.ReservePort()
169-
170-
c := test_util.SpecConfig(statusPort, statusTLSPort, statusRoutesPort, proxyPort, natsPort)
171-
c.StartResponseDelayInterval = 1 * time.Second
172-
173-
test_util.ReleaseAllPorts()
174-
rtr, err := initializeRouter(c, c.EndpointTimeout, c.EndpointTimeout, registry, varz, mbusClient, logger.Logger, rss)
160+
rss := &sharedfakes.RouteServicesServer{}
161+
rss.ServeReturns(errors.New("serve error"))
162+
natsPort := test_util.NextAvailPort()
163+
proxyPort := test_util.NextAvailPort()
164+
statusPort = test_util.NextAvailPort()
165+
statusTLSPort = test_util.NextAvailPort()
166+
statusRoutesPort = test_util.NextAvailPort()
167+
168+
c := test_util.SpecConfig(statusPort, statusTLSPort, statusRoutesPort, proxyPort, natsPort)
169+
c.StartResponseDelayInterval = 1 * time.Second
170+
171+
rtr, err := initializeRouter(c, c.EndpointTimeout, c.EndpointTimeout, registry, varz, mbusClient, logger.Logger, rss)
175172
Expect(err).NotTo(HaveOccurred())
176173

177174
signals := make(chan os.Signal)
@@ -184,23 +181,22 @@ var _ = Describe("Router", func() {
184181

185182
Context("when an error occurs after some time serving", func() {
186183
It("causes the route to shut down", func() {
187-
natsPort := test_util.ReservePort()
188-
proxyPort := test_util.ReservePort()
189-
statusPort = test_util.ReservePort()
190-
statusTLSPort = test_util.ReservePort()
191-
statusRoutesPort = test_util.ReservePort()
192-
193-
c := test_util.SpecConfig(statusPort, statusTLSPort, statusRoutesPort, proxyPort, natsPort)
194-
c.StartResponseDelayInterval = 1 * time.Second
195-
196-
rss := &sharedfakes.RouteServicesServer{}
197-
rss.ServeStub = func(handler http.Handler, errChan chan error) error {
198-
errChan <- errors.New("a shutdown error")
199-
return nil
200-
}
184+
natsPort := test_util.NextAvailPort()
185+
proxyPort := test_util.NextAvailPort()
186+
statusPort = test_util.NextAvailPort()
187+
statusTLSPort = test_util.NextAvailPort()
188+
statusRoutesPort = test_util.NextAvailPort()
189+
190+
c := test_util.SpecConfig(statusPort, statusTLSPort, statusRoutesPort, proxyPort, natsPort)
191+
c.StartResponseDelayInterval = 1 * time.Second
192+
193+
rss := &sharedfakes.RouteServicesServer{}
194+
rss.ServeStub = func(handler http.Handler, errChan chan error) error {
195+
errChan <- errors.New("a shutdown error")
196+
return nil
197+
}
201198

202-
test_util.ReleaseAllPorts()
203-
rtr, err := initializeRouter(c, c.EndpointTimeout, c.EndpointTimeout, registry, varz, mbusClient, logger.Logger, rss)
199+
rtr, err := initializeRouter(c, c.EndpointTimeout, c.EndpointTimeout, registry, varz, mbusClient, logger.Logger, rss)
204200
Expect(err).NotTo(HaveOccurred())
205201

206202
signals := make(chan os.Signal)
@@ -219,11 +215,11 @@ var _ = Describe("Router", func() {
219215
err error
220216
)
221217
BeforeEach(func() {
222-
natsPort := test_util.ReservePort()
223-
proxyPort := test_util.ReservePort()
224-
statusPort = test_util.ReservePort()
225-
statusTLSPort = test_util.ReservePort()
226-
statusRoutesPort = test_util.ReservePort()
218+
natsPort := test_util.NextAvailPort()
219+
proxyPort := test_util.NextAvailPort()
220+
statusPort = test_util.NextAvailPort()
221+
statusTLSPort = test_util.NextAvailPort()
222+
statusRoutesPort = test_util.NextAvailPort()
227223
c = test_util.SpecConfig(statusPort, statusTLSPort, statusRoutesPort, proxyPort, natsPort)
228224
c.StartResponseDelayInterval = 1 * time.Second
229225
})
@@ -246,7 +242,6 @@ var _ = Describe("Router", func() {
246242
Context("and the nontls health listener is enabled", func() {
247243
It("does not immediately make the health check endpoint available", func() {
248244
// Create a second router to test the health check in parallel to startup
249-
test_util.ReleaseAllPorts()
250245
rtr, err = initializeRouter(c, c.EndpointTimeout, c.EndpointTimeout, registry, varz, mbusClient, logger.Logger, routeServicesServer)
251246

252247
Expect(err).ToNot(HaveOccurred())
@@ -273,7 +268,6 @@ var _ = Describe("Router", func() {
273268
})
274269
It("never listen on the nontls status port", func() {
275270
// Create a second router to test the health check in parallel to startup
276-
test_util.ReleaseAllPorts()
277271
rtr, err = initializeRouter(c, c.EndpointTimeout, c.EndpointTimeout, registry, varz, mbusClient, logger.Logger, routeServicesServer)
278272

279273
Expect(err).ToNot(HaveOccurred())
@@ -296,7 +290,6 @@ var _ = Describe("Router", func() {
296290

297291
It("does not immediately make the health check endpoint available", func() {
298292
// Create a second router to test the health check in parallel to startup
299-
test_util.ReleaseAllPorts()
300293
rtr, err = initializeRouter(c, c.EndpointTimeout, c.EndpointTimeout, registry, varz, mbusClient, logger.Logger, routeServicesServer)
301294

302295
Expect(err).ToNot(HaveOccurred())
@@ -324,7 +317,6 @@ var _ = Describe("Router", func() {
324317
})
325318
It("does not start the TLS health listener", func() {
326319
// Create a second router to test the health check in parallel to startup
327-
test_util.ReleaseAllPorts()
328320
rtr, err = initializeRouter(c, c.EndpointTimeout, c.EndpointTimeout, registry, varz, mbusClient, logger.Logger, routeServicesServer)
329321
Expect(err).ToNot(HaveOccurred())
330322
signals := make(chan os.Signal)
@@ -345,7 +337,6 @@ var _ = Describe("Router", func() {
345337
c.Status.EnableNonTLSHealthChecks = false
346338
})
347339
It("throws an error initalizing the router", func() {
348-
test_util.ReleaseAllPorts()
349340
rtr, err = initializeRouter(c, c.EndpointTimeout, c.EndpointTimeout, registry, varz, mbusClient, logger.Logger, routeServicesServer)
350341
Expect(err).To(HaveOccurred())
351342
Expect(err).To(MatchError(ContainSubstring("bug in gorouter")))
@@ -2322,7 +2313,7 @@ var _ = Describe("Router", func() {
23222313

23232314
})
23242315

2325-
Describe("frontend timeouts", func() {
2316+
Context("frontend timeouts", func() {
23262317
Context("when the frontend connection idles for more than the configured IdleTimeout", func() {
23272318
BeforeEach(func() {
23282319
config.FrontendIdleTimeout = 500 * time.Millisecond

0 commit comments

Comments
 (0)