github.com/rogpeppe/juju@v0.0.0-20140613142852-6337964b789e/cmd/juju/retryprovisioning_test.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package main 5 6 import ( 7 "strings" 8 9 jc "github.com/juju/testing/checkers" 10 gc "launchpad.net/gocheck" 11 12 "github.com/juju/juju/cmd/envcmd" 13 jujutesting "github.com/juju/juju/juju/testing" 14 "github.com/juju/juju/state" 15 "github.com/juju/juju/state/api/params" 16 "github.com/juju/juju/testing" 17 ) 18 19 type retryProvisioningSuite struct { 20 jujutesting.JujuConnSuite 21 } 22 23 var _ = gc.Suite(&retryProvisioningSuite{}) 24 25 var resolvedMachineTests = []struct { 26 args []string 27 err string 28 stdErr string 29 }{ 30 { 31 err: `no machine specified`, 32 }, { 33 args: []string{"jeremy-fisher"}, 34 err: `invalid machine "jeremy-fisher"`, 35 }, { 36 args: []string{"42"}, 37 stdErr: `cannot retry provisioning "machine-42": machine 42 not found`, 38 }, { 39 args: []string{"1"}, 40 stdErr: `cannot retry provisioning "machine-1": machine "machine-1" is not in an error state`, 41 }, { 42 args: []string{"0"}, 43 }, { 44 args: []string{"0", "1"}, 45 stdErr: `cannot retry provisioning "machine-1": machine "machine-1" is not in an error state`, 46 }, 47 } 48 49 func (s *retryProvisioningSuite) TestResolved(c *gc.C) { 50 m, err := s.State.AddOneMachine(state.MachineTemplate{ 51 Series: "quantal", 52 Jobs: []state.MachineJob{state.JobManageEnviron}, 53 }) 54 c.Assert(err, gc.IsNil) 55 err = m.SetStatus(params.StatusError, "broken", nil) 56 c.Assert(err, gc.IsNil) 57 _, err = s.State.AddOneMachine(state.MachineTemplate{ 58 Series: "quantal", 59 Jobs: []state.MachineJob{state.JobHostUnits}, 60 }) 61 c.Assert(err, gc.IsNil) 62 63 for i, t := range resolvedMachineTests { 64 c.Logf("test %d: %v", i, t.args) 65 context, err := testing.RunCommand(c, envcmd.Wrap(&RetryProvisioningCommand{}), t.args...) 66 if t.err != "" { 67 c.Check(err, gc.ErrorMatches, t.err) 68 continue 69 } else { 70 c.Check(err, gc.IsNil) 71 } 72 output := testing.Stderr(context) 73 stripped := strings.Replace(output, "\n", "", -1) 74 c.Check(stripped, gc.Equals, t.stdErr) 75 if t.args[0] == "0" { 76 status, info, data, err := m.Status() 77 c.Check(err, gc.IsNil) 78 c.Check(status, gc.Equals, params.StatusError) 79 c.Check(info, gc.Equals, "broken") 80 c.Check(data["transient"], jc.IsTrue) 81 } 82 } 83 }