mirror of
https://github.com/tailscale/tailscale.git
synced 2024-11-29 04:55:31 +00:00
tstime: add Since method (#8622)
Updates #8463 Signed-off-by: Claire Wang <claire@tailscale.com>
This commit is contained in:
parent
60e5761d60
commit
0573f6e953
@ -303,6 +303,11 @@ func (c *Clock) AfterFunc(d time.Duration, f func()) tstime.TimerController {
|
|||||||
return t
|
return t
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Since subtracts specified duration from Now().
|
||||||
|
func (c *Clock) Since(t time.Time) time.Duration {
|
||||||
|
return c.Now().Sub(t)
|
||||||
|
}
|
||||||
|
|
||||||
// eventHandler offers a common interface for Timer and Ticker events to avoid
|
// eventHandler offers a common interface for Timer and Ticker events to avoid
|
||||||
// code duplication in eventManager.
|
// code duplication in eventManager.
|
||||||
type eventHandler interface {
|
type eventHandler interface {
|
||||||
|
@ -2437,3 +2437,47 @@ type testStep struct {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestSince(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
start time.Time
|
||||||
|
since time.Time
|
||||||
|
want time.Duration
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "positive",
|
||||||
|
start: time.Unix(12345, 1000),
|
||||||
|
since: time.Unix(11111, 1000),
|
||||||
|
want: 1234 * time.Second,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "negative",
|
||||||
|
start: time.Unix(12345, 1000),
|
||||||
|
since: time.Unix(15436, 1000),
|
||||||
|
want: -3091 * time.Second,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "zero",
|
||||||
|
start: time.Unix(12345, 1000),
|
||||||
|
since: time.Unix(12345, 1000),
|
||||||
|
want: 0,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
tt := tt
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
clock := NewClock(ClockOpts{
|
||||||
|
Start: tt.start,
|
||||||
|
})
|
||||||
|
got := clock.Since(tt.since)
|
||||||
|
if got != tt.want {
|
||||||
|
t.Errorf("Since duration %v, want %v", got, tt.want)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -84,6 +84,9 @@ type Clock interface {
|
|||||||
// by this Clock. When the ticker expires, it will call the provided func.
|
// by this Clock. When the ticker expires, it will call the provided func.
|
||||||
// It follows the semantics of time.AfterFunc.
|
// It follows the semantics of time.AfterFunc.
|
||||||
AfterFunc(d time.Duration, f func()) TimerController
|
AfterFunc(d time.Duration, f func()) TimerController
|
||||||
|
// Since returns the time elapsed since t.
|
||||||
|
// It follows the semantics of time.Since.
|
||||||
|
Since(t time.Time) time.Duration
|
||||||
}
|
}
|
||||||
|
|
||||||
// TickerController offers the receivers of a time.Ticker to ensure
|
// TickerController offers the receivers of a time.Ticker to ensure
|
||||||
@ -135,3 +138,8 @@ func (StdClock) NewTicker(d time.Duration) (TickerController, <-chan time.Time)
|
|||||||
func (StdClock) AfterFunc(d time.Duration, f func()) TimerController {
|
func (StdClock) AfterFunc(d time.Duration, f func()) TimerController {
|
||||||
return time.AfterFunc(d, f)
|
return time.AfterFunc(d, f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Since calls time.Since.
|
||||||
|
func (StdClock) Since(t time.Time) time.Duration {
|
||||||
|
return time.Since(t)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user