github.com/mhilton/juju-juju@v0.0.0-20150901100907-a94dd2c73455/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  	jc "github.com/juju/testing/checkers"
     8  	gc "gopkg.in/check.v1"
     9  
    10  	"github.com/juju/juju/environs/filestorage"
    11  	envtesting "github.com/juju/juju/environs/testing"
    12  	envtools "github.com/juju/juju/environs/tools"
    13  	coretesting "github.com/juju/juju/testing"
    14  	coretools "github.com/juju/juju/tools"
    15  	"github.com/juju/juju/version"
    16  )
    17  
    18  type StorageSuite struct {
    19  	coretesting.BaseSuite
    20  }
    21  
    22  var _ = gc.Suite(&StorageSuite{})
    23  
    24  func (s *StorageSuite) TestStorageName(c *gc.C) {
    25  	vers := version.MustParseBinary("1.2.3-precise-amd64")
    26  	path := envtools.StorageName(vers, "proposed")
    27  	c.Assert(path, gc.Equals, "tools/proposed/juju-1.2.3-precise-amd64.tgz")
    28  }
    29  
    30  func (s *StorageSuite) TestReadListEmpty(c *gc.C) {
    31  	stor, err := filestorage.NewFileStorageWriter(c.MkDir())
    32  	c.Assert(err, jc.ErrorIsNil)
    33  	_, err = envtools.ReadList(stor, "released", 2, 0)
    34  	c.Assert(err, gc.Equals, envtools.ErrNoTools)
    35  }
    36  
    37  func (s *StorageSuite) TestReadList(c *gc.C) {
    38  	stor, err := filestorage.NewFileStorageWriter(c.MkDir())
    39  	c.Assert(err, jc.ErrorIsNil)
    40  	v001 := version.MustParseBinary("0.0.1-precise-amd64")
    41  	v100 := version.MustParseBinary("1.0.0-precise-amd64")
    42  	v101 := version.MustParseBinary("1.0.1-precise-amd64")
    43  	v111 := version.MustParseBinary("1.1.1-precise-amd64")
    44  	agentTools := envtesting.AssertUploadFakeToolsVersions(c, stor, "proposed", "proposed", v001, v100, v101, v111)
    45  	t001 := agentTools[0]
    46  	t100 := agentTools[1]
    47  	t101 := agentTools[2]
    48  	t111 := agentTools[3]
    49  
    50  	for i, t := range []struct {
    51  		majorVersion,
    52  		minorVersion int
    53  		list coretools.List
    54  	}{{
    55  		0, 0, coretools.List{t001},
    56  	}, {
    57  		1, 0, coretools.List{t100, t101},
    58  	}, {
    59  		1, 1, coretools.List{t111},
    60  	}, {
    61  		1, -1, coretools.List{t100, t101, t111},
    62  	}, {
    63  		1, 2, nil,
    64  	}, {
    65  		2, 0, nil,
    66  	}} {
    67  		c.Logf("test %d", i)
    68  		list, err := envtools.ReadList(stor, "proposed", t.majorVersion, t.minorVersion)
    69  		if t.list != nil {
    70  			c.Assert(err, jc.ErrorIsNil)
    71  			// ReadList doesn't set the Size or SHA256, so blank out those attributes.
    72  			for _, tool := range t.list {
    73  				tool.Size = 0
    74  				tool.SHA256 = ""
    75  			}
    76  			c.Assert(list, gc.DeepEquals, t.list)
    77  		} else {
    78  			c.Assert(err, gc.Equals, coretools.ErrNoMatches)
    79  		}
    80  	}
    81  }
    82  
    83  func (s *StorageSuite) TestReadListLegacyPPC64(c *gc.C) {
    84  	stor, err := filestorage.NewFileStorageWriter(c.MkDir())
    85  	c.Assert(err, jc.ErrorIsNil)
    86  	v100 := version.MustParseBinary("1.0.0-precise-amd64")
    87  	v101 := version.MustParseBinary("1.0.1-precise-ppc64el")
    88  	agentTools := envtesting.AssertUploadFakeToolsVersions(c, stor, "proposed", "proposed", v100, v101)
    89  
    90  	amd64Tools := agentTools[0]
    91  	ppc64elTools := agentTools[1]
    92  	// We also expect metadata for ppc64 to be added.
    93  	ppc64Tools := *ppc64elTools
    94  	ppc64Tools.Version.Arch = "ppc64"
    95  	expected := coretools.List{amd64Tools, ppc64elTools, &ppc64Tools}
    96  
    97  	list, err := envtools.ReadList(stor, "proposed", 1, 0)
    98  	c.Assert(err, jc.ErrorIsNil)
    99  	// ReadList doesn't set the Size or SHA256, so blank out those attributes.
   100  	for _, tool := range expected {
   101  		tool.Size = 0
   102  		tool.SHA256 = ""
   103  	}
   104  	c.Assert(list, gc.DeepEquals, expected)
   105  }
   106  
   107  var setenvTests = []struct {
   108  	set    string
   109  	expect []string
   110  }{
   111  	{"foo=1", []string{"foo=1", "arble="}},
   112  	{"foo=", []string{"foo=", "arble="}},
   113  	{"arble=23", []string{"foo=bar", "arble=23"}},
   114  	{"zaphod=42", []string{"foo=bar", "arble=", "zaphod=42"}},
   115  }
   116  
   117  func (*StorageSuite) TestSetenv(c *gc.C) {
   118  	env0 := []string{"foo=bar", "arble="}
   119  	for i, t := range setenvTests {
   120  		c.Logf("test %d", i)
   121  		env := make([]string, len(env0))
   122  		copy(env, env0)
   123  		env = envtools.Setenv(env, t.set)
   124  		c.Check(env, gc.DeepEquals, t.expect)
   125  	}
   126  }