github.com/altoros/juju-vmware@v0.0.0-20150312064031-f19ae857ccca/provider/ec2/disks_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package ec2_test
     5  
     6  import (
     7  	"strconv"
     8  
     9  	jc "github.com/juju/testing/checkers"
    10  	amzec2 "gopkg.in/amz.v2/ec2"
    11  	gc "gopkg.in/check.v1"
    12  
    13  	"github.com/juju/juju/environs"
    14  	"github.com/juju/juju/provider/ec2"
    15  	"github.com/juju/juju/storage"
    16  	"github.com/juju/juju/testing"
    17  )
    18  
    19  type DisksSuite struct {
    20  	testing.BaseSuite
    21  }
    22  
    23  var _ = gc.Suite(&DisksSuite{})
    24  
    25  func (*DisksSuite) TestBlockDeviceNamer(c *gc.C) {
    26  	var nextName func() (string, string, error)
    27  	expect := func(expectRequest, expectActual string) {
    28  		request, actual, err := nextName()
    29  		c.Assert(err, jc.ErrorIsNil)
    30  		c.Assert(request, gc.Equals, expectRequest)
    31  		c.Assert(actual, gc.Equals, expectActual)
    32  	}
    33  	expectN := func(expectRequest, expectActual string) {
    34  		for i := 1; i <= 6; i++ {
    35  			request, actual, err := nextName()
    36  			c.Assert(err, jc.ErrorIsNil)
    37  			c.Assert(request, gc.Equals, expectRequest+strconv.Itoa(i))
    38  			c.Assert(actual, gc.Equals, expectActual+strconv.Itoa(i))
    39  		}
    40  	}
    41  	expectErr := func(expectErr string) {
    42  		_, _, err := nextName()
    43  		c.Assert(err, gc.ErrorMatches, expectErr)
    44  	}
    45  
    46  	// First without numbers.
    47  	nextName = ec2.BlockDeviceNamer(false)
    48  	expect("/dev/sdf", "xvdf")
    49  	expect("/dev/sdg", "xvdg")
    50  	expect("/dev/sdh", "xvdh")
    51  	expect("/dev/sdi", "xvdi")
    52  	expect("/dev/sdj", "xvdj")
    53  	expect("/dev/sdk", "xvdk")
    54  	expect("/dev/sdl", "xvdl")
    55  	expect("/dev/sdm", "xvdm")
    56  	expect("/dev/sdn", "xvdn")
    57  	expect("/dev/sdo", "xvdo")
    58  	expect("/dev/sdp", "xvdp")
    59  	expectErr("too many EBS volumes to attach")
    60  
    61  	// Now with numbers.
    62  	nextName = ec2.BlockDeviceNamer(true)
    63  	expect("/dev/sdf1", "xvdf1")
    64  	expect("/dev/sdf2", "xvdf2")
    65  	expect("/dev/sdf3", "xvdf3")
    66  	expect("/dev/sdf4", "xvdf4")
    67  	expect("/dev/sdf5", "xvdf5")
    68  	expect("/dev/sdf6", "xvdf6")
    69  	expectN("/dev/sdg", "xvdg")
    70  	expectN("/dev/sdh", "xvdh")
    71  	expectN("/dev/sdi", "xvdi")
    72  	expectN("/dev/sdj", "xvdj")
    73  	expectN("/dev/sdk", "xvdk")
    74  	expectN("/dev/sdl", "xvdl")
    75  	expectN("/dev/sdm", "xvdm")
    76  	expectN("/dev/sdn", "xvdn")
    77  	expectN("/dev/sdo", "xvdo")
    78  	expectN("/dev/sdp", "xvdp")
    79  	expectErr("too many EBS volumes to attach")
    80  }
    81  
    82  func (*DisksSuite) TestGetBlockDeviceMappings(c *gc.C) {
    83  	mapping, blockDeviceInfo, err := ec2.GetBlockDeviceMappings(
    84  		"pv", &environs.StartInstanceParams{Volumes: []storage.VolumeParams{{
    85  			Name: "0", Size: 1234,
    86  		}, {
    87  			Name: "1", Size: 4321,
    88  		}}},
    89  	)
    90  	c.Assert(err, jc.ErrorIsNil)
    91  	c.Assert(mapping, gc.DeepEquals, []amzec2.BlockDeviceMapping{{
    92  		VolumeSize: 8,
    93  		DeviceName: "/dev/sda1",
    94  	}, {
    95  		VirtualName: "ephemeral0",
    96  		DeviceName:  "/dev/sdb",
    97  	}, {
    98  		VirtualName: "ephemeral1",
    99  		DeviceName:  "/dev/sdc",
   100  	}, {
   101  		VirtualName: "ephemeral2",
   102  		DeviceName:  "/dev/sdd",
   103  	}, {
   104  		VirtualName: "ephemeral3",
   105  		DeviceName:  "/dev/sde",
   106  	}, {
   107  		VolumeSize: 2,
   108  		DeviceName: "/dev/sdf1",
   109  	}, {
   110  		VolumeSize: 5,
   111  		DeviceName: "/dev/sdf2",
   112  	}})
   113  	c.Assert(blockDeviceInfo, gc.DeepEquals, []storage.BlockDevice{{
   114  		Name:       "0",
   115  		DeviceName: "xvdf1",
   116  		Size:       2048,
   117  	}, {
   118  		Name:       "1",
   119  		DeviceName: "xvdf2",
   120  		Size:       5120,
   121  	}})
   122  }