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