github.com/rogpeppe/juju@v0.0.0-20140613142852-6337964b789e/cmd/juju/resolved_test.go (about) 1 // Copyright 2012, 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package main 5 6 import ( 7 charmtesting "github.com/juju/charm/testing" 8 gc "launchpad.net/gocheck" 9 10 "github.com/juju/juju/cmd/envcmd" 11 jujutesting "github.com/juju/juju/juju/testing" 12 "github.com/juju/juju/state" 13 "github.com/juju/juju/state/api/params" 14 "github.com/juju/juju/testing" 15 ) 16 17 type ResolvedSuite struct { 18 jujutesting.RepoSuite 19 } 20 21 var _ = gc.Suite(&ResolvedSuite{}) 22 23 func runResolved(c *gc.C, args []string) error { 24 _, err := testing.RunCommand(c, envcmd.Wrap(&ResolvedCommand{}), args...) 25 return err 26 } 27 28 var resolvedTests = []struct { 29 args []string 30 err string 31 unit string 32 mode state.ResolvedMode 33 }{ 34 { 35 err: `no unit specified`, 36 }, { 37 args: []string{"jeremy-fisher"}, 38 err: `invalid unit name "jeremy-fisher"`, 39 }, { 40 args: []string{"jeremy-fisher/99"}, 41 err: `unit "jeremy-fisher/99" not found`, 42 }, { 43 args: []string{"dummy/0"}, 44 err: `unit "dummy/0" is not in an error state`, 45 unit: "dummy/0", 46 mode: state.ResolvedNone, 47 }, { 48 args: []string{"dummy/1", "--retry"}, 49 err: `unit "dummy/1" is not in an error state`, 50 unit: "dummy/1", 51 mode: state.ResolvedNone, 52 }, { 53 args: []string{"dummy/2"}, 54 unit: "dummy/2", 55 mode: state.ResolvedNoHooks, 56 }, { 57 args: []string{"dummy/2", "--retry"}, 58 err: `cannot set resolved mode for unit "dummy/2": already resolved`, 59 unit: "dummy/2", 60 mode: state.ResolvedNoHooks, 61 }, { 62 args: []string{"dummy/3", "--retry"}, 63 unit: "dummy/3", 64 mode: state.ResolvedRetryHooks, 65 }, { 66 args: []string{"dummy/3"}, 67 err: `cannot set resolved mode for unit "dummy/3": already resolved`, 68 unit: "dummy/3", 69 mode: state.ResolvedRetryHooks, 70 }, { 71 args: []string{"dummy/4", "roflcopter"}, 72 err: `unrecognized args: \["roflcopter"\]`, 73 }, 74 } 75 76 func (s *ResolvedSuite) TestResolved(c *gc.C) { 77 charmtesting.Charms.BundlePath(s.SeriesPath, "dummy") 78 err := runDeploy(c, "-n", "5", "local:dummy", "dummy") 79 c.Assert(err, gc.IsNil) 80 81 for _, name := range []string{"dummy/2", "dummy/3", "dummy/4"} { 82 u, err := s.State.Unit(name) 83 c.Assert(err, gc.IsNil) 84 err = u.SetStatus(params.StatusError, "lol borken", nil) 85 c.Assert(err, gc.IsNil) 86 } 87 88 for i, t := range resolvedTests { 89 c.Logf("test %d: %v", i, t.args) 90 err := runResolved(c, t.args) 91 if t.err != "" { 92 c.Assert(err, gc.ErrorMatches, t.err) 93 } else { 94 c.Assert(err, gc.IsNil) 95 } 96 if t.unit != "" { 97 unit, err := s.State.Unit(t.unit) 98 c.Assert(err, gc.IsNil) 99 c.Assert(unit.Resolved(), gc.Equals, t.mode) 100 } 101 } 102 }