mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-01-08 23:18:15 -05:00
Replace fixed sleep delays with active polling in prometheus service test (#15828)
## **Description:** **What type of PR is this?** > Bug fix **What does this PR do? Why is it needed?** Replaces fixed `time.Sleep(time.Second)` delays in `TestLifecycle` with active polling to wait for service readiness/shutdown. This improves test reliability and reduces execution time by eliminating unnecessary waits when services start/stop faster than expected. **Which issues(s) does this PR fix?** N/A - Minor test improvement **Other notes for review** - Uses 50ms polling interval with 3s timeout for both startup and shutdown checks - Maintains same test logic while making it more efficient and less flaky - No functional changes to the service itself **Acknowledgements** - [x] I have read [CONTRIBUTING.md](https://github.com/prysmaticlabs/prysm/blob/develop/CONTRIBUTING.md). - [ ] I have included a uniquely named [changelog fragment file](https://github.com/prysmaticlabs/prysm/blob/develop/CONTRIBUTING.md#maintaining-changelogmd). - [x] I have added a description to this PR with sufficient context for reviewers to understand this PR.
This commit is contained in:
3
changelog/sashaodessa_patch-1.md
Normal file
3
changelog/sashaodessa_patch-1.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
### Ignored
|
||||||
|
|
||||||
|
- Replace fixed sleep delays with active polling in prometheus service test to improve test reliability.
|
||||||
@@ -26,8 +26,21 @@ func TestLifecycle(t *testing.T) {
|
|||||||
port := 1000 + rand.Intn(1000)
|
port := 1000 + rand.Intn(1000)
|
||||||
prometheusService := NewService(t.Context(), fmt.Sprintf(":%d", port), nil)
|
prometheusService := NewService(t.Context(), fmt.Sprintf(":%d", port), nil)
|
||||||
prometheusService.Start()
|
prometheusService.Start()
|
||||||
// Give service time to start.
|
// Actively wait until the service responds on /metrics (faster and less flaky than a fixed sleep)
|
||||||
time.Sleep(time.Second)
|
deadline := time.Now().Add(3 * time.Second)
|
||||||
|
for {
|
||||||
|
if time.Now().After(deadline) {
|
||||||
|
t.Fatalf("metrics endpoint not ready within timeout")
|
||||||
|
}
|
||||||
|
resp, err := http.Get(fmt.Sprintf("http://localhost:%d/metrics", port))
|
||||||
|
if err == nil {
|
||||||
|
_ = resp.Body.Close()
|
||||||
|
if resp.StatusCode == http.StatusOK {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
time.Sleep(50 * time.Millisecond)
|
||||||
|
}
|
||||||
|
|
||||||
// Query the service to ensure it really started.
|
// Query the service to ensure it really started.
|
||||||
resp, err := http.Get(fmt.Sprintf("http://localhost:%d/metrics", port))
|
resp, err := http.Get(fmt.Sprintf("http://localhost:%d/metrics", port))
|
||||||
@@ -36,8 +49,18 @@ func TestLifecycle(t *testing.T) {
|
|||||||
|
|
||||||
err = prometheusService.Stop()
|
err = prometheusService.Stop()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
// Give service time to stop.
|
// Actively wait until the service stops responding on /metrics
|
||||||
time.Sleep(time.Second)
|
deadline = time.Now().Add(3 * time.Second)
|
||||||
|
for {
|
||||||
|
if time.Now().After(deadline) {
|
||||||
|
t.Fatalf("metrics endpoint still reachable after timeout")
|
||||||
|
}
|
||||||
|
_, err = http.Get(fmt.Sprintf("http://localhost:%d/metrics", port))
|
||||||
|
if err != nil {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
time.Sleep(50 * time.Millisecond)
|
||||||
|
}
|
||||||
|
|
||||||
// Query the service to ensure it really stopped.
|
// Query the service to ensure it really stopped.
|
||||||
_, err = http.Get(fmt.Sprintf("http://localhost:%d/metrics", port))
|
_, err = http.Get(fmt.Sprintf("http://localhost:%d/metrics", port))
|
||||||
|
|||||||
Reference in New Issue
Block a user