github.com/cloudbase/juju-core@v0.0.0-20140504232958-a7271ac7912f/state/api/agent/machine_test.go (about) 1 // Copyright 2012, 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package agent_test 5 6 import ( 7 "fmt" 8 stdtesting "testing" 9 10 gc "launchpad.net/gocheck" 11 12 "launchpad.net/juju-core/environs" 13 "launchpad.net/juju-core/errors" 14 "launchpad.net/juju-core/juju/testing" 15 "launchpad.net/juju-core/state" 16 "launchpad.net/juju-core/state/api" 17 "launchpad.net/juju-core/state/api/params" 18 coretesting "launchpad.net/juju-core/testing" 19 jc "launchpad.net/juju-core/testing/checkers" 20 ) 21 22 func TestAll(t *stdtesting.T) { 23 coretesting.MgoTestPackage(t) 24 } 25 26 type machineSuite struct { 27 testing.JujuConnSuite 28 machine *state.Machine 29 st *api.State 30 } 31 32 var _ = gc.Suite(&machineSuite{}) 33 34 func (s *machineSuite) SetUpTest(c *gc.C) { 35 s.JujuConnSuite.SetUpTest(c) 36 s.st, s.machine = s.OpenAPIAsNewMachine(c) 37 } 38 39 func (s *machineSuite) TestMachineEntity(c *gc.C) { 40 m, err := s.st.Agent().Entity("42") 41 c.Assert(err, gc.ErrorMatches, "permission denied") 42 c.Assert(err, jc.Satisfies, params.IsCodeUnauthorized) 43 c.Assert(m, gc.IsNil) 44 45 m, err = s.st.Agent().Entity(s.machine.Tag()) 46 c.Assert(err, gc.IsNil) 47 c.Assert(m.Tag(), gc.Equals, s.machine.Tag()) 48 c.Assert(m.Life(), gc.Equals, params.Alive) 49 c.Assert(m.Jobs(), gc.DeepEquals, []params.MachineJob{params.JobHostUnits}) 50 51 err = s.machine.EnsureDead() 52 c.Assert(err, gc.IsNil) 53 err = s.machine.Remove() 54 c.Assert(err, gc.IsNil) 55 56 m, err = s.st.Agent().Entity(s.machine.Tag()) 57 c.Assert(err, gc.ErrorMatches, fmt.Sprintf("machine %s not found", s.machine.Id())) 58 c.Assert(err, jc.Satisfies, params.IsCodeNotFound) 59 c.Assert(m, gc.IsNil) 60 } 61 62 func (s *machineSuite) TestEntitySetPassword(c *gc.C) { 63 entity, err := s.st.Agent().Entity(s.machine.Tag()) 64 c.Assert(err, gc.IsNil) 65 66 err = entity.SetPassword("foo") 67 c.Assert(err, gc.ErrorMatches, "password is only 3 bytes long, and is not a valid Agent password") 68 err = entity.SetPassword("foo-12345678901234567890") 69 c.Assert(err, gc.IsNil) 70 71 err = s.machine.Refresh() 72 c.Assert(err, gc.IsNil) 73 c.Assert(s.machine.PasswordValid("bar"), gc.Equals, false) 74 c.Assert(s.machine.PasswordValid("foo-12345678901234567890"), gc.Equals, true) 75 76 // Check that we cannot log in to mongo with the correct password. 77 // This is because there's no mongo password set for s.machine, 78 // which has JobHostUnits 79 info := s.StateInfo(c) 80 info.Tag = entity.Tag() 81 info.Password = "foo-12345678901234567890" 82 err = tryOpenState(info) 83 c.Assert(err, jc.Satisfies, errors.IsUnauthorizedError) 84 } 85 86 func tryOpenState(info *state.Info) error { 87 st, err := state.Open(info, state.DialOpts{}, environs.NewStatePolicy()) 88 if err == nil { 89 st.Close() 90 } 91 return err 92 }