github.com/rogpeppe/juju@v0.0.0-20140613142852-6337964b789e/state/api/upgrader/upgrader_test.go (about) 1 // Copyright 2012, 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package upgrader_test 5 6 import ( 7 stdtesting "testing" 8 9 "github.com/juju/errors" 10 jc "github.com/juju/testing/checkers" 11 "github.com/juju/utils" 12 gc "launchpad.net/gocheck" 13 14 envtesting "github.com/juju/juju/environs/testing" 15 "github.com/juju/juju/juju/testing" 16 "github.com/juju/juju/state" 17 "github.com/juju/juju/state/api" 18 "github.com/juju/juju/state/api/params" 19 "github.com/juju/juju/state/api/upgrader" 20 statetesting "github.com/juju/juju/state/testing" 21 coretesting "github.com/juju/juju/testing" 22 "github.com/juju/juju/tools" 23 "github.com/juju/juju/version" 24 ) 25 26 func TestAll(t *stdtesting.T) { 27 coretesting.MgoTestPackage(t) 28 } 29 30 type machineUpgraderSuite struct { 31 testing.JujuConnSuite 32 33 stateAPI *api.State 34 35 // These are raw State objects. Use them for setup and assertions, but 36 // should never be touched by the API calls themselves 37 rawMachine *state.Machine 38 39 st *upgrader.State 40 } 41 42 var _ = gc.Suite(&machineUpgraderSuite{}) 43 44 func (s *machineUpgraderSuite) SetUpTest(c *gc.C) { 45 s.JujuConnSuite.SetUpTest(c) 46 s.stateAPI, s.rawMachine = s.OpenAPIAsNewMachine(c) 47 // Create the upgrader facade. 48 s.st = s.stateAPI.Upgrader() 49 c.Assert(s.st, gc.NotNil) 50 } 51 52 // Note: This is really meant as a unit-test, this isn't a test that should 53 // need all of the setup we have for this test suite 54 func (s *machineUpgraderSuite) TestNew(c *gc.C) { 55 upgrader := upgrader.NewState(s.stateAPI) 56 c.Assert(upgrader, gc.NotNil) 57 } 58 59 func (s *machineUpgraderSuite) TestSetVersionWrongMachine(c *gc.C) { 60 err := s.st.SetVersion("machine-42", version.Current) 61 c.Assert(err, gc.ErrorMatches, "permission denied") 62 c.Assert(err, jc.Satisfies, params.IsCodeUnauthorized) 63 } 64 65 func (s *machineUpgraderSuite) TestSetVersionNotMachine(c *gc.C) { 66 err := s.st.SetVersion("foo-42", version.Current) 67 c.Assert(err, gc.ErrorMatches, "permission denied") 68 c.Assert(err, jc.Satisfies, params.IsCodeUnauthorized) 69 } 70 71 func (s *machineUpgraderSuite) TestSetVersion(c *gc.C) { 72 cur := version.Current 73 agentTools, err := s.rawMachine.AgentTools() 74 c.Assert(err, jc.Satisfies, errors.IsNotFound) 75 c.Assert(agentTools, gc.IsNil) 76 err = s.st.SetVersion(s.rawMachine.Tag(), cur) 77 c.Assert(err, gc.IsNil) 78 s.rawMachine.Refresh() 79 agentTools, err = s.rawMachine.AgentTools() 80 c.Assert(err, gc.IsNil) 81 c.Check(agentTools.Version, gc.Equals, cur) 82 } 83 84 func (s *machineUpgraderSuite) TestToolsWrongMachine(c *gc.C) { 85 tools, _, err := s.st.Tools("machine-42") 86 c.Assert(err, gc.ErrorMatches, "permission denied") 87 c.Assert(err, jc.Satisfies, params.IsCodeUnauthorized) 88 c.Assert(tools, gc.IsNil) 89 } 90 91 func (s *machineUpgraderSuite) TestToolsNotMachine(c *gc.C) { 92 tools, _, err := s.st.Tools("foo-42") 93 c.Assert(err, gc.ErrorMatches, "permission denied") 94 c.Assert(err, jc.Satisfies, params.IsCodeUnauthorized) 95 c.Assert(tools, gc.IsNil) 96 } 97 98 func (s *machineUpgraderSuite) TestTools(c *gc.C) { 99 cur := version.Current 100 curTools := &tools.Tools{Version: cur, URL: ""} 101 curTools.Version.Minor++ 102 s.rawMachine.SetAgentVersion(cur) 103 // Upgrader.Tools returns the *desired* set of tools, not the currently 104 // running set. We want to be upgraded to cur.Version 105 stateTools, hostnameVerification, err := s.st.Tools(s.rawMachine.Tag()) 106 c.Assert(err, gc.IsNil) 107 c.Assert(stateTools.Version, gc.Equals, cur) 108 c.Assert(stateTools.URL, gc.Not(gc.Equals), "") 109 c.Assert(hostnameVerification, gc.Equals, utils.VerifySSLHostnames) 110 111 envtesting.SetSSLHostnameVerification(c, s.State, false) 112 113 stateTools, hostnameVerification, err = s.st.Tools(s.rawMachine.Tag()) 114 c.Assert(err, gc.IsNil) 115 c.Assert(stateTools.Version, gc.Equals, cur) 116 c.Assert(stateTools.URL, gc.Not(gc.Equals), "") 117 c.Assert(hostnameVerification, gc.Equals, utils.NoVerifySSLHostnames) 118 } 119 120 func (s *machineUpgraderSuite) TestWatchAPIVersion(c *gc.C) { 121 w, err := s.st.WatchAPIVersion(s.rawMachine.Tag()) 122 c.Assert(err, gc.IsNil) 123 defer statetesting.AssertStop(c, w) 124 wc := statetesting.NewNotifyWatcherC(c, s.BackingState, w) 125 // Initial event 126 wc.AssertOneChange() 127 vers := version.MustParse("10.20.34") 128 err = statetesting.SetAgentVersion(s.BackingState, vers) 129 c.Assert(err, gc.IsNil) 130 // One change noticing the new version 131 wc.AssertOneChange() 132 // Setting the version to the same value doesn't trigger a change 133 err = statetesting.SetAgentVersion(s.BackingState, vers) 134 c.Assert(err, gc.IsNil) 135 wc.AssertNoChange() 136 vers = version.MustParse("10.20.35") 137 err = statetesting.SetAgentVersion(s.BackingState, vers) 138 c.Assert(err, gc.IsNil) 139 wc.AssertOneChange() 140 statetesting.AssertStop(c, w) 141 wc.AssertClosed() 142 } 143 144 func (s *machineUpgraderSuite) TestDesiredVersion(c *gc.C) { 145 cur := version.Current 146 curTools := &tools.Tools{Version: cur, URL: ""} 147 curTools.Version.Minor++ 148 s.rawMachine.SetAgentVersion(cur) 149 // Upgrader.DesiredVersion returns the *desired* set of tools, not the 150 // currently running set. We want to be upgraded to cur.Version 151 stateVersion, err := s.st.DesiredVersion(s.rawMachine.Tag()) 152 c.Assert(err, gc.IsNil) 153 c.Assert(stateVersion, gc.Equals, cur.Number) 154 }