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