github.com/rogpeppe/juju@v0.0.0-20140613142852-6337964b789e/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  }