github.com/mwhudson/juju@v0.0.0-20160512215208-90ff01f3497f/state/status_util_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package state_test 5 6 import ( 7 "runtime" 8 "time" 9 10 jc "github.com/juju/testing/checkers" 11 gc "gopkg.in/check.v1" 12 13 "github.com/juju/juju/state" 14 "github.com/juju/juju/status" 15 ) 16 17 type statusHistoryFunc func(int) ([]status.StatusInfo, error) 18 19 type statusSetter interface { 20 SetStatus(status.Status, string, map[string]interface{}) error 21 } 22 23 func primeStatusHistory(c *gc.C, entity statusSetter, statusVal status.Status, count int, nextData func(int) map[string]interface{}) { 24 info := "" 25 for i := 0; i < count; i++ { 26 c.Logf("setting status for %v", entity) 27 data := nextData(i) 28 err := entity.SetStatus(statusVal, info, data) 29 c.Assert(err, jc.ErrorIsNil) 30 if runtime.GOOS == "windows" { 31 // The default clock tick on Windows is 15.6 ms. 32 time.Sleep(20 * time.Millisecond) 33 } 34 } 35 } 36 37 func checkInitialWorkloadStatus(c *gc.C, statusInfo status.StatusInfo) { 38 c.Check(statusInfo.Status, gc.Equals, status.StatusUnknown) 39 c.Check(statusInfo.Message, gc.Equals, "Waiting for agent initialization to finish") 40 c.Check(statusInfo.Data, gc.HasLen, 0) 41 c.Check(statusInfo.Since, gc.NotNil) 42 } 43 44 func primeUnitStatusHistory(c *gc.C, unit *state.Unit, count int) { 45 primeStatusHistory(c, unit, status.StatusActive, count, func(i int) map[string]interface{} { 46 return map[string]interface{}{"$foo": i} 47 }) 48 } 49 50 func checkPrimedUnitStatus(c *gc.C, statusInfo status.StatusInfo, expect int) { 51 c.Check(statusInfo.Status, gc.Equals, status.StatusActive) 52 c.Check(statusInfo.Message, gc.Equals, "") 53 c.Check(statusInfo.Data, jc.DeepEquals, map[string]interface{}{"$foo": expect}) 54 c.Check(statusInfo.Since, gc.NotNil) 55 } 56 57 func checkInitialUnitAgentStatus(c *gc.C, statusInfo status.StatusInfo) { 58 c.Check(statusInfo.Status, gc.Equals, status.StatusAllocating) 59 c.Check(statusInfo.Message, gc.Equals, "") 60 c.Check(statusInfo.Data, gc.HasLen, 0) 61 c.Assert(statusInfo.Since, gc.NotNil) 62 } 63 64 func primeUnitAgentStatusHistory(c *gc.C, agent *state.UnitAgent, count int) { 65 primeStatusHistory(c, agent, status.StatusExecuting, count, func(i int) map[string]interface{} { 66 return map[string]interface{}{"$bar": i} 67 }) 68 } 69 70 func checkPrimedUnitAgentStatus(c *gc.C, statusInfo status.StatusInfo, expect int) { 71 c.Check(statusInfo.Status, gc.Equals, status.StatusExecuting) 72 c.Check(statusInfo.Message, gc.Equals, "") 73 c.Check(statusInfo.Data, jc.DeepEquals, map[string]interface{}{"$bar": expect}) 74 c.Check(statusInfo.Since, gc.NotNil) 75 }