fix(common/countdown): stabilize reset timing assertions#2120
fix(common/countdown): stabilize reset timing assertions#2120gzliudan wants to merge 1 commit intoXinFinOrg:dev-upgradefrom
Conversation
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Pull request overview
This PR aims to reduce flakiness in common/countdown reset-related unit tests by aligning the “second window” timing with an explicit second Reset and by making the timeout boundary check tolerant of exact-equality.
Changes:
- Add an explicit second
countdown.Reset(...)before asserting the second timeout window in the reset tests. - Replace
time.Now().After(...)with a boundary-safe!time.Now().Before(...)comparison for the second reset assertion.
Comments suppressed due to low confidence (2)
common/countdown/countdown_test.go:74
- These tests start a
CountdownTimergoroutine that runs indefinitely and keeps spawningOnTimeoutFngoroutines every 5s. Since the test never callsStopTimer, the background timer continues after the test finishes and can accumulate blocked goroutines (thecalledchannel has no receiver once the test returns), which can destabilize the overall test suite. Consider adding at.Cleanup/deferto stop the timer once the assertions are complete.
countdown.Reset(fakeI, 0, 0)
expectedTimeAfterReset := time.Now().Add(5000 * time.Millisecond)
<-called
// Always initilised
assert.True(t, countdown.isInitilised())
if !time.Now().Before(expectedTimeAfterReset) {
t.Log("Correctly reset the countdown second time")
} else {
t.Fatalf("Countdown did not reset correctly second time")
}
common/countdown/countdown_test.go:124
- This test also leaves the countdown goroutine running after completion. Please stop/cleanup the timer (e.g., via
t.Cleanup) to avoid leaking goroutines and repeated timeout callbacks after the test returns.
countdown.Reset(fakeI, 0, 0)
expectedTimeAfterReset := time.Now().Add(5000 * time.Millisecond)
<-called
// Always initilised
assert.True(t, countdown.isInitilised())
if !time.Now().Before(expectedTimeAfterReset) {
t.Log("Correctly reset the countdown second time")
} else {
t.Fatalf("Countdown did not reset correctly second time")
}
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
4de0793 to
1192945
Compare
1192945 to
c0b6069
Compare
Fix flaky countdown reset tests by performing an explicit second Reset before validating the second timeout window, and using a boundary-safe time check.
Observed failure:
--- FAIL: TestCountdownShouldReset (14.00s)
countdown_test.go:53: Correctly reset the countdown once
countdown_test.go:72: Countdown did not reset correctly second time
c0b6069 to
d861323
Compare
Proposed changes
Fix flaky countdown reset tests by performing an explicit second Reset before validating the second timeout window, and using a boundary-safe time check.
Observed failure:
--- FAIL: TestCountdownShouldReset (14.00s)
countdown_test.go:53: Correctly reset the countdown once
countdown_test.go:72: Countdown did not reset correctly second time
Types of changes
What types of changes does your code introduce to XDC network?
Put an
✅in the boxes that applyImpacted Components
Which parts of the codebase does this PR touch?
Put an
✅in the boxes that applyChecklist
Put an
✅in the boxes once you have confirmed below actions (or provide reasons on not doing so) that