github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/state/status_history_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 jc "github.com/juju/testing/checkers" 8 gc "gopkg.in/check.v1" 9 10 "github.com/juju/juju/state" 11 statetesting "github.com/juju/juju/state/testing" 12 "github.com/juju/juju/testing/factory" 13 ) 14 15 type StatusHistorySuite struct { 16 statetesting.StateSuite 17 } 18 19 var _ = gc.Suite(&StatusHistorySuite{}) 20 21 func (s *StatusHistorySuite) TestPruneStatusHistory(c *gc.C) { 22 23 // NOTE: the behaviour is bad, and the test is ugly. I'm just verifying 24 // the existing logic here. 25 // 26 // If you get the opportunity to fix this, you'll want a better shape of 27 // test (that injects a usable clock dependency, apart from anything else, 28 // and checks that we do our best to maintain a usable span of history 29 // rather than an arbitrary limit per entity. And isn't O(N) on status 30 // count in the model). 31 32 const count = 3 33 units := make([]*state.Unit, count) 34 agents := make([]*state.UnitAgent, count) 35 service := s.Factory.MakeService(c, nil) 36 for i := 0; i < count; i++ { 37 units[i] = s.Factory.MakeUnit(c, &factory.UnitParams{Service: service}) 38 agents[i] = units[i].Agent() 39 } 40 41 primeUnitStatusHistory(c, units[0], 10) 42 primeUnitStatusHistory(c, units[1], 50) 43 primeUnitStatusHistory(c, units[2], 100) 44 primeUnitAgentStatusHistory(c, agents[0], 100) 45 primeUnitAgentStatusHistory(c, agents[1], 50) 46 primeUnitAgentStatusHistory(c, agents[2], 10) 47 48 err := state.PruneStatusHistory(s.State, 30) 49 c.Assert(err, jc.ErrorIsNil) 50 51 history, err := units[0].StatusHistory(50) 52 c.Assert(err, jc.ErrorIsNil) 53 c.Assert(history, gc.HasLen, 11) 54 checkInitialWorkloadStatus(c, history[10]) 55 for i, statusInfo := range history[:10] { 56 checkPrimedUnitStatus(c, statusInfo, 9-i) 57 } 58 59 history, err = units[1].StatusHistory(50) 60 c.Assert(err, jc.ErrorIsNil) 61 c.Assert(history, gc.HasLen, 30) 62 for i, statusInfo := range history { 63 checkPrimedUnitStatus(c, statusInfo, 49-i) 64 } 65 66 history, err = units[2].StatusHistory(50) 67 c.Assert(err, jc.ErrorIsNil) 68 c.Assert(history, gc.HasLen, 30) 69 for i, statusInfo := range history { 70 checkPrimedUnitStatus(c, statusInfo, 99-i) 71 } 72 73 history, err = agents[0].StatusHistory(50) 74 c.Assert(err, jc.ErrorIsNil) 75 c.Assert(history, gc.HasLen, 30) 76 for i, statusInfo := range history { 77 checkPrimedUnitAgentStatus(c, statusInfo, 99-i) 78 } 79 80 history, err = agents[1].StatusHistory(50) 81 c.Assert(err, jc.ErrorIsNil) 82 c.Assert(history, gc.HasLen, 30) 83 for i, statusInfo := range history { 84 checkPrimedUnitAgentStatus(c, statusInfo, 49-i) 85 } 86 87 history, err = agents[2].StatusHistory(50) 88 c.Assert(err, jc.ErrorIsNil) 89 c.Assert(history, gc.HasLen, 11) 90 checkInitialUnitAgentStatus(c, history[10]) 91 for i, statusInfo := range history[:10] { 92 checkPrimedUnitAgentStatus(c, statusInfo, 9-i) 93 } 94 }