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