github.com/rahart/packer@v0.12.2-0.20161229105310-282bb6ad370f/builder/hyperv/iso/builder_test.go (about) 1 package iso 2 3 import ( 4 "reflect" 5 "testing" 6 7 "github.com/mitchellh/packer/packer" 8 ) 9 10 func testConfig() map[string]interface{} { 11 return map[string]interface{}{ 12 "iso_checksum": "foo", 13 "iso_checksum_type": "md5", 14 "iso_url": "http://www.packer.io", 15 "shutdown_command": "yes", 16 "ssh_username": "foo", 17 "ram_size": 64, 18 "disk_size": 256, 19 "guest_additions_mode": "none", 20 packer.BuildNameConfigKey: "foo", 21 } 22 } 23 24 func TestBuilder_ImplementsBuilder(t *testing.T) { 25 var raw interface{} 26 raw = &Builder{} 27 if _, ok := raw.(packer.Builder); !ok { 28 t.Error("Builder must implement builder.") 29 } 30 } 31 32 func TestBuilderPrepare_Defaults(t *testing.T) { 33 var b Builder 34 config := testConfig() 35 36 warns, err := b.Prepare(config) 37 if len(warns) > 0 { 38 t.Fatalf("bad: %#v", warns) 39 } 40 if err != nil { 41 t.Fatalf("should not have error: %s", err) 42 } 43 44 if b.config.VMName != "packer-foo" { 45 t.Errorf("bad vm name: %s", b.config.VMName) 46 } 47 } 48 49 func TestBuilderPrepare_DiskSize(t *testing.T) { 50 var b Builder 51 config := testConfig() 52 53 delete(config, "disk_size") 54 warns, err := b.Prepare(config) 55 if len(warns) > 0 { 56 t.Fatalf("bad: %#v", warns) 57 } 58 if err != nil { 59 t.Fatalf("bad err: %s", err) 60 } 61 62 if b.config.DiskSize != 40*1024 { 63 t.Fatalf("bad size: %d", b.config.DiskSize) 64 } 65 66 config["disk_size"] = 256 67 b = Builder{} 68 warns, err = b.Prepare(config) 69 if len(warns) > 0 { 70 t.Fatalf("bad: %#v", warns) 71 } 72 if err != nil { 73 t.Fatalf("should not have error: %s", err) 74 } 75 76 if b.config.DiskSize != 256 { 77 t.Fatalf("bad size: %d", b.config.DiskSize) 78 } 79 } 80 81 func TestBuilderPrepare_InvalidKey(t *testing.T) { 82 var b Builder 83 config := testConfig() 84 85 // Add a random key 86 config["i_should_not_be_valid"] = true 87 warns, err := b.Prepare(config) 88 if len(warns) > 0 { 89 t.Fatalf("bad: %#v", warns) 90 } 91 if err == nil { 92 t.Fatal("should have error") 93 } 94 } 95 96 func TestBuilderPrepare_ISOChecksum(t *testing.T) { 97 var b Builder 98 config := testConfig() 99 100 // Test bad 101 config["iso_checksum"] = "" 102 warns, err := b.Prepare(config) 103 if len(warns) > 0 { 104 t.Fatalf("bad: %#v", warns) 105 } 106 if err == nil { 107 t.Fatal("should have error") 108 } 109 110 // Test good 111 config["iso_checksum"] = "FOo" 112 b = Builder{} 113 warns, err = b.Prepare(config) 114 if len(warns) > 0 { 115 t.Fatalf("bad: %#v", warns) 116 } 117 if err != nil { 118 t.Fatalf("should not have error: %s", err) 119 } 120 121 if b.config.ISOChecksum != "foo" { 122 t.Fatalf("should've lowercased: %s", b.config.ISOChecksum) 123 } 124 } 125 126 func TestBuilderPrepare_ISOChecksumType(t *testing.T) { 127 var b Builder 128 config := testConfig() 129 130 // Test bad 131 config["iso_checksum_type"] = "" 132 warns, err := b.Prepare(config) 133 if len(warns) > 0 { 134 t.Fatalf("bad: %#v", warns) 135 } 136 if err == nil { 137 t.Fatal("should have error") 138 } 139 140 // Test good 141 config["iso_checksum_type"] = "mD5" 142 b = Builder{} 143 warns, err = b.Prepare(config) 144 if len(warns) > 0 { 145 t.Fatalf("bad: %#v", warns) 146 } 147 if err != nil { 148 t.Fatalf("should not have error: %s", err) 149 } 150 151 if b.config.ISOChecksumType != "md5" { 152 t.Fatalf("should've lowercased: %s", b.config.ISOChecksumType) 153 } 154 155 // Test unknown 156 config["iso_checksum_type"] = "fake" 157 b = Builder{} 158 warns, err = b.Prepare(config) 159 if len(warns) > 0 { 160 t.Fatalf("bad: %#v", warns) 161 } 162 if err == nil { 163 t.Fatal("should have error") 164 } 165 166 // Test none 167 config["iso_checksum_type"] = "none" 168 b = Builder{} 169 warns, err = b.Prepare(config) 170 if len(warns) == 0 { 171 t.Fatalf("bad: %#v", warns) 172 } 173 if err != nil { 174 t.Fatalf("should not have error: %s", err) 175 } 176 177 if b.config.ISOChecksumType != "none" { 178 t.Fatalf("should've lowercased: %s", b.config.ISOChecksumType) 179 } 180 } 181 182 func TestBuilderPrepare_ISOUrl(t *testing.T) { 183 var b Builder 184 config := testConfig() 185 delete(config, "iso_url") 186 delete(config, "iso_urls") 187 188 // Test both epty 189 config["iso_url"] = "" 190 b = Builder{} 191 warns, err := b.Prepare(config) 192 if len(warns) > 0 { 193 t.Fatalf("bad: %#v", warns) 194 } 195 if err == nil { 196 t.Fatal("should have error") 197 } 198 199 // Test iso_url set 200 config["iso_url"] = "http://www.packer.io" 201 b = Builder{} 202 warns, err = b.Prepare(config) 203 if len(warns) > 0 { 204 t.Fatalf("bad: %#v", warns) 205 } 206 if err != nil { 207 t.Errorf("should not have error: %s", err) 208 } 209 210 expected := []string{"http://www.packer.io"} 211 if !reflect.DeepEqual(b.config.ISOUrls, expected) { 212 t.Fatalf("bad: %#v", b.config.ISOUrls) 213 } 214 215 // Test both set 216 config["iso_url"] = "http://www.packer.io" 217 config["iso_urls"] = []string{"http://www.packer.io"} 218 b = Builder{} 219 warns, err = b.Prepare(config) 220 if len(warns) > 0 { 221 t.Fatalf("bad: %#v", warns) 222 } 223 if err == nil { 224 t.Fatal("should have error") 225 } 226 227 // Test just iso_urls set 228 delete(config, "iso_url") 229 config["iso_urls"] = []string{ 230 "http://www.packer.io", 231 "http://www.hashicorp.com", 232 } 233 234 b = Builder{} 235 warns, err = b.Prepare(config) 236 if len(warns) > 0 { 237 t.Fatalf("bad: %#v", warns) 238 } 239 if err != nil { 240 t.Errorf("should not have error: %s", err) 241 } 242 243 expected = []string{ 244 "http://www.packer.io", 245 "http://www.hashicorp.com", 246 } 247 if !reflect.DeepEqual(b.config.ISOUrls, expected) { 248 t.Fatalf("bad: %#v", b.config.ISOUrls) 249 } 250 }