github.com/cloudbase/juju-core@v0.0.0-20140504232958-a7271ac7912f/state/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  	gc "launchpad.net/gocheck"
     8  
     9  	jujutesting "launchpad.net/juju-core/juju/testing"
    10  	"launchpad.net/juju-core/state"
    11  	"launchpad.net/juju-core/state/api"
    12  	"launchpad.net/juju-core/state/api/keyupdater"
    13  	"launchpad.net/juju-core/state/testing"
    14  )
    15  
    16  type keyupdaterSuite struct {
    17  	jujutesting.JujuConnSuite
    18  
    19  	// These are raw State objects. Use them for setup and assertions, but
    20  	// should never be touched by the API calls themselves
    21  	rawMachine *state.Machine
    22  
    23  	keyupdater *keyupdater.State
    24  }
    25  
    26  var _ = gc.Suite(&keyupdaterSuite{})
    27  
    28  func (s *keyupdaterSuite) SetUpTest(c *gc.C) {
    29  	s.JujuConnSuite.SetUpTest(c)
    30  	var stateAPI *api.State
    31  	stateAPI, s.rawMachine = s.OpenAPIAsNewMachine(c)
    32  	c.Assert(stateAPI, gc.NotNil)
    33  	s.keyupdater = stateAPI.KeyUpdater()
    34  	c.Assert(s.keyupdater, gc.NotNil)
    35  }
    36  
    37  func (s *keyupdaterSuite) TestAuthorisedKeysNoSuchMachine(c *gc.C) {
    38  	_, err := s.keyupdater.AuthorisedKeys("machine-42")
    39  	c.Assert(err, gc.ErrorMatches, "permission denied")
    40  }
    41  
    42  func (s *keyupdaterSuite) TestAuthorisedKeysForbiddenMachine(c *gc.C) {
    43  	m, err := s.State.AddMachine("quantal", state.JobHostUnits)
    44  	c.Assert(err, gc.IsNil)
    45  	_, err = s.keyupdater.AuthorisedKeys(m.Tag())
    46  	c.Assert(err, gc.ErrorMatches, "permission denied")
    47  }
    48  
    49  func (s *keyupdaterSuite) TestAuthorisedKeys(c *gc.C) {
    50  	s.setAuthorisedKeys(c, "key1\nkey2")
    51  	keys, err := s.keyupdater.AuthorisedKeys(s.rawMachine.Tag())
    52  	c.Assert(err, gc.IsNil)
    53  	c.Assert(keys, gc.DeepEquals, []string{"key1", "key2"})
    54  }
    55  
    56  func (s *keyupdaterSuite) setAuthorisedKeys(c *gc.C, keys string) {
    57  	err := testing.UpdateConfig(s.BackingState, map[string]interface{}{"authorized-keys": keys})
    58  	c.Assert(err, gc.IsNil)
    59  }
    60  
    61  func (s *keyupdaterSuite) TestWatchAuthorisedKeys(c *gc.C) {
    62  	watcher, err := s.keyupdater.WatchAuthorisedKeys(s.rawMachine.Tag())
    63  	c.Assert(err, gc.IsNil)
    64  	defer testing.AssertStop(c, watcher)
    65  	wc := testing.NewNotifyWatcherC(c, s.BackingState, watcher)
    66  	// Initial event
    67  	wc.AssertOneChange()
    68  
    69  	s.setAuthorisedKeys(c, "key1\nkey2")
    70  	// One change noticing the new version
    71  	wc.AssertOneChange()
    72  	// Setting the version to the same value doesn't trigger a change
    73  	s.setAuthorisedKeys(c, "key1\nkey2")
    74  	wc.AssertNoChange()
    75  
    76  	s.setAuthorisedKeys(c, "key1\nkey2\nkey3")
    77  	wc.AssertOneChange()
    78  	testing.AssertStop(c, watcher)
    79  	wc.AssertClosed()
    80  }