github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/provider/azure/internal/imageutils/images_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package imageutils_test 5 6 import ( 7 "github.com/Azure/azure-sdk-for-go/arm/compute" 8 "github.com/Azure/go-autorest/autorest/mocks" 9 jc "github.com/juju/testing/checkers" 10 "github.com/juju/utils/arch" 11 gc "gopkg.in/check.v1" 12 13 "github.com/juju/juju/environs/instances" 14 "github.com/juju/juju/provider/azure/internal/imageutils" 15 "github.com/juju/juju/testing" 16 ) 17 18 type imageutilsSuite struct { 19 testing.BaseSuite 20 21 mockSender *mocks.Sender 22 client compute.VirtualMachineImagesClient 23 } 24 25 var _ = gc.Suite(&imageutilsSuite{}) 26 27 func (s *imageutilsSuite) SetUpTest(c *gc.C) { 28 s.BaseSuite.SetUpTest(c) 29 s.mockSender = mocks.NewSender() 30 s.client.ManagementClient = compute.New("subscription-id") 31 s.client.Sender = s.mockSender 32 } 33 34 func (s *imageutilsSuite) TestSeriesImage(c *gc.C) { 35 s.mockSender.AppendResponse(mocks.NewResponseWithContent( 36 `[{"name": "14.04.3"}, {"name": "14.04.1-LTS"}, {"name": "12.04.5"}]`, 37 )) 38 image, err := imageutils.SeriesImage("trusty", "released", "westus", s.client) 39 c.Assert(err, jc.ErrorIsNil) 40 c.Assert(image, gc.NotNil) 41 c.Assert(image, jc.DeepEquals, &instances.Image{ 42 Id: "Canonical:UbuntuServer:14.04.3:latest", 43 Arch: arch.AMD64, 44 VirtType: "Hyper-V", 45 }) 46 } 47 48 func (s *imageutilsSuite) TestSeriesImageInvalidSKU(c *gc.C) { 49 s.mockSender.AppendResponse(mocks.NewResponseWithContent( 50 `[{"name": "12.04.invalid"}, {"name": "12.04.5-LTS"}]`, 51 )) 52 image, err := imageutils.SeriesImage("precise", "released", "westus", s.client) 53 c.Assert(err, jc.ErrorIsNil) 54 c.Assert(image, gc.NotNil) 55 c.Assert(image, jc.DeepEquals, &instances.Image{ 56 Id: "Canonical:UbuntuServer:12.04.5-LTS:latest", 57 Arch: arch.AMD64, 58 VirtType: "Hyper-V", 59 }) 60 } 61 62 func (s *imageutilsSuite) TestSeriesImageWindows(c *gc.C) { 63 s.assertImageId(c, "win2012r2", "daily", "MicrosoftWindowsServer:WindowsServer:2012-R2-Datacenter:latest") 64 s.assertImageId(c, "win2012", "daily", "MicrosoftWindowsServer:WindowsServer:2012-Datacenter:latest") 65 s.assertImageId(c, "win81", "daily", "MicrosoftVisualStudio:Windows:8.1-Enterprise-N:latest") 66 s.assertImageId(c, "win10", "daily", "MicrosoftVisualStudio:Windows:10-Enterprise:latest") 67 } 68 69 func (s *imageutilsSuite) TestSeriesImageCentOS(c *gc.C) { 70 s.assertImageId(c, "centos7", "released", "OpenLogic:CentOS:7.1:latest") 71 } 72 73 func (s *imageutilsSuite) TestSeriesImageGenericLinux(c *gc.C) { 74 _, err := imageutils.SeriesImage("genericlinux", "released", "westus", s.client) 75 c.Assert(err, gc.ErrorMatches, "deploying GenericLinux not supported") 76 } 77 78 func (s *imageutilsSuite) TestSeriesImageStream(c *gc.C) { 79 s.mockSender.AppendAndRepeatResponse(mocks.NewResponseWithContent( 80 `[{"name": "14.04.2"}, {"name": "14.04.3-DAILY"}, {"name": "14.04.1-LTS"}]`), 2) 81 s.assertImageId(c, "trusty", "daily", "Canonical:UbuntuServer:14.04.3-DAILY:latest") 82 s.assertImageId(c, "trusty", "released", "Canonical:UbuntuServer:14.04.2:latest") 83 } 84 85 func (s *imageutilsSuite) TestSeriesImageNotFound(c *gc.C) { 86 s.mockSender.AppendResponse(mocks.NewResponseWithContent(`[]`)) 87 image, err := imageutils.SeriesImage("trusty", "released", "westus", s.client) 88 c.Assert(err, gc.ErrorMatches, "selecting SKU for trusty: Ubuntu SKUs not found") 89 c.Assert(image, gc.IsNil) 90 } 91 92 func (s *imageutilsSuite) TestSeriesImageStreamNotFound(c *gc.C) { 93 s.mockSender.AppendResponse(mocks.NewResponseWithContent(`[{"name": "14.04-beta1"}]`)) 94 _, err := imageutils.SeriesImage("trusty", "whatever", "westus", s.client) 95 c.Assert(err, gc.ErrorMatches, "selecting SKU for trusty: Ubuntu SKUs for whatever stream not found") 96 } 97 98 func (s *imageutilsSuite) assertImageId(c *gc.C, series, stream, id string) { 99 image, err := imageutils.SeriesImage(series, stream, "westus", s.client) 100 c.Assert(err, jc.ErrorIsNil) 101 c.Assert(image.Id, gc.Equals, id) 102 }