github.com/mattyw/juju@v0.0.0-20140610034352-732aecd63861/environs/tools/storage_test.go (about) 1 // Copyright 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package tools_test 5 6 import ( 7 gc "launchpad.net/gocheck" 8 9 "github.com/juju/juju/environs" 10 "github.com/juju/juju/environs/config" 11 "github.com/juju/juju/environs/configstore" 12 envtesting "github.com/juju/juju/environs/testing" 13 envtools "github.com/juju/juju/environs/tools" 14 "github.com/juju/juju/provider/dummy" 15 "github.com/juju/juju/testing" 16 coretesting "github.com/juju/juju/testing" 17 coretools "github.com/juju/juju/tools" 18 "github.com/juju/juju/version" 19 ) 20 21 type StorageSuite struct { 22 env environs.Environ 23 coretesting.BaseSuite 24 dataDir string 25 } 26 27 var _ = gc.Suite(&StorageSuite{}) 28 29 func (s *StorageSuite) SetUpTest(c *gc.C) { 30 s.BaseSuite.SetUpTest(c) 31 cfg, err := config.New(config.NoDefaults, dummy.SampleConfig()) 32 c.Assert(err, gc.IsNil) 33 s.env, err = environs.Prepare(cfg, testing.Context(c), configstore.NewMem()) 34 c.Assert(err, gc.IsNil) 35 s.dataDir = c.MkDir() 36 } 37 38 func (s *StorageSuite) TearDownTest(c *gc.C) { 39 dummy.Reset() 40 s.BaseSuite.TearDownTest(c) 41 } 42 43 func (s *StorageSuite) TestStorageName(c *gc.C) { 44 vers := version.MustParseBinary("1.2.3-precise-amd64") 45 path := envtools.StorageName(vers) 46 c.Assert(path, gc.Equals, "tools/releases/juju-1.2.3-precise-amd64.tgz") 47 } 48 49 func (s *StorageSuite) TestReadListEmpty(c *gc.C) { 50 store := s.env.Storage() 51 _, err := envtools.ReadList(store, 2, 0) 52 c.Assert(err, gc.Equals, envtools.ErrNoTools) 53 } 54 55 func (s *StorageSuite) TestReadList(c *gc.C) { 56 store := s.env.Storage() 57 v001 := version.MustParseBinary("0.0.1-precise-amd64") 58 v100 := version.MustParseBinary("1.0.0-precise-amd64") 59 v101 := version.MustParseBinary("1.0.1-precise-amd64") 60 v111 := version.MustParseBinary("1.1.1-precise-amd64") 61 agentTools := envtesting.AssertUploadFakeToolsVersions(c, store, v001, v100, v101, v111) 62 t001 := agentTools[0] 63 t100 := agentTools[1] 64 t101 := agentTools[2] 65 t111 := agentTools[3] 66 67 for i, t := range []struct { 68 majorVersion, 69 minorVersion int 70 list coretools.List 71 }{{ 72 0, 0, coretools.List{t001}, 73 }, { 74 1, 0, coretools.List{t100, t101}, 75 }, { 76 1, 1, coretools.List{t111}, 77 }, { 78 1, -1, coretools.List{t100, t101, t111}, 79 }, { 80 1, 2, nil, 81 }, { 82 2, 0, nil, 83 }} { 84 c.Logf("test %d", i) 85 list, err := envtools.ReadList(store, t.majorVersion, t.minorVersion) 86 if t.list != nil { 87 c.Assert(err, gc.IsNil) 88 // ReadList doesn't set the Size of SHA256, so blank out those attributes. 89 for _, tool := range t.list { 90 tool.Size = 0 91 tool.SHA256 = "" 92 } 93 c.Assert(list, gc.DeepEquals, t.list) 94 } else { 95 c.Assert(err, gc.Equals, coretools.ErrNoMatches) 96 } 97 } 98 } 99 100 var setenvTests = []struct { 101 set string 102 expect []string 103 }{ 104 {"foo=1", []string{"foo=1", "arble="}}, 105 {"foo=", []string{"foo=", "arble="}}, 106 {"arble=23", []string{"foo=bar", "arble=23"}}, 107 {"zaphod=42", []string{"foo=bar", "arble=", "zaphod=42"}}, 108 } 109 110 func (*StorageSuite) TestSetenv(c *gc.C) { 111 env0 := []string{"foo=bar", "arble="} 112 for i, t := range setenvTests { 113 c.Logf("test %d", i) 114 env := make([]string, len(env0)) 115 copy(env, env0) 116 env = envtools.Setenv(env, t.set) 117 c.Check(env, gc.DeepEquals, t.expect) 118 } 119 }