1
// Copyright 2015 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
7
jc "github.com/juju/testing/checkers"
10
"github.com/juju/juju/state"
11
statetesting "github.com/juju/juju/state/testing"
14
type StatusModelSuite struct {
15
statetesting.StateSuite
18
var _ = gc.Suite(&StatusModelSuite{})
20
func (s *StatusModelSuite) TestTranslateLegacyAgentState(c *gc.C) {
21
for i, test := range []struct {
22
agentStatus state.Status
23
workloadStatus state.Status
24
workloadMessage string
27
agentStatus: state.StatusAllocating,
28
expected: state.StatusPending,
30
agentStatus: state.StatusError,
31
expected: state.StatusError,
33
agentStatus: state.StatusIdle,
34
workloadStatus: state.StatusMaintenance,
35
expected: state.StatusPending,
36
workloadMessage: "installing charm software",
38
agentStatus: state.StatusIdle,
39
workloadStatus: state.StatusMaintenance,
40
expected: state.StatusStarted,
41
workloadMessage: "backing up",
43
agentStatus: state.StatusIdle,
44
workloadStatus: state.StatusTerminated,
45
expected: state.StatusStopped,
47
agentStatus: state.StatusIdle,
48
workloadStatus: state.StatusBlocked,
49
expected: state.StatusStarted,
52
legacy, ok := state.TranslateToLegacyAgentState(test.agentStatus, test.workloadStatus, test.workloadMessage)
53
c.Check(ok, jc.IsTrue)
54
c.Check(legacy, gc.Equals, test.expected)
58
func (s *StatusModelSuite) TestUnitAgentStatusDocValidation(c *gc.C) {
59
unit := s.Factory.MakeUnit(c, nil)
60
for i, test := range []struct {
65
status: state.StatusPending,
66
err: `cannot set invalid status "pending"`,
68
status: state.StatusDown,
69
err: `cannot set invalid status "down"`,
71
status: state.StatusStarted,
72
err: `cannot set invalid status "started"`,
74
status: state.StatusStopped,
75
err: `cannot set invalid status "stopped"`,
77
status: state.StatusAllocating,
78
info: state.StorageReadyMessage,
80
status: state.StatusAllocating,
81
info: state.PreparingStorageMessage,
83
status: state.StatusAllocating,
84
info: "an unexpected or invalid message",
85
err: `cannot set status "allocating"`,
87
status: state.StatusLost,
88
info: state.StorageReadyMessage,
89
err: `cannot set status "lost"`,
91
status: state.StatusLost,
92
info: state.PreparingStorageMessage,
93
err: `cannot set status "lost"`,
95
status: state.StatusError,
96
err: `cannot set status "error" without info`,
98
status: state.StatusError,
99
info: "some error info",
101
status: state.Status("bogus"),
102
err: `cannot set invalid status "bogus"`,
105
err := unit.SetAgentStatus(test.status, test.info, nil)
107
c.Check(err, gc.ErrorMatches, test.err)
109
c.Check(err, jc.ErrorIsNil)