/
export_test.go
65 lines (53 loc) · 1.62 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
61
62
63
64
65
// Copyright 2013, 2014 Canonical Ltd.
// Licensed under the AGPLv3, see LICENCE file for details.
package uniter
import (
"fmt"
"time"
"github.com/juju/juju/testing"
)
func SetUniterObserver(u *Uniter, observer UniterExecutionObserver) {
u.observer = observer
}
var (
ActiveCollectMetricsTimer = &activeCollectMetricsTimer
ActiveSendMetricsTimer = &activeSendMetricsTimer
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():
case <-time.After(testing.LongWait):
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),
}
}
func NewTestingMetricsTimerChooser(collector TimedSignal, sender TimedSignal) *timerChooser {
return &timerChooser{
collector: collector,
sender: sender,
inactive: inactiveMetricsTimer,
}
}
func UpdateStatusSignal(now, lastSignal time.Time, interval time.Duration) <-chan time.Time {
return updateStatusSignal(now, lastSignal, interval)
}
func ActiveCollectMetricsSignal(now, lastSignal time.Time, interval time.Duration) <-chan time.Time {
return activeCollectMetricsTimer(now, lastSignal, interval)
}