github.com/mwhudson/juju@v0.0.0-20160512215208-90ff01f3497f/apiserver/adminv3_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package apiserver_test
     5  
     6  import (
     7  	"github.com/juju/errors"
     8  	"github.com/juju/names"
     9  	jc "github.com/juju/testing/checkers"
    10  	gc "gopkg.in/check.v1"
    11  
    12  	"github.com/juju/juju/api"
    13  	"github.com/juju/juju/apiserver"
    14  	"github.com/juju/juju/rpc"
    15  	"github.com/juju/juju/testing/factory"
    16  )
    17  
    18  type loginV3Suite struct {
    19  	loginSuite
    20  }
    21  
    22  var _ = gc.Suite(&loginV3Suite{
    23  	loginSuite{
    24  		baseLoginSuite{
    25  			setAdminApi: func(srv *apiserver.Server) {
    26  				apiserver.SetAdminApiVersions(srv, 3)
    27  			},
    28  		},
    29  	},
    30  })
    31  
    32  func (s *loginV3Suite) TestClientLoginToEnvironment(c *gc.C) {
    33  	_, cleanup := s.setupServerWithValidator(c, nil)
    34  	defer cleanup()
    35  
    36  	info := s.APIInfo(c)
    37  	apiState, err := api.Open(info, api.DialOpts{})
    38  	c.Assert(err, jc.ErrorIsNil)
    39  	defer apiState.Close()
    40  
    41  	client := apiState.Client()
    42  	_, err = client.GetModelConstraints()
    43  	c.Assert(err, jc.ErrorIsNil)
    44  }
    45  
    46  func (s *loginV3Suite) TestClientLoginToServer(c *gc.C) {
    47  	_, cleanup := s.setupServerWithValidator(c, nil)
    48  	defer cleanup()
    49  
    50  	info := s.APIInfo(c)
    51  	info.ModelTag = names.ModelTag{}
    52  	apiState, err := api.Open(info, api.DialOpts{})
    53  	c.Assert(err, jc.ErrorIsNil)
    54  	defer apiState.Close()
    55  
    56  	client := apiState.Client()
    57  	_, err = client.GetModelConstraints()
    58  	c.Assert(errors.Cause(err), gc.DeepEquals, &rpc.RequestError{
    59  		Message: `logged in to server, no model, "Client" not supported`,
    60  		Code:    "not supported",
    61  	})
    62  }
    63  
    64  func (s *loginV3Suite) TestClientLoginToServerNoAccessToControllerEnv(c *gc.C) {
    65  	_, cleanup := s.setupServerWithValidator(c, nil)
    66  	defer cleanup()
    67  
    68  	password := "shhh..."
    69  	user := s.Factory.MakeUser(c, &factory.UserParams{
    70  		NoModelUser: true,
    71  		Password:    password,
    72  	})
    73  
    74  	info := s.APIInfo(c)
    75  	info.Tag = user.Tag()
    76  	info.Password = password
    77  	info.ModelTag = names.ModelTag{}
    78  	apiState, err := api.Open(info, api.DialOpts{})
    79  	c.Assert(err, jc.ErrorIsNil)
    80  	defer apiState.Close()
    81  	// The user now has last login updated.
    82  	err = user.Refresh()
    83  	c.Assert(err, jc.ErrorIsNil)
    84  	lastLogin, err := user.LastLogin()
    85  	c.Assert(err, jc.ErrorIsNil)
    86  	c.Assert(lastLogin, gc.NotNil)
    87  }
    88  
    89  func (s *loginV3Suite) TestClientLoginToRootOldClient(c *gc.C) {
    90  	_, cleanup := s.setupServerWithValidator(c, nil)
    91  	defer cleanup()
    92  
    93  	info := s.APIInfo(c)
    94  	info.ModelTag = names.ModelTag{}
    95  	_, err := api.OpenWithVersion(info, api.DialOpts{}, 2)
    96  	c.Assert(err, gc.ErrorMatches, ".*this version of Juju does not support login from old clients.*")
    97  }