Atlas › Test
TestTimeSkippingTimeSource_NewTimer_DelegatesToBase
Exact test identity: go.temporal.io/server/common/clock/TestTimeSkippingTimeSource_NewTimer_DelegatesToBase
- Package
go.temporal.io/server/common/clock
- Suite / test hierarchy
TestTimeSkippingTimeSource_NewTimer_DelegatesToBase
- Test
TestTimeSkippingTimeSource_NewTimer_DelegatesToBase
- Introduced at
- time_skipping_time_source.go ×1 Frontier kind: Joint frontier
- Covered ranges
- 17
- Covered lines
- 55
- Covered files
- 2
Covered source
Expand a file to inspect source; the > gutter marks covered lines.
go.temporal.io/server/common/clock/event_time_source.go 49 covered LOC · 15 ranges
Open complete file
39
40
// NewEventTimeSource returns a EventTimeSource with the current time set to Unix zero: 1970-01-01 00:00:00 +0000 UTC.
42
>
return &EventTimeSource{
43
>
now: time.Unix(0, 0),
44
>
}
45
>
}
46
47
// Some clients depend on the fact that the runtime's timers do _not_ run synchronously.
55
56
// Now return the current time.
58
>
ts.mu.RLock()
59
>
defer ts.mu.RUnlock()
60
>
61
>
return ts.now
62
>
}
63
64
func (ts *EventTimeSource) Since(t time.Time) time.Duration {
82
// NewTimer creates a Timer that will send the current time on a channel after at least
83
// duration d. It returns the channel and the Timer.
84
>
func (ts *EventTimeSource) NewTimer(d time.Duration) (<-chan time.Time, Timer) {
event_time_source.go
85
>
c := make(chan time.Time, 1)
86
>
// we can't call ts.Now() from the callback so just calculate what it should be
87
>
target := ts.Now().Add(d)
88
>
timer := &fakeTimer{
89
>
timeSource: ts,
90
>
deadline: target,
91
>
callback: func() { c <- target },
92
c: c,
93
}
95
>
return c, timer
96
}
97
99
>
ts.mu.Lock()
100
>
defer ts.mu.Unlock()
101
>
t.index = len(ts.timers)
102
>
ts.timers = append(ts.timers, t)
103
>
ts.fireTimers()
104
>
}
105
106
// Update the fake current time. It returns the timeSource so that you can chain calls like this:
116
117
// Advance the timer by the specified duration.
119
>
ts.mu.Lock()
120
>
defer ts.mu.Unlock()
121
>
122
>
ts.now = ts.now.Add(d)
123
>
ts.fireTimers()
124
>
}
125
126
// AdvanceNext advances to the next timer.
156
157
// fireTimers fires all timers that are ready.
159
>
n := 0
160
>
for _, t := range ts.timers {
163
>
t.index = n
164
>
n++
167
go t.callback()
170
>
}
172
}
173
}
175
}
176
go.temporal.io/server/common/clock/time_skipping_time_source.go 6 covered LOC · 2 ranges
Open complete file
20
// the base's Now()/Since() on every call. If getOffset is nil, the wrapper behaves
21
// as a pass-through to base.
23
>
return &TimeSkippingTimeSourceWrapper{base: base, getOffset: getOffset}
24
>
}
25
26
func (ts *TimeSkippingTimeSourceWrapper) Now() time.Time {
44
// NewTimer delegates to the base TimeSource and does not apply the offset.
45
// TODO@time-skipping: examine if there is any need to skip time for this method.
47
>
return ts.base.NewTimer(d)
48
>
}