github.com/rothwerx/packer@v0.9.0/builder/amazon/common/block_device_test.go (about) 1 package common 2 3 import ( 4 "reflect" 5 "testing" 6 7 "github.com/aws/aws-sdk-go/aws" 8 "github.com/aws/aws-sdk-go/service/ec2" 9 ) 10 11 func TestBlockDevice(t *testing.T) { 12 cases := []struct { 13 Config *BlockDevice 14 Result *ec2.BlockDeviceMapping 15 }{ 16 { 17 Config: &BlockDevice{ 18 DeviceName: "/dev/sdb", 19 SnapshotId: "snap-1234", 20 VolumeType: "standard", 21 VolumeSize: 8, 22 DeleteOnTermination: true, 23 }, 24 25 Result: &ec2.BlockDeviceMapping{ 26 DeviceName: aws.String("/dev/sdb"), 27 Ebs: &ec2.EbsBlockDevice{ 28 SnapshotId: aws.String("snap-1234"), 29 VolumeType: aws.String("standard"), 30 VolumeSize: aws.Int64(8), 31 DeleteOnTermination: aws.Bool(true), 32 }, 33 }, 34 }, 35 { 36 Config: &BlockDevice{ 37 DeviceName: "/dev/sdb", 38 VolumeSize: 8, 39 }, 40 41 Result: &ec2.BlockDeviceMapping{ 42 DeviceName: aws.String("/dev/sdb"), 43 Ebs: &ec2.EbsBlockDevice{ 44 VolumeSize: aws.Int64(8), 45 DeleteOnTermination: aws.Bool(false), 46 }, 47 }, 48 }, 49 { 50 Config: &BlockDevice{ 51 DeviceName: "/dev/sdb", 52 VolumeType: "io1", 53 VolumeSize: 8, 54 DeleteOnTermination: true, 55 IOPS: 1000, 56 }, 57 58 Result: &ec2.BlockDeviceMapping{ 59 DeviceName: aws.String("/dev/sdb"), 60 Ebs: &ec2.EbsBlockDevice{ 61 VolumeType: aws.String("io1"), 62 VolumeSize: aws.Int64(8), 63 DeleteOnTermination: aws.Bool(true), 64 Iops: aws.Int64(1000), 65 }, 66 }, 67 }, 68 { 69 Config: &BlockDevice{ 70 DeviceName: "/dev/sdb", 71 VolumeType: "gp2", 72 VolumeSize: 8, 73 DeleteOnTermination: true, 74 Encrypted: true, 75 }, 76 77 Result: &ec2.BlockDeviceMapping{ 78 DeviceName: aws.String("/dev/sdb"), 79 Ebs: &ec2.EbsBlockDevice{ 80 VolumeType: aws.String("gp2"), 81 VolumeSize: aws.Int64(8), 82 DeleteOnTermination: aws.Bool(true), 83 Encrypted: aws.Bool(true), 84 }, 85 }, 86 }, 87 { 88 Config: &BlockDevice{ 89 DeviceName: "/dev/sdb", 90 VolumeType: "standard", 91 DeleteOnTermination: true, 92 }, 93 94 Result: &ec2.BlockDeviceMapping{ 95 DeviceName: aws.String("/dev/sdb"), 96 Ebs: &ec2.EbsBlockDevice{ 97 VolumeType: aws.String("standard"), 98 DeleteOnTermination: aws.Bool(true), 99 }, 100 }, 101 }, 102 { 103 Config: &BlockDevice{ 104 DeviceName: "/dev/sdb", 105 VirtualName: "ephemeral0", 106 }, 107 108 Result: &ec2.BlockDeviceMapping{ 109 DeviceName: aws.String("/dev/sdb"), 110 VirtualName: aws.String("ephemeral0"), 111 }, 112 }, 113 { 114 Config: &BlockDevice{ 115 DeviceName: "/dev/sdb", 116 NoDevice: true, 117 }, 118 119 Result: &ec2.BlockDeviceMapping{ 120 DeviceName: aws.String("/dev/sdb"), 121 NoDevice: aws.String(""), 122 }, 123 }, 124 } 125 126 for _, tc := range cases { 127 blockDevices := BlockDevices{ 128 AMIMappings: []BlockDevice{*tc.Config}, 129 LaunchMappings: []BlockDevice{*tc.Config}, 130 } 131 132 expected := []*ec2.BlockDeviceMapping{tc.Result} 133 got := blockDevices.BuildAMIDevices() 134 if !reflect.DeepEqual(expected, got) { 135 t.Fatalf("Bad block device, \nexpected: %#v\n\ngot: %#v", 136 expected, got) 137 } 138 139 if !reflect.DeepEqual(expected, blockDevices.BuildLaunchDevices()) { 140 t.Fatalf("Bad block device, \nexpected: %#v\n\ngot: %#v", 141 expected, 142 blockDevices.BuildLaunchDevices()) 143 } 144 } 145 }