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 }