github.com/altoros/juju-vmware@v0.0.0-20150312064031-f19ae857ccca/cmd/juju/user_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  	"fmt"
     8  
     9  	"github.com/juju/cmd"
    10  	"github.com/juju/juju/testing/factory"
    11  	"github.com/juju/names"
    12  	jc "github.com/juju/testing/checkers"
    13  	gc "gopkg.in/check.v1"
    14  
    15  	jujutesting "github.com/juju/juju/juju/testing"
    16  	"github.com/juju/juju/testing"
    17  )
    18  
    19  // UserSuite tests the connectivity of all the user subcommands. These tests
    20  // go from the command line, api client, api server, db. The db changes are
    21  // then checked.  Only one test for each command is done here to check
    22  // connectivity.  Exhaustive tests are at each layer.
    23  type UserSuite struct {
    24  	jujutesting.JujuConnSuite
    25  }
    26  
    27  var _ = gc.Suite(&UserSuite{})
    28  
    29  func (s *UserSuite) RunUserCommand(c *gc.C, commands ...string) (*cmd.Context, error) {
    30  	args := []string{"user"}
    31  	args = append(args, commands...)
    32  	context := testing.Context(c)
    33  	juju := NewJujuCommand(context)
    34  	if err := testing.InitCommand(juju, args); err != nil {
    35  		return context, err
    36  	}
    37  	return context, juju.Run(context)
    38  }
    39  
    40  func (s *UserSuite) TestUserAdd(c *gc.C) {
    41  	ctx, err := s.RunUserCommand(c, "add", "test", "--generate")
    42  	c.Assert(err, jc.ErrorIsNil)
    43  	c.Assert(testing.Stdout(ctx), jc.HasPrefix, `user "test" added`)
    44  	user, err := s.State.User(names.NewLocalUserTag("test"))
    45  	c.Assert(err, jc.ErrorIsNil)
    46  	c.Assert(user.IsDisabled(), jc.IsFalse)
    47  }
    48  
    49  func (s *UserSuite) TestUserChangePassword(c *gc.C) {
    50  	user, err := s.State.User(s.AdminUserTag(c))
    51  	c.Assert(err, jc.ErrorIsNil)
    52  	c.Assert(user.PasswordValid("dummy-secret"), jc.IsTrue)
    53  	_, err = s.RunUserCommand(c, "change-password", "--generate")
    54  	c.Assert(err, jc.ErrorIsNil)
    55  	user.Refresh()
    56  	c.Assert(err, jc.ErrorIsNil)
    57  	c.Assert(user.PasswordValid("dummy-secret"), jc.IsFalse)
    58  }
    59  
    60  func (s *UserSuite) TestUserInfo(c *gc.C) {
    61  	user, err := s.State.User(s.AdminUserTag(c))
    62  	c.Assert(err, jc.ErrorIsNil)
    63  	c.Assert(user.PasswordValid("dummy-secret"), jc.IsTrue)
    64  	ctx, err := s.RunUserCommand(c, "info")
    65  	c.Assert(err, jc.ErrorIsNil)
    66  	c.Assert(testing.Stdout(ctx), jc.Contains, "user-name: dummy-admin")
    67  }
    68  
    69  func (s *UserSuite) TestUserDisable(c *gc.C) {
    70  	user := s.Factory.MakeUser(c, &factory.UserParams{Name: "barbara"})
    71  	_, err := s.RunUserCommand(c, "disable", "barbara")
    72  	c.Assert(err, jc.ErrorIsNil)
    73  	user.Refresh()
    74  	c.Assert(err, jc.ErrorIsNil)
    75  	c.Assert(user.IsDisabled(), jc.IsTrue)
    76  }
    77  
    78  func (s *UserSuite) TestUserEnable(c *gc.C) {
    79  	user := s.Factory.MakeUser(c, &factory.UserParams{Name: "barbara", Disabled: true})
    80  	_, err := s.RunUserCommand(c, "enable", "barbara")
    81  	c.Assert(err, jc.ErrorIsNil)
    82  	user.Refresh()
    83  	c.Assert(err, jc.ErrorIsNil)
    84  	c.Assert(user.IsDisabled(), jc.IsFalse)
    85  }
    86  
    87  func (s *UserSuite) TestUserList(c *gc.C) {
    88  	ctx, err := s.RunUserCommand(c, "list")
    89  	c.Assert(err, jc.ErrorIsNil)
    90  	periodPattern := `(just now|\d+ \S+ ago)`
    91  	expected := fmt.Sprintf(`
    92  NAME\s+DISPLAY NAME\s+DATE CREATED\s+LAST CONNECTION
    93  dummy-admin\s+dummy-admin\s+%s\s+%s
    94  
    95  `[1:], periodPattern, periodPattern)
    96  	c.Assert(testing.Stdout(ctx), gc.Matches, expected)
    97  }