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  }