@@ -1,380 +0,0 @@
8− "github.com/oauth2-proxy/oauth2-proxy/v7/pkg/clock"
9− . "github.com/onsi/ginkgo/v2"
10− . "github.com/onsi/gomega"
14− testGlobalEpoch = 1000000000
15− testLocalEpoch = 1234567890
18−var _ = Describe("Clock suite", func() {
19− var testClock = clock.Clock{}
26− Context("Global time not overridden", func() {
27− It("errors when trying to Add", func() {
28− err := clock.Add(123 * time.Hour)
29− Expect(err).To(HaveOccurred())
32− Context("Clock not mocked via Set", func() {
34− outsideTolerance = int32(0)
35− withinTolerance = int32(1)
38− It("uses time.After for After", func() {
41− time.Sleep(10 * time.Millisecond)
42− atomic.StoreInt32(&tolerance, withinTolerance)
45− time.Sleep(30 * time.Millisecond)
46− atomic.StoreInt32(&tolerance, outsideTolerance)
49− Expect(atomic.LoadInt32(&tolerance)).To(Equal(outsideTolerance))
51− <-testClock.After(20 * time.Millisecond)
52− Expect(atomic.LoadInt32(&tolerance)).To(Equal(withinTolerance))
54− <-testClock.After(20 * time.Millisecond)
55− Expect(atomic.LoadInt32(&tolerance)).To(Equal(outsideTolerance))
58− It("uses time.AfterFunc for AfterFunc", func() {
61− time.Sleep(10 * time.Millisecond)
62− atomic.StoreInt32(&tolerance, withinTolerance)
65− time.Sleep(30 * time.Millisecond)
66− atomic.StoreInt32(&tolerance, outsideTolerance)
69− Expect(atomic.LoadInt32(&tolerance)).To(Equal(outsideTolerance))
71− var wg sync.WaitGroup
73− testClock.AfterFunc(20*time.Millisecond, func() {
77− Expect(atomic.LoadInt32(&tolerance)).To(Equal(withinTolerance))
80− testClock.AfterFunc(20*time.Millisecond, func() {
84− Expect(atomic.LoadInt32(&tolerance)).To(Equal(outsideTolerance))
87− It("uses time.Now for Now", func() {
90− Expect(b.Sub(a).Round(10 * time.Millisecond)).To(Equal(0 * time.Millisecond))
93− It("uses time.Since for Since", func() {
94− past := time.Now().Add(-60 * time.Second)
95− Expect(time.Since(past).Round(10 * time.Millisecond)).
96− To(Equal(60 * time.Second))
99− It("uses time.Sleep for Sleep", func() {
102− time.Sleep(10 * time.Millisecond)
103− atomic.StoreInt32(&tolerance, withinTolerance)
106− time.Sleep(30 * time.Millisecond)
107− atomic.StoreInt32(&tolerance, outsideTolerance)
110− Expect(atomic.LoadInt32(&tolerance)).To(Equal(outsideTolerance))
112− testClock.Sleep(20 * time.Millisecond)
113− Expect(atomic.LoadInt32(&tolerance)).To(Equal(withinTolerance))
115− testClock.Sleep(20 * time.Millisecond)
116− Expect(atomic.LoadInt32(&tolerance)).To(Equal(outsideTolerance))
119− It("uses time.Tick for Tick", func() {
122− time.Sleep(10 * time.Millisecond)
123− atomic.StoreInt32(&tolerance, withinTolerance)
126− time.Sleep(50 * time.Millisecond)
127− atomic.StoreInt32(&tolerance, outsideTolerance)
130− ch := testClock.Tick(20 * time.Millisecond)
131− Expect(atomic.LoadInt32(&tolerance)).To(Equal(outsideTolerance))
133− Expect(atomic.LoadInt32(&tolerance)).To(Equal(withinTolerance))
135− Expect(atomic.LoadInt32(&tolerance)).To(Equal(withinTolerance))
137− Expect(atomic.LoadInt32(&tolerance)).To(Equal(outsideTolerance))
140− It("uses time.Ticker for Ticker", func() {
143− time.Sleep(10 * time.Millisecond)
144− atomic.StoreInt32(&tolerance, withinTolerance)
147− time.Sleep(50 * time.Millisecond)
148− atomic.StoreInt32(&tolerance, outsideTolerance)
151− ticker := testClock.Ticker(20 * time.Millisecond)
152− Expect(atomic.LoadInt32(&tolerance)).To(Equal(outsideTolerance))
154− Expect(atomic.LoadInt32(&tolerance)).To(Equal(withinTolerance))
156− Expect(atomic.LoadInt32(&tolerance)).To(Equal(withinTolerance))
158− Expect(atomic.LoadInt32(&tolerance)).To(Equal(outsideTolerance))
161− It("errors if Add is used", func() {
162− err := testClock.Add(100 * time.Second)
163− Expect(err).To(HaveOccurred())
167− Context("Clock mocked via Set", func() {
168− var now = time.Unix(testLocalEpoch, 0)
174− It("mocks After", func() {
176− ready := make(chan struct{})
177− ch := testClock.After(10 * time.Second)
178− go func(ch <-chan time.Time) {
181− atomic.StoreInt32(&after, 1)
185− err := testClock.Add(9 * time.Second)
186− Expect(err).ToNot(HaveOccurred())
187− Expect(atomic.LoadInt32(&after)).To(Equal(int32(0)))
189− err = testClock.Add(1 * time.Second)
190− Expect(err).ToNot(HaveOccurred())
191− Expect(atomic.LoadInt32(&after)).To(Equal(int32(1)))
194− It("mocks AfterFunc", func() {
196− testClock.AfterFunc(10*time.Second, func() {
197− atomic.StoreInt32(&after, 1)
200− err := testClock.Add(9 * time.Second)
201− Expect(err).ToNot(HaveOccurred())
202− Expect(atomic.LoadInt32(&after)).To(Equal(int32(0)))
204− err = testClock.Add(1 * time.Second)
205− Expect(err).ToNot(HaveOccurred())
206− Expect(atomic.LoadInt32(&after)).To(Equal(int32(1)))
209− It("mocks AfterFunc with a stopped timer", func() {
211− timer := testClock.AfterFunc(10*time.Second, func() {
212− atomic.StoreInt32(&after, 1)
216− err := testClock.Add(11 * time.Second)
217− Expect(err).ToNot(HaveOccurred())
218− Expect(atomic.LoadInt32(&after)).To(Equal(int32(0)))
221− It("mocks Now", func() {
222− Expect(testClock.Now()).To(Equal(now))
223− err := testClock.Add(123 * time.Hour)
224− Expect(err).ToNot(HaveOccurred())
225− Expect(testClock.Now()).To(Equal(now.Add(123 * time.Hour)))
228− It("mocks Since", func() {
229− Expect(testClock.Since(time.Unix(testLocalEpoch-100, 0))).
230− To(Equal(100 * time.Second))
233− It("mocks Sleep", func() {
235− ready := make(chan struct{})
238− testClock.Sleep(10 * time.Second)
239− atomic.StoreInt32(&after, 1)
243− err := testClock.Add(9 * time.Second)
244− Expect(err).ToNot(HaveOccurred())
245− Expect(atomic.LoadInt32(&after)).To(Equal(int32(0)))
247− err = testClock.Add(1 * time.Second)
248− Expect(err).ToNot(HaveOccurred())
249− Expect(atomic.LoadInt32(&after)).To(Equal(int32(1)))
252− It("mocks Tick", func() {
254− ready := make(chan struct{})
257− tick := testClock.Tick(10 * time.Second)
260− atomic.AddInt32(&ticks, 1)
265− Expect(atomic.LoadInt32(&ticks)).To(Equal(int32(0)))
267− err := testClock.Add(9 * time.Second)
268− Expect(err).ToNot(HaveOccurred())
269− Expect(atomic.LoadInt32(&ticks)).To(Equal(int32(0)))
271− err = testClock.Add(1 * time.Second)
272− Expect(err).ToNot(HaveOccurred())
273− Expect(atomic.LoadInt32(&ticks)).To(Equal(int32(1)))
275− err = testClock.Add(30 * time.Second)
276− Expect(err).ToNot(HaveOccurred())
277− Expect(atomic.LoadInt32(&ticks)).To(Equal(int32(4)))
279− err = testClock.Add(10 * time.Second)
280− Expect(err).ToNot(HaveOccurred())
281− Expect(atomic.LoadInt32(&ticks)).To(Equal(int32(5)))
284− It("mocks Ticker", func() {
286− ready := make(chan struct{})
288− ticker := testClock.Ticker(10 * time.Second)
292− atomic.AddInt32(&ticks, 1)
297− Expect(atomic.LoadInt32(&ticks)).To(Equal(int32(0)))
299− err := testClock.Add(9 * time.Second)
300− Expect(err).ToNot(HaveOccurred())
301− Expect(atomic.LoadInt32(&ticks)).To(Equal(int32(0)))
303− err = testClock.Add(1 * time.Second)
304− Expect(err).ToNot(HaveOccurred())
305− Expect(atomic.LoadInt32(&ticks)).To(Equal(int32(1)))
307− err = testClock.Add(30 * time.Second)
308− Expect(err).ToNot(HaveOccurred())
309− Expect(atomic.LoadInt32(&ticks)).To(Equal(int32(4)))
311− err = testClock.Add(10 * time.Second)
312− Expect(err).ToNot(HaveOccurred())
313− Expect(atomic.LoadInt32(&ticks)).To(Equal(int32(5)))
316− It("mocks Timer", func() {
318− ready := make(chan struct{})
320− timer := testClock.Timer(10 * time.Second)
323− atomic.AddInt32(&after, 1)
327− err := testClock.Add(9 * time.Second)
328− Expect(err).ToNot(HaveOccurred())
329− Expect(atomic.LoadInt32(&after)).To(Equal(int32(0)))
331− err = testClock.Add(1 * time.Second)
332− Expect(err).ToNot(HaveOccurred())
333− Expect(atomic.LoadInt32(&after)).To(Equal(int32(1)))
338− Context("Global time overridden", func() {
340− globalNow = time.Unix(testGlobalEpoch, 0)
341− localNow = time.Unix(testLocalEpoch, 0)
345− clock.Set(globalNow)
348− Context("Clock not mocked via Set", func() {
349− It("uses globally mocked Now", func() {
350− Expect(testClock.Now()).To(Equal(globalNow))
351− err := clock.Add(123 * time.Hour)
352− Expect(err).ToNot(HaveOccurred())
353− Expect(testClock.Now()).To(Equal(globalNow.Add(123 * time.Hour)))
356− It("errors when Add is called on the local Clock", func() {
357− err := testClock.Add(100 * time.Hour)
358− Expect(err).To(HaveOccurred())
362− Context("Clock is mocked via Set", func() {
364− testClock.Set(localNow)
367− It("uses the local mock and ignores the global", func() {
368− Expect(testClock.Now()).To(Equal(localNow))
370− err := clock.Add(456 * time.Hour)
371− Expect(err).ToNot(HaveOccurred())
373− err = testClock.Add(123 * time.Hour)
374− Expect(err).ToNot(HaveOccurred())
376− Expect(testClock.Now()).To(Equal(localNow.Add(123 * time.Hour)))