github.com/cloudbase/juju-core@v0.0.0-20140504232958-a7271ac7912f/state/apiserver/common/tools_test.go (about) 1 // Copyright 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package common_test 5 6 import ( 7 "fmt" 8 9 gc "launchpad.net/gocheck" 10 11 "launchpad.net/juju-core/juju/testing" 12 "launchpad.net/juju-core/state" 13 "launchpad.net/juju-core/state/api/params" 14 "launchpad.net/juju-core/state/apiserver/common" 15 apiservertesting "launchpad.net/juju-core/state/apiserver/testing" 16 jc "launchpad.net/juju-core/testing/checkers" 17 "launchpad.net/juju-core/version" 18 ) 19 20 type toolsSuite struct { 21 testing.JujuConnSuite 22 machine0 *state.Machine 23 } 24 25 var _ = gc.Suite(&toolsSuite{}) 26 27 func (s *toolsSuite) SetUpTest(c *gc.C) { 28 s.JujuConnSuite.SetUpTest(c) 29 var err error 30 s.machine0, err = s.State.AddMachine("series", state.JobHostUnits) 31 c.Assert(err, gc.IsNil) 32 } 33 34 func (s *toolsSuite) TestTools(c *gc.C) { 35 getCanRead := func() (common.AuthFunc, error) { 36 return func(tag string) bool { 37 return tag == "machine-0" || tag == "machine-42" 38 }, nil 39 } 40 tg := common.NewToolsGetter(s.State, getCanRead) 41 c.Assert(tg, gc.NotNil) 42 43 err := s.machine0.SetAgentVersion(version.Current) 44 c.Assert(err, gc.IsNil) 45 46 args := params.Entities{ 47 Entities: []params.Entity{ 48 {Tag: "machine-0"}, 49 {Tag: "machine-1"}, 50 {Tag: "machine-42"}, 51 }} 52 result, err := tg.Tools(args) 53 c.Assert(err, gc.IsNil) 54 c.Assert(result.Results, gc.HasLen, 3) 55 c.Assert(result.Results[0].Tools, gc.NotNil) 56 c.Assert(result.Results[0].Tools.Version, gc.DeepEquals, version.Current) 57 c.Assert(result.Results[0].DisableSSLHostnameVerification, jc.IsFalse) 58 c.Assert(result.Results[1].Error, gc.DeepEquals, apiservertesting.ErrUnauthorized) 59 c.Assert(result.Results[2].Error, gc.DeepEquals, apiservertesting.NotFoundError("machine 42")) 60 } 61 62 func (s *toolsSuite) TestToolsError(c *gc.C) { 63 getCanRead := func() (common.AuthFunc, error) { 64 return nil, fmt.Errorf("splat") 65 } 66 tg := common.NewToolsGetter(s.State, getCanRead) 67 args := params.Entities{ 68 Entities: []params.Entity{{Tag: "machine-42"}}, 69 } 70 result, err := tg.Tools(args) 71 c.Assert(err, gc.ErrorMatches, "splat") 72 c.Assert(result.Results, gc.HasLen, 1) 73 } 74 75 func (s *toolsSuite) TestSetTools(c *gc.C) { 76 getCanWrite := func() (common.AuthFunc, error) { 77 return func(tag string) bool { 78 return tag == "machine-0" || tag == "machine-42" 79 }, nil 80 } 81 ts := common.NewToolsSetter(s.State, getCanWrite) 82 c.Assert(ts, gc.NotNil) 83 84 err := s.machine0.SetAgentVersion(version.Current) 85 c.Assert(err, gc.IsNil) 86 87 args := params.EntitiesVersion{ 88 AgentTools: []params.EntityVersion{{ 89 Tag: "machine-0", 90 Tools: ¶ms.Version{ 91 Version: version.Current, 92 }, 93 }, { 94 Tag: "machine-1", 95 Tools: ¶ms.Version{ 96 Version: version.Current, 97 }, 98 }, { 99 Tag: "machine-42", 100 Tools: ¶ms.Version{ 101 Version: version.Current, 102 }, 103 }}, 104 } 105 result, err := ts.SetTools(args) 106 c.Assert(err, gc.IsNil) 107 c.Assert(result.Results, gc.HasLen, 3) 108 c.Assert(result.Results[0].Error, gc.IsNil) 109 agentTools, err := s.machine0.AgentTools() 110 c.Assert(err, gc.IsNil) 111 c.Assert(agentTools.Version, gc.DeepEquals, version.Current) 112 c.Assert(result.Results[1].Error, gc.DeepEquals, apiservertesting.ErrUnauthorized) 113 c.Assert(result.Results[2].Error, gc.DeepEquals, apiservertesting.NotFoundError("machine 42")) 114 } 115 116 func (s *toolsSuite) TestToolsSetError(c *gc.C) { 117 getCanWrite := func() (common.AuthFunc, error) { 118 return nil, fmt.Errorf("splat") 119 } 120 ts := common.NewToolsSetter(s.State, getCanWrite) 121 args := params.EntitiesVersion{ 122 AgentTools: []params.EntityVersion{{ 123 Tag: "machine-42", 124 Tools: ¶ms.Version{ 125 Version: version.Current, 126 }, 127 }}, 128 } 129 result, err := ts.SetTools(args) 130 c.Assert(err, gc.ErrorMatches, "splat") 131 c.Assert(result.Results, gc.HasLen, 1) 132 }