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  }