github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/api/keyupdater/authorisedkeys_test.go (about)

     1  // Copyright 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package keyupdater_test
     5  
     6  import (
     7  	jc "github.com/juju/testing/checkers"
     8  	gc "gopkg.in/check.v1"
     9  	"gopkg.in/juju/names.v2"
    10  
    11  	"github.com/juju/juju/api"
    12  	"github.com/juju/juju/api/keyupdater"
    13  	jujutesting "github.com/juju/juju/juju/testing"
    14  	"github.com/juju/juju/state"
    15  	"github.com/juju/juju/watcher/watchertest"
    16  )
    17  
    18  type keyupdaterSuite struct {
    19  	jujutesting.JujuConnSuite
    20  
    21  	// These are raw State objects. Use them for setup and assertions, but
    22  	// should never be touched by the API calls themselves
    23  	rawMachine *state.Machine
    24  
    25  	keyupdater *keyupdater.State
    26  }
    27  
    28  var _ = gc.Suite(&keyupdaterSuite{})
    29  
    30  func (s *keyupdaterSuite) SetUpTest(c *gc.C) {
    31  	s.JujuConnSuite.SetUpTest(c)
    32  	var stateAPI api.Connection
    33  	stateAPI, s.rawMachine = s.OpenAPIAsNewMachine(c)
    34  	c.Assert(stateAPI, gc.NotNil)
    35  	s.keyupdater = keyupdater.NewState(stateAPI)
    36  	c.Assert(s.keyupdater, gc.NotNil)
    37  }
    38  
    39  func (s *keyupdaterSuite) TestAuthorisedKeysNoSuchMachine(c *gc.C) {
    40  	_, err := s.keyupdater.AuthorisedKeys(names.NewMachineTag("42"))
    41  	c.Assert(err, gc.ErrorMatches, "permission denied")
    42  }
    43  
    44  func (s *keyupdaterSuite) TestAuthorisedKeysForbiddenMachine(c *gc.C) {
    45  	m, err := s.State.AddMachine("quantal", state.JobHostUnits)
    46  	c.Assert(err, jc.ErrorIsNil)
    47  	_, err = s.keyupdater.AuthorisedKeys(m.Tag().(names.MachineTag))
    48  	c.Assert(err, gc.ErrorMatches, "permission denied")
    49  }
    50  
    51  func (s *keyupdaterSuite) TestAuthorisedKeys(c *gc.C) {
    52  	s.setAuthorisedKeys(c, "key1\nkey2")
    53  	keys, err := s.keyupdater.AuthorisedKeys(s.rawMachine.Tag().(names.MachineTag))
    54  	c.Assert(err, jc.ErrorIsNil)
    55  	c.Assert(keys, gc.DeepEquals, []string{"key1", "key2"})
    56  }
    57  
    58  func (s *keyupdaterSuite) setAuthorisedKeys(c *gc.C, keys string) {
    59  	err := s.BackingState.UpdateModelConfig(map[string]interface{}{"authorized-keys": keys}, nil, nil)
    60  	c.Assert(err, jc.ErrorIsNil)
    61  }
    62  
    63  func (s *keyupdaterSuite) TestWatchAuthorisedKeys(c *gc.C) {
    64  	watcher, err := s.keyupdater.WatchAuthorisedKeys(s.rawMachine.Tag().(names.MachineTag))
    65  	c.Assert(err, jc.ErrorIsNil)
    66  	wc := watchertest.NewNotifyWatcherC(c, watcher, s.BackingState.StartSync)
    67  	defer wc.AssertStops()
    68  
    69  	// Initial event
    70  	wc.AssertOneChange()
    71  
    72  	s.setAuthorisedKeys(c, "key1\nkey2")
    73  	// One change noticing the new version
    74  	wc.AssertOneChange()
    75  	// Setting the version to the same value doesn't trigger a change
    76  	s.setAuthorisedKeys(c, "key1\nkey2")
    77  	wc.AssertNoChange()
    78  
    79  	s.setAuthorisedKeys(c, "key1\nkey2\nkey3")
    80  	wc.AssertOneChange()
    81  }