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 }