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  }