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 }