github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/worker/meterstatus/triggers_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package meterstatus_test
     5  
     6  import (
     7  	"time"
     8  
     9  	"github.com/juju/utils/clock"
    10  	gc "gopkg.in/check.v1"
    11  
    12  	coretesting "github.com/juju/juju/testing"
    13  	"github.com/juju/juju/worker/meterstatus"
    14  )
    15  
    16  type TriggersSuite struct {
    17  	coretesting.BaseSuite
    18  }
    19  
    20  var _ = gc.Suite(&TriggersSuite{})
    21  
    22  var fudge = time.Second
    23  
    24  const (
    25  	testAmberGracePeriod = time.Minute * 10
    26  	testRedGracePeriod   = time.Minute * 30
    27  )
    28  
    29  func (*TriggersSuite) TestTriggerCreation(c *gc.C) {
    30  	now := time.Now()
    31  	tests := []struct {
    32  		description  string
    33  		worker       meterstatus.WorkerState
    34  		status       string
    35  		disconnected time.Time
    36  		now          clock.Clock
    37  		check        func(*gc.C, <-chan time.Time, <-chan time.Time)
    38  	}{{
    39  		"normal start, unit status is green",
    40  		meterstatus.Uninitialized,
    41  		"GREEN",
    42  		now,
    43  		coretesting.NewClock(now),
    44  		func(c *gc.C, amber, red <-chan time.Time) {
    45  			c.Check(amber, gc.NotNil)
    46  			c.Check(red, gc.NotNil)
    47  		}}, {
    48  		"normal start, unit status is amber",
    49  		meterstatus.Uninitialized,
    50  		"AMBER",
    51  		now,
    52  		coretesting.NewClock(now),
    53  		func(c *gc.C, amber, red <-chan time.Time) {
    54  			c.Check(amber, gc.NotNil)
    55  			c.Check(red, gc.NotNil)
    56  		}}, {
    57  		"normal start, unit status is RED",
    58  		meterstatus.Uninitialized,
    59  		"RED",
    60  		now,
    61  		coretesting.NewClock(now),
    62  		func(c *gc.C, amber, red <-chan time.Time) {
    63  			c.Check(amber, gc.IsNil)
    64  			c.Check(red, gc.NotNil)
    65  		}}, {
    66  		"restart, unit status is green, amber status not yet triggered",
    67  		meterstatus.WaitingAmber,
    68  		"GREEN",
    69  		now,
    70  		coretesting.NewClock(now),
    71  		func(c *gc.C, amber, red <-chan time.Time) {
    72  			c.Check(amber, gc.NotNil)
    73  			c.Check(red, gc.NotNil)
    74  		}}, {
    75  		"restart, unit status is amber, amber status not yet triggered",
    76  		meterstatus.WaitingAmber,
    77  		"AMBER",
    78  		now,
    79  		coretesting.NewClock(now),
    80  		func(c *gc.C, amber, red <-chan time.Time) {
    81  			c.Check(amber, gc.NotNil)
    82  			c.Check(red, gc.NotNil)
    83  		}}, {
    84  		"restart, unit status is red, amber status not yet triggered",
    85  		meterstatus.WaitingAmber,
    86  		"RED",
    87  		now,
    88  		coretesting.NewClock(now),
    89  		func(c *gc.C, amber, red <-chan time.Time) {
    90  			c.Check(amber, gc.IsNil)
    91  			c.Check(red, gc.NotNil)
    92  		}}, {
    93  		"restart, unit status is green, amber status trigger time passed",
    94  		meterstatus.WaitingAmber,
    95  		"GREEN",
    96  		now.Add(-(testAmberGracePeriod + fudge)),
    97  		coretesting.NewClock(now),
    98  		func(c *gc.C, amber, red <-chan time.Time) {
    99  			c.Check(amber, gc.NotNil)
   100  			c.Check(red, gc.NotNil)
   101  		}}, {
   102  		"restart, unit status is amber, amber status trigger time passed",
   103  		meterstatus.WaitingAmber,
   104  		"AMBER",
   105  		now.Add(-(testAmberGracePeriod + fudge)),
   106  		coretesting.NewClock(now),
   107  		func(c *gc.C, amber, red <-chan time.Time) {
   108  			c.Check(amber, gc.NotNil)
   109  			c.Check(red, gc.NotNil)
   110  		}}, {
   111  		"restart, unit status is red, amber status trigger time passed",
   112  		meterstatus.WaitingAmber,
   113  		"RED",
   114  		now.Add(-(testAmberGracePeriod + fudge)),
   115  		coretesting.NewClock(now),
   116  		func(c *gc.C, amber, red <-chan time.Time) {
   117  			c.Check(amber, gc.IsNil)
   118  			c.Check(red, gc.NotNil)
   119  		}}, {
   120  		"restart, unit status is amber, amber status has been triggered",
   121  		meterstatus.WaitingRed,
   122  		"AMBER",
   123  		now.Add(-(testAmberGracePeriod + fudge)),
   124  		coretesting.NewClock(now),
   125  		func(c *gc.C, amber, red <-chan time.Time) {
   126  			c.Check(amber, gc.IsNil)
   127  			c.Check(red, gc.NotNil)
   128  		}}, {
   129  		"restart, unit status is amber, red status trigger time has passed",
   130  		meterstatus.WaitingRed,
   131  		"AMBER",
   132  		now.Add(-(testRedGracePeriod + fudge)),
   133  		coretesting.NewClock(now),
   134  		func(c *gc.C, amber, red <-chan time.Time) {
   135  			c.Check(amber, gc.IsNil)
   136  			c.Check(red, gc.NotNil)
   137  		}}, {
   138  		"restart, unit status is red, red status trigger time has passed",
   139  		meterstatus.WaitingRed,
   140  		"RED",
   141  		now.Add(-(testRedGracePeriod + fudge)),
   142  		coretesting.NewClock(now),
   143  		func(c *gc.C, amber, red <-chan time.Time) {
   144  			c.Check(amber, gc.IsNil)
   145  			c.Check(red, gc.NotNil)
   146  		}}, {
   147  		"restart, unit status is red, red status has been triggered",
   148  		meterstatus.Done,
   149  		"RED",
   150  		now.Add(-(testRedGracePeriod + fudge)),
   151  		coretesting.NewClock(now),
   152  		func(c *gc.C, amber, red <-chan time.Time) {
   153  			c.Check(amber, gc.IsNil)
   154  			c.Check(red, gc.IsNil)
   155  		}}}
   156  
   157  	for i, test := range tests {
   158  		c.Logf("%d: %s", i, test.description)
   159  		signalAmber, signalRed := meterstatus.GetTriggers(test.worker, test.status, test.disconnected, test.now, testAmberGracePeriod, testRedGracePeriod)
   160  		test.check(c, signalAmber, signalRed)
   161  	}
   162  }