/
export_test.go
60 lines (49 loc) · 1.38 KB
/
export_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
// Copyright 2013, 2014 Canonical Ltd.
// Licensed under the AGPLv3, see LICENCE file for details.
package uniter
import (
"fmt"
"time"
)
func SetUniterObserver(u *Uniter, observer UniterExecutionObserver) {
u.observer = observer
}
var (
IdleWaitTime = &idleWaitTime
LeadershipGuarantee = &leadershipGuarantee
)
// manualTicker will be used to generate collect-metrics events
// in a time-independent manner for testing.
type ManualTicker struct {
c chan time.Time
}
// Tick sends a signal on the ticker channel.
func (t *ManualTicker) Tick() error {
select {
case t.c <- time.Now():
default:
return fmt.Errorf("ticker channel blocked")
}
return nil
}
// ReturnTimer can be used to replace the metrics signal generator.
func (t *ManualTicker) ReturnTimer(now, lastRun time.Time, interval time.Duration) <-chan time.Time {
return t.c
}
func NewManualTicker() *ManualTicker {
return &ManualTicker{
c: make(chan time.Time, 1),
}
}
func NewTestingMetricsTimerChooser(active TimedSignal) *timerChooser {
return &timerChooser{
active: active,
inactive: inactiveMetricsTimer,
}
}
func UpdateStatusSignal(now, lastSignal time.Time, interval time.Duration) <-chan time.Time {
return updateStatusSignal(now, lastSignal, interval)
}
func ActiveMetricsSignal(now, lastSignal time.Time, interval time.Duration) <-chan time.Time {
return activeMetricsTimer(now, lastSignal, interval)
}