github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/apiserver/environment/toolsversionupdate_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package environment 5 6 import ( 7 jc "github.com/juju/testing/checkers" 8 gc "gopkg.in/check.v1" 9 10 "github.com/juju/juju/environs" 11 "github.com/juju/juju/environs/config" 12 "github.com/juju/juju/state" 13 coretesting "github.com/juju/juju/testing" 14 coretools "github.com/juju/juju/tools" 15 "github.com/juju/juju/version" 16 ) 17 18 var _ = gc.Suite(&updaterSuite{}) 19 20 type updaterSuite struct { 21 coretesting.BaseSuite 22 } 23 24 type dummyEnviron struct { 25 environs.Environ 26 } 27 28 func (s *updaterSuite) TestCheckTools(c *gc.C) { 29 sConfig := coretesting.FakeConfig() 30 sConfig = sConfig.Merge(coretesting.Attrs{ 31 "agent-version": "2.5.0", 32 }) 33 cfg, err := config.New(config.NoDefaults, sConfig) 34 c.Assert(err, jc.ErrorIsNil) 35 fakeNewEnvirons := func(*config.Config) (environs.Environ, error) { 36 return dummyEnviron{}, nil 37 } 38 s.PatchValue(&newEnvirons, fakeNewEnvirons) 39 var ( 40 calledWithEnviron environs.Environ 41 calledWithMajor, calledWithMinor int 42 calledWithFilter coretools.Filter 43 ) 44 fakeToolFinder := func(e environs.Environ, maj int, min int, _ string, filter coretools.Filter) (coretools.List, error) { 45 calledWithEnviron = e 46 calledWithMajor = maj 47 calledWithMinor = min 48 calledWithFilter = filter 49 ver := version.Binary{Number: version.Number{Major: maj, Minor: min}} 50 t := coretools.Tools{Version: ver, URL: "http://example.com", Size: 1} 51 c.Assert(calledWithMajor, gc.Equals, 2) 52 c.Assert(calledWithMinor, gc.Equals, 5) 53 return coretools.List{&t}, nil 54 } 55 56 ver, err := checkToolsAvailability(cfg, fakeToolFinder) 57 c.Assert(err, jc.ErrorIsNil) 58 c.Assert(ver, gc.Not(gc.Equals), version.Zero) 59 c.Assert(ver, gc.Equals, version.Number{Major: 2, Minor: 5, Patch: 0}) 60 } 61 62 type envGetter struct { 63 } 64 65 func (e *envGetter) Environment() (*state.Environment, error) { 66 return &state.Environment{}, nil 67 } 68 69 func (s *updaterSuite) TestUpdateToolsAvailability(c *gc.C) { 70 fakeNewEnvirons := func(*config.Config) (environs.Environ, error) { 71 return dummyEnviron{}, nil 72 } 73 s.PatchValue(&newEnvirons, fakeNewEnvirons) 74 75 fakeEnvConfig := func(_ *state.Environment) (*config.Config, error) { 76 sConfig := coretesting.FakeConfig() 77 sConfig = sConfig.Merge(coretesting.Attrs{ 78 "agent-version": "2.5.0", 79 }) 80 return config.New(config.NoDefaults, sConfig) 81 } 82 s.PatchValue(&envConfig, fakeEnvConfig) 83 84 fakeToolFinder := func(_ environs.Environ, _ int, _ int, _ string, _ coretools.Filter) (coretools.List, error) { 85 ver := version.Binary{Number: version.Number{Major: 2, Minor: 5, Patch: 2}} 86 olderVer := version.Binary{Number: version.Number{Major: 2, Minor: 5, Patch: 1}} 87 t := coretools.Tools{Version: ver, URL: "http://example.com", Size: 1} 88 tOld := coretools.Tools{Version: olderVer, URL: "http://example.com", Size: 1} 89 return coretools.List{&t, &tOld}, nil 90 } 91 92 var ver version.Number 93 fakeUpdate := func(_ *state.Environment, v version.Number) error { 94 ver = v 95 return nil 96 } 97 98 err := updateToolsAvailability(&envGetter{}, fakeToolFinder, fakeUpdate) 99 c.Assert(err, jc.ErrorIsNil) 100 101 c.Assert(ver, gc.Not(gc.Equals), version.Zero) 102 c.Assert(ver, gc.Equals, version.Number{Major: 2, Minor: 5, Patch: 2}) 103 }