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 }