github.com/Pankov404/juju@v0.0.0-20150703034450-be266991dceb/environs/tools/validation_test.go (about)

     1  // Copyright 2012, 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package tools
     5  
     6  import (
     7  	"path"
     8  
     9  	jc "github.com/juju/testing/checkers"
    10  	"github.com/juju/utils"
    11  	gc "gopkg.in/check.v1"
    12  
    13  	"github.com/juju/juju/environs/filestorage"
    14  	"github.com/juju/juju/environs/simplestreams"
    15  	"github.com/juju/juju/testing"
    16  )
    17  
    18  type ValidateSuite struct {
    19  	testing.BaseSuite
    20  	metadataDir string
    21  }
    22  
    23  var _ = gc.Suite(&ValidateSuite{})
    24  
    25  func (s *ValidateSuite) makeLocalMetadata(c *gc.C, stream, version, series string) error {
    26  	tm := []*ToolsMetadata{{
    27  		Version:  version,
    28  		Release:  series,
    29  		Arch:     "amd64",
    30  		Path:     "/tools/tools.tar.gz",
    31  		Size:     1234,
    32  		FileType: "tar.gz",
    33  		SHA256:   "f65a92b3b41311bdf398663ee1c5cd0c",
    34  	}}
    35  
    36  	stor, err := filestorage.NewFileStorageWriter(s.metadataDir)
    37  	c.Assert(err, jc.ErrorIsNil)
    38  	streamMetadata := map[string][]*ToolsMetadata{
    39  		stream: tm,
    40  	}
    41  	err = WriteMetadata(stor, streamMetadata, []string{stream}, false)
    42  	c.Assert(err, jc.ErrorIsNil)
    43  	return nil
    44  }
    45  
    46  func (s *ValidateSuite) SetUpTest(c *gc.C) {
    47  	s.BaseSuite.SetUpTest(c)
    48  	s.metadataDir = c.MkDir()
    49  }
    50  
    51  func (s *ValidateSuite) toolsURL() string {
    52  	return utils.MakeFileURL(path.Join(s.metadataDir, "tools"))
    53  }
    54  
    55  func (s *ValidateSuite) TestExactVersionMatch(c *gc.C) {
    56  	s.makeLocalMetadata(c, "released", "1.11.2", "raring")
    57  	params := &ToolsMetadataLookupParams{
    58  		Version: "1.11.2",
    59  		MetadataLookupParams: simplestreams.MetadataLookupParams{
    60  			Region:        "region-2",
    61  			Series:        "raring",
    62  			Architectures: []string{"amd64"},
    63  			Endpoint:      "some-auth-url",
    64  			Stream:        "released",
    65  			Sources: []simplestreams.DataSource{
    66  				simplestreams.NewURLDataSource("test", s.toolsURL(), utils.VerifySSLHostnames)},
    67  		},
    68  	}
    69  	versions, resolveInfo, err := ValidateToolsMetadata(params)
    70  	c.Assert(err, jc.ErrorIsNil)
    71  	c.Assert(versions, gc.DeepEquals, []string{"1.11.2-raring-amd64"})
    72  	c.Check(resolveInfo, gc.DeepEquals, &simplestreams.ResolveInfo{
    73  		Source:    "test",
    74  		Signed:    false,
    75  		IndexURL:  utils.MakeFileURL(path.Join(s.metadataDir, "tools/streams/v1/index2.json")),
    76  		MirrorURL: "",
    77  	})
    78  }
    79  
    80  func (s *ValidateSuite) TestMajorVersionMatch(c *gc.C) {
    81  	s.makeLocalMetadata(c, "released", "1.11.2", "raring")
    82  	params := &ToolsMetadataLookupParams{
    83  		Major: 1,
    84  		Minor: -1,
    85  		MetadataLookupParams: simplestreams.MetadataLookupParams{
    86  			Region:        "region-2",
    87  			Series:        "raring",
    88  			Architectures: []string{"amd64"},
    89  			Endpoint:      "some-auth-url",
    90  			Stream:        "released",
    91  			Sources: []simplestreams.DataSource{
    92  				simplestreams.NewURLDataSource("test", s.toolsURL(), utils.VerifySSLHostnames)},
    93  		},
    94  	}
    95  	versions, resolveInfo, err := ValidateToolsMetadata(params)
    96  	c.Assert(err, jc.ErrorIsNil)
    97  	c.Assert(versions, gc.DeepEquals, []string{"1.11.2-raring-amd64"})
    98  	c.Check(resolveInfo, gc.DeepEquals, &simplestreams.ResolveInfo{
    99  		Source:    "test",
   100  		Signed:    false,
   101  		IndexURL:  utils.MakeFileURL(path.Join(s.metadataDir, "tools/streams/v1/index2.json")),
   102  		MirrorURL: "",
   103  	})
   104  }
   105  
   106  func (s *ValidateSuite) TestMajorMinorVersionMatch(c *gc.C) {
   107  	s.makeLocalMetadata(c, "released", "1.11.2", "raring")
   108  	params := &ToolsMetadataLookupParams{
   109  		Major: 1,
   110  		Minor: 11,
   111  		MetadataLookupParams: simplestreams.MetadataLookupParams{
   112  			Region:        "region-2",
   113  			Series:        "raring",
   114  			Architectures: []string{"amd64"},
   115  			Endpoint:      "some-auth-url",
   116  			Stream:        "released",
   117  			Sources: []simplestreams.DataSource{
   118  				simplestreams.NewURLDataSource("test", s.toolsURL(), utils.VerifySSLHostnames)},
   119  		},
   120  	}
   121  	versions, resolveInfo, err := ValidateToolsMetadata(params)
   122  	c.Assert(err, jc.ErrorIsNil)
   123  	c.Assert(versions, gc.DeepEquals, []string{"1.11.2-raring-amd64"})
   124  	c.Check(resolveInfo, gc.DeepEquals, &simplestreams.ResolveInfo{
   125  		Source:    "test",
   126  		Signed:    false,
   127  		IndexURL:  utils.MakeFileURL(path.Join(s.metadataDir, "tools/streams/v1/index2.json")),
   128  		MirrorURL: "",
   129  	})
   130  }
   131  
   132  func (s *ValidateSuite) TestNoMatch(c *gc.C) {
   133  	s.makeLocalMetadata(c, "released", "1.11.2", "raring")
   134  	params := &ToolsMetadataLookupParams{
   135  		Version: "1.11.2",
   136  		MetadataLookupParams: simplestreams.MetadataLookupParams{
   137  			Region:        "region-2",
   138  			Series:        "precise",
   139  			Architectures: []string{"amd64"},
   140  			Endpoint:      "some-auth-url",
   141  			Stream:        "released",
   142  			Sources: []simplestreams.DataSource{
   143  				simplestreams.NewURLDataSource("test", s.toolsURL(), utils.VerifySSLHostnames)},
   144  		},
   145  	}
   146  	_, _, err := ValidateToolsMetadata(params)
   147  	c.Assert(err, gc.Not(gc.IsNil))
   148  }
   149  
   150  func (s *ValidateSuite) TestStreamsNoMatch(c *gc.C) {
   151  	s.makeLocalMetadata(c, "proposed", "1.11.2", "raring")
   152  	params := &ToolsMetadataLookupParams{
   153  		Version: "1.11.2",
   154  		MetadataLookupParams: simplestreams.MetadataLookupParams{
   155  			Region:        "region-2",
   156  			Series:        "raring",
   157  			Architectures: []string{"amd64"},
   158  			Endpoint:      "some-auth-url",
   159  			Stream:        "testing",
   160  			Sources: []simplestreams.DataSource{
   161  				simplestreams.NewURLDataSource("test", s.toolsURL(), utils.VerifySSLHostnames)},
   162  		},
   163  	}
   164  	_, _, err := ValidateToolsMetadata(params)
   165  	c.Assert(err, gc.Not(gc.IsNil))
   166  }