github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/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/Godeps/_workspace/src/github.com/Azure/go-autorest/autorest/mocks" 8 "github.com/Azure/azure-sdk-for-go/arm/compute" 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.Sender = s.mockSender 31 } 32 33 func (s *imageutilsSuite) TestSeriesImage(c *gc.C) { 34 s.mockSender.EmitContent( 35 `[{"name": "14.04.3"}, {"name": "14.04.1-LTS"}, {"name": "12.04.5"}]`, 36 ) 37 image, err := imageutils.SeriesImage("trusty", "released", "westus", s.client) 38 c.Assert(err, jc.ErrorIsNil) 39 c.Assert(image, gc.NotNil) 40 c.Assert(image, jc.DeepEquals, &instances.Image{ 41 Id: "Canonical:UbuntuServer:14.04.3:latest", 42 Arch: arch.AMD64, 43 VirtType: "Hyper-V", 44 }) 45 } 46 47 func (s *imageutilsSuite) TestSeriesImageInvalidSKU(c *gc.C) { 48 s.mockSender.EmitContent( 49 `[{"name": "12.04.invalid"}, {"name": "12.04.5-LTS"}]`, 50 ) 51 image, err := imageutils.SeriesImage("precise", "released", "westus", s.client) 52 c.Assert(err, jc.ErrorIsNil) 53 c.Assert(image, gc.NotNil) 54 c.Assert(image, jc.DeepEquals, &instances.Image{ 55 Id: "Canonical:UbuntuServer:12.04.5-LTS:latest", 56 Arch: arch.AMD64, 57 VirtType: "Hyper-V", 58 }) 59 } 60 61 func (s *imageutilsSuite) TestSeriesImageWindows(c *gc.C) { 62 s.assertImageId(c, "win2012r2", "daily", "MicrosoftWindowsServer:WindowsServer:2012-R2-Datacenter:latest") 63 s.assertImageId(c, "win2012", "daily", "MicrosoftWindowsServer:WindowsServer:2012-Datacenter:latest") 64 s.assertImageId(c, "win81", "daily", "MicrosoftVisualStudio:Windows:8.1-Enterprise-N:latest") 65 s.assertImageId(c, "win10", "daily", "MicrosoftVisualStudio:Windows:10-Enterprise:latest") 66 } 67 68 func (s *imageutilsSuite) TestSeriesImageCentOS(c *gc.C) { 69 s.assertImageId(c, "centos7", "released", "OpenLogic:CentOS:7.1:latest") 70 } 71 72 func (s *imageutilsSuite) TestSeriesImageArch(c *gc.C) { 73 _, err := imageutils.SeriesImage("arch", "released", "westus", s.client) 74 c.Assert(err, gc.ErrorMatches, "deploying Arch not supported") 75 } 76 77 func (s *imageutilsSuite) TestSeriesImageStream(c *gc.C) { 78 s.mockSender.EmitContent(`[{"name": "14.04.2"}, {"name": "14.04.3-DAILY"}, {"name": "14.04.1-LTS"}]`) 79 s.assertImageId(c, "trusty", "daily", "Canonical:UbuntuServer:14.04.3-DAILY:latest") 80 s.assertImageId(c, "trusty", "released", "Canonical:UbuntuServer:14.04.2:latest") 81 } 82 83 func (s *imageutilsSuite) TestSeriesImageNotFound(c *gc.C) { 84 s.mockSender.EmitContent(`[]`) 85 image, err := imageutils.SeriesImage("trusty", "released", "westus", s.client) 86 c.Assert(err, gc.ErrorMatches, "selecting SKU for trusty: Ubuntu SKUs not found") 87 c.Assert(image, gc.IsNil) 88 } 89 90 func (s *imageutilsSuite) TestSeriesImageStreamNotFound(c *gc.C) { 91 s.mockSender.EmitContent(`[{"name": "14.04-beta1"}]`) 92 _, err := imageutils.SeriesImage("trusty", "whatever", "westus", s.client) 93 c.Assert(err, gc.ErrorMatches, "selecting SKU for trusty: Ubuntu SKUs for whatever stream not found") 94 } 95 96 func (s *imageutilsSuite) assertImageId(c *gc.C, series, stream, id string) { 97 image, err := imageutils.SeriesImage(series, stream, "westus", s.client) 98 c.Assert(err, jc.ErrorIsNil) 99 c.Assert(image.Id, gc.Equals, id) 100 }