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  }