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  }