mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-26 05:03:09 +00:00
Merge pull request #94317 from kevindelgado/draft/fix-fakeclock-reset
Fix FakeClock::Reset to always succeed
This commit is contained in:
commit
d8eac8df28
@ -348,7 +348,13 @@ func (f *fakeTimer) Stop() bool {
|
|||||||
// Reset conditionally updates the firing time of the timer. If the
|
// Reset conditionally updates the firing time of the timer. If the
|
||||||
// timer has neither fired nor been stopped then this call resets the
|
// timer has neither fired nor been stopped then this call resets the
|
||||||
// timer to the fake clock's "now" + d and returns true, otherwise
|
// timer to the fake clock's "now" + d and returns true, otherwise
|
||||||
// this call returns false. This is like time.Timer::Reset.
|
// it creates a new waiter, adds it to the clock, and returns true.
|
||||||
|
//
|
||||||
|
// It is not possible to return false, because a fake timer can be reset
|
||||||
|
// from any state (waiting to fire, already fired, and stopped).
|
||||||
|
//
|
||||||
|
// See the GoDoc for time.Timer::Reset for more context on why
|
||||||
|
// the return value of Reset() is not useful.
|
||||||
func (f *fakeTimer) Reset(d time.Duration) bool {
|
func (f *fakeTimer) Reset(d time.Duration) bool {
|
||||||
f.fakeClock.lock.Lock()
|
f.fakeClock.lock.Lock()
|
||||||
defer f.fakeClock.lock.Unlock()
|
defer f.fakeClock.lock.Unlock()
|
||||||
@ -360,7 +366,15 @@ func (f *fakeTimer) Reset(d time.Duration) bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false
|
// No existing waiter, timer has already fired or been reset.
|
||||||
|
// We should still enable Reset() to succeed by creating a
|
||||||
|
// new waiter and adding it to the clock's waiters.
|
||||||
|
newWaiter := fakeClockWaiter{
|
||||||
|
targetTime: f.fakeClock.time.Add(d),
|
||||||
|
destChan: seekChan,
|
||||||
|
}
|
||||||
|
f.fakeClock.waiters = append(f.fakeClock.waiters, newWaiter)
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ticker defines the Ticker interface
|
// Ticker defines the Ticker interface
|
||||||
|
@ -217,8 +217,8 @@ func TestFakeTimer(t *testing.T) {
|
|||||||
t.Errorf("unexpected channel read")
|
t.Errorf("unexpected channel read")
|
||||||
default:
|
default:
|
||||||
}
|
}
|
||||||
if twoSec.Reset(time.Second) {
|
if !twoSec.Reset(time.Second) {
|
||||||
t.Errorf("Expected twoSec.Reset() to return false")
|
t.Errorf("Expected twoSec.Reset() to return true")
|
||||||
}
|
}
|
||||||
if !treSec.Reset(time.Second) {
|
if !treSec.Reset(time.Second) {
|
||||||
t.Errorf("Expected treSec.Reset() to return true")
|
t.Errorf("Expected treSec.Reset() to return true")
|
||||||
@ -238,8 +238,9 @@ func TestFakeTimer(t *testing.T) {
|
|||||||
case <-oneSec.C():
|
case <-oneSec.C():
|
||||||
t.Errorf("unexpected channel read")
|
t.Errorf("unexpected channel read")
|
||||||
case <-twoSec.C():
|
case <-twoSec.C():
|
||||||
t.Errorf("unexpected channel read")
|
// Expected!
|
||||||
default:
|
default:
|
||||||
|
t.Errorf("unexpected channel non-read")
|
||||||
}
|
}
|
||||||
select {
|
select {
|
||||||
case <-treSec.C():
|
case <-treSec.C():
|
||||||
|
Loading…
Reference in New Issue
Block a user