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 }