github.com/mwhudson/juju@v0.0.0-20160512215208-90ff01f3497f/container/image_test.go (about)

     1  // Copyright 2014 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  // +build !windows
     5  
     6  package container_test
     7  
     8  import (
     9  	"fmt"
    10  
    11  	"github.com/juju/testing"
    12  	gc "gopkg.in/check.v1"
    13  
    14  	"github.com/juju/juju/container"
    15  	containertesting "github.com/juju/juju/container/testing"
    16  	"github.com/juju/juju/instance"
    17  	coretesting "github.com/juju/juju/testing"
    18  )
    19  
    20  type imageURLSuite struct {
    21  	coretesting.BaseSuite
    22  }
    23  
    24  var _ = gc.Suite(&imageURLSuite{})
    25  
    26  func (s *imageURLSuite) SetUpTest(c *gc.C) {
    27  	testing.PatchExecutable(c, s, "ubuntu-cloudimg-query", containertesting.FakeLxcURLScript)
    28  }
    29  
    30  func (s *imageURLSuite) TestImageURL(c *gc.C) {
    31  	s.assertImageURLForStream(c, "released")
    32  	s.assertImageURLForStream(c, "daily")
    33  }
    34  
    35  func (s *imageURLSuite) assertImageURLForStream(c *gc.C, stream string) {
    36  	imageURLGetter := container.NewImageURLGetter(
    37  		container.ImageURLGetterConfig{
    38  			ServerRoot:        "host:port",
    39  			ModelUUID:         "12345",
    40  			CACert:            []byte("cert"),
    41  			CloudimgBaseUrl:   "",
    42  			Stream:            stream,
    43  			ImageDownloadFunc: container.ImageDownloadURL,
    44  		})
    45  	imageURL, err := imageURLGetter.ImageURL(instance.LXC, "trusty", "amd64")
    46  	c.Assert(err, gc.IsNil)
    47  	c.Assert(imageURL, gc.Equals, fmt.Sprintf("https://host:port/model/12345/images/lxc/trusty/amd64/trusty-%s-amd64-root.tar.gz", stream))
    48  	c.Assert(imageURLGetter.CACert(), gc.DeepEquals, []byte("cert"))
    49  }
    50  
    51  func (s *imageURLSuite) TestImageURLOtherBase(c *gc.C) {
    52  	var calledBaseURL string
    53  	baseURL := "other://cloud-images"
    54  	mockFunc := func(kind instance.ContainerType, series, arch, stream, cloudimgBaseUrl string) (string, error) {
    55  		calledBaseURL = cloudimgBaseUrl
    56  		return "omg://wat/trusty-released-amd64-root.tar.gz", nil
    57  	}
    58  	imageURLGetter := container.NewImageURLGetter(
    59  		container.ImageURLGetterConfig{
    60  			ServerRoot:        "host:port",
    61  			ModelUUID:         "12345",
    62  			CACert:            []byte("cert"),
    63  			CloudimgBaseUrl:   baseURL,
    64  			Stream:            "released",
    65  			ImageDownloadFunc: mockFunc,
    66  		})
    67  	imageURL, err := imageURLGetter.ImageURL(instance.LXC, "trusty", "amd64")
    68  	c.Assert(err, gc.IsNil)
    69  	c.Assert(imageURL, gc.Equals, "https://host:port/model/12345/images/lxc/trusty/amd64/trusty-released-amd64-root.tar.gz")
    70  	c.Assert(imageURLGetter.CACert(), gc.DeepEquals, []byte("cert"))
    71  	c.Assert(calledBaseURL, gc.Equals, baseURL)
    72  }
    73  
    74  func (s *imageURLSuite) TestImageDownloadURL(c *gc.C) {
    75  	imageDownloadURL, err := container.ImageDownloadURL(instance.LXC, "trusty", "amd64", "released", "")
    76  	c.Assert(err, gc.IsNil)
    77  	c.Assert(imageDownloadURL, gc.Equals, "test://cloud-images/trusty-released-amd64-root.tar.gz")
    78  }
    79  
    80  func (s *imageURLSuite) TestImageDownloadURLOtherBase(c *gc.C) {
    81  	imageDownloadURL, err := container.ImageDownloadURL(instance.LXC, "trusty", "amd64", "released", "other://cloud-images")
    82  	c.Assert(err, gc.IsNil)
    83  	c.Assert(imageDownloadURL, gc.Equals, "other://cloud-images/trusty-released-amd64-root.tar.gz")
    84  }
    85  
    86  func (s *imageURLSuite) TestImageDownloadURLUnsupportedContainer(c *gc.C) {
    87  	_, err := container.ImageDownloadURL(instance.KVM, "trusty", "amd64", "released", "")
    88  	c.Assert(err, gc.ErrorMatches, "unsupported container .*")
    89  }