github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/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  	"github.com/juju/version/v2"
     9  	gc "gopkg.in/check.v1"
    10  
    11  	"github.com/juju/juju/environs/filestorage"
    12  	envtesting "github.com/juju/juju/environs/testing"
    13  	envtools "github.com/juju/juju/environs/tools"
    14  	coretesting "github.com/juju/juju/testing"
    15  	coretools "github.com/juju/juju/tools"
    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-ubuntu-amd64")
    26  	path := envtools.StorageName(vers, "proposed")
    27  	c.Assert(path, gc.Equals, "tools/proposed/juju-1.2.3-ubuntu-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  	v100 := version.MustParseBinary("1.0.0-ubuntu-amd64")
    41  	v101 := version.MustParseBinary("1.0.1-ubuntu-amd64")
    42  	v111 := version.MustParseBinary("1.1.1-ubuntu-amd64")
    43  	v201 := version.MustParseBinary("2.0.1-ubuntu-amd64")
    44  	agentTools := envtesting.AssertUploadFakeToolsVersions(c, stor, "proposed", "proposed", v100, v101, v111, v201)
    45  	t100 := agentTools[0]
    46  	t101 := agentTools[1]
    47  	t111 := agentTools[2]
    48  	t201 := agentTools[3]
    49  
    50  	for i, t := range []struct {
    51  		majorVersion,
    52  		minorVersion int
    53  		list coretools.List
    54  	}{{
    55  		-1, -1, coretools.List{t100, t101, t111, t201},
    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  		3, 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  }