github.com/mattyw/juju@v0.0.0-20140610034352-732aecd63861/state/apiserver/usermanager/usermanager_test.go (about)

     1  // Copyright 2014 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package usermanager_test
     5  
     6  import (
     7  	gc "launchpad.net/gocheck"
     8  
     9  	jujutesting "github.com/juju/juju/juju/testing"
    10  	"github.com/juju/juju/state/api/params"
    11  	apiservertesting "github.com/juju/juju/state/apiserver/testing"
    12  	"github.com/juju/juju/state/apiserver/usermanager"
    13  )
    14  
    15  type userManagerSuite struct {
    16  	jujutesting.JujuConnSuite
    17  
    18  	usermanager *usermanager.UserManagerAPI
    19  	authorizer  apiservertesting.FakeAuthorizer
    20  }
    21  
    22  var _ = gc.Suite(&userManagerSuite{})
    23  
    24  func (s *userManagerSuite) SetUpTest(c *gc.C) {
    25  	s.JujuConnSuite.SetUpTest(c)
    26  
    27  	s.authorizer = apiservertesting.FakeAuthorizer{
    28  		Tag:      "user-admin",
    29  		LoggedIn: true,
    30  		Client:   true,
    31  	}
    32  
    33  	var err error
    34  	s.usermanager, err = usermanager.NewUserManagerAPI(s.State, s.authorizer)
    35  	c.Assert(err, gc.IsNil)
    36  }
    37  
    38  func (s *userManagerSuite) TestNewUserManagerAPIRefusesNonClient(c *gc.C) {
    39  	anAuthoriser := s.authorizer
    40  	anAuthoriser.Client = false
    41  	endPoint, err := usermanager.NewUserManagerAPI(s.State, anAuthoriser)
    42  	c.Assert(endPoint, gc.IsNil)
    43  	c.Assert(err, gc.ErrorMatches, "permission denied")
    44  }
    45  
    46  func (s *userManagerSuite) TestAddUser(c *gc.C) {
    47  	args := params.ModifyUsers{
    48  		Changes: []params.ModifyUser{{
    49  			Username:    "foobar",
    50  			DisplayName: "Foo Bar",
    51  			Password:    "password",
    52  		}}}
    53  
    54  	result, err := s.usermanager.AddUser(args)
    55  	// Check that the call is succesful
    56  	c.Assert(err, gc.IsNil)
    57  	c.Assert(result.Results, gc.HasLen, 1)
    58  	c.Assert(result.Results[0], gc.DeepEquals, params.ErrorResult{Error: nil})
    59  	// Check that the call results in a new user being created
    60  	user, err := s.State.User("foobar")
    61  	c.Assert(err, gc.IsNil)
    62  	c.Assert(user, gc.NotNil)
    63  	c.Assert(user.Name(), gc.Equals, "foobar")
    64  	c.Assert(user.DisplayName(), gc.Equals, "Foo Bar")
    65  }
    66  
    67  func (s *userManagerSuite) TestRemoveUser(c *gc.C) {
    68  	args := params.ModifyUsers{
    69  		Changes: []params.ModifyUser{{
    70  			Username:    "foobar",
    71  			DisplayName: "Foo Bar",
    72  			Password:    "password",
    73  		}}}
    74  	removeArg := params.Entity{
    75  		Tag: "foobar",
    76  	}
    77  	removeArgs := params.Entities{Entities: []params.Entity{removeArg}}
    78  	_, err := s.usermanager.AddUser(args)
    79  	c.Assert(err, gc.IsNil)
    80  	user, err := s.State.User("foobar")
    81  	c.Assert(user.IsDeactivated(), gc.Equals, false) // The user should be active
    82  
    83  	result, err := s.usermanager.RemoveUser(removeArgs)
    84  	c.Assert(err, gc.IsNil)
    85  	c.Assert(result, gc.DeepEquals, params.ErrorResults{Results: []params.ErrorResult{params.ErrorResult{Error: nil}}})
    86  	user, err = s.State.User("foobar")
    87  	c.Assert(err, gc.IsNil)
    88  	// Removal makes the user in active
    89  	c.Assert(user.IsDeactivated(), gc.Equals, true)
    90  	c.Assert(user.PasswordValid(args.Changes[0].Password), gc.Equals, false)
    91  }
    92  
    93  // Since removing a user just deacitvates them you cannot add a user
    94  // that has been previously been removed
    95  // TODO(mattyw) 2014-03-07 bug #1288745
    96  func (s *userManagerSuite) TestCannotAddRemoveAdd(c *gc.C) {
    97  	removeArg := params.Entity{
    98  		Tag: "foobar",
    99  	}
   100  	args := params.ModifyUsers{
   101  		Changes: []params.ModifyUser{{
   102  			Username:    "foobar",
   103  			DisplayName: "Foo Bar",
   104  			Password:    "password",
   105  		}}}
   106  	removeArgs := params.Entities{Entities: []params.Entity{removeArg}}
   107  	_, err := s.usermanager.AddUser(args)
   108  	c.Assert(err, gc.IsNil)
   109  
   110  	_, err = s.usermanager.RemoveUser(removeArgs)
   111  	c.Assert(err, gc.IsNil)
   112  	_, err = s.State.User("addremove")
   113  	result, err := s.usermanager.AddUser(args)
   114  	expectedError := apiservertesting.ServerError("failed to create user: user already exists")
   115  	c.Assert(result, gc.DeepEquals, params.ErrorResults{
   116  		Results: []params.ErrorResult{
   117  			params.ErrorResult{expectedError}}})
   118  }