launchpad.net/~rogpeppe/juju-core/500-errgo-fix@v0.0.0-20140213181702-000000002356/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  }