github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/apiserver/stateauthenticator/authenticator_test.go (about)

     1  // Copyright 2014-2018 Canonical Ltd. All rights reserved.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package stateauthenticator_test
     5  
     6  import (
     7  	"github.com/juju/clock"
     8  	jc "github.com/juju/testing/checkers"
     9  	gc "gopkg.in/check.v1"
    10  	"gopkg.in/juju/names.v2"
    11  
    12  	"github.com/juju/juju/apiserver/authentication"
    13  	"github.com/juju/juju/apiserver/params"
    14  	"github.com/juju/juju/apiserver/stateauthenticator"
    15  	"github.com/juju/juju/state"
    16  	statetesting "github.com/juju/juju/state/testing"
    17  	"github.com/juju/juju/testing/factory"
    18  )
    19  
    20  // TODO update these tests (moved from apiserver) to test
    21  // via the public interface, and then get rid of export_test.go.
    22  type agentAuthenticatorSuite struct {
    23  	statetesting.StateSuite
    24  	authenticator *stateauthenticator.Authenticator
    25  }
    26  
    27  var _ = gc.Suite(&agentAuthenticatorSuite{})
    28  
    29  func (s *agentAuthenticatorSuite) SetUpTest(c *gc.C) {
    30  	s.StateSuite.SetUpTest(c)
    31  	authenticator, err := stateauthenticator.NewAuthenticator(s.StatePool, clock.WallClock)
    32  	c.Assert(err, jc.ErrorIsNil)
    33  	s.authenticator = authenticator
    34  }
    35  
    36  func (s *agentAuthenticatorSuite) TestAuthenticatorForTag(c *gc.C) {
    37  	user := s.Factory.MakeUser(c, &factory.UserParams{Password: "password"})
    38  
    39  	authenticator, err := stateauthenticator.EntityAuthenticator(s.authenticator, user.Tag())
    40  	c.Assert(err, jc.ErrorIsNil)
    41  	c.Assert(authenticator, gc.NotNil)
    42  	userFinder := userFinder{user}
    43  
    44  	entity, err := authenticator.Authenticate(userFinder, user.Tag(), params.LoginRequest{
    45  		Credentials: "password",
    46  		Nonce:       "nonce",
    47  	})
    48  	c.Assert(err, jc.ErrorIsNil)
    49  	c.Assert(entity, gc.DeepEquals, user)
    50  }
    51  
    52  func (s *agentAuthenticatorSuite) TestMachineGetsAgentAuthenticator(c *gc.C) {
    53  	authenticator, err := stateauthenticator.EntityAuthenticator(s.authenticator, names.NewMachineTag("0"))
    54  	c.Assert(err, jc.ErrorIsNil)
    55  	_, ok := authenticator.(*authentication.AgentAuthenticator)
    56  	c.Assert(ok, jc.IsTrue)
    57  }
    58  
    59  func (s *agentAuthenticatorSuite) TestUnitGetsAgentAuthenticator(c *gc.C) {
    60  	authenticator, err := stateauthenticator.EntityAuthenticator(s.authenticator, names.NewUnitTag("wordpress/0"))
    61  	c.Assert(err, jc.ErrorIsNil)
    62  	_, ok := authenticator.(*authentication.AgentAuthenticator)
    63  	c.Assert(ok, jc.IsTrue)
    64  }
    65  
    66  func (s *agentAuthenticatorSuite) TestNotSupportedTag(c *gc.C) {
    67  	authenticator, err := stateauthenticator.EntityAuthenticator(s.authenticator, names.NewCloudTag("not-support"))
    68  	c.Assert(err, gc.ErrorMatches, "unexpected login entity tag: invalid request")
    69  	c.Assert(authenticator, gc.IsNil)
    70  }
    71  
    72  type userFinder struct {
    73  	user state.Entity
    74  }
    75  
    76  func (u userFinder) FindEntity(tag names.Tag) (state.Entity, error) {
    77  	return u.user, nil
    78  }