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  }