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