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  }