github.com/tonnydourado/packer@v0.6.1-0.20140701134019-5d0cd9676a37/builder/parallels/iso/builder_test.go (about) 1 package iso 2 3 import ( 4 "github.com/mitchellh/packer/builder/parallels/common" 5 "github.com/mitchellh/packer/packer" 6 "reflect" 7 "testing" 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.google.com/", 15 "shutdown_command": "yes", 16 "ssh_username": "foo", 17 18 packer.BuildNameConfigKey: "foo", 19 } 20 } 21 22 func TestBuilder_ImplementsBuilder(t *testing.T) { 23 var raw interface{} 24 raw = &Builder{} 25 if _, ok := raw.(packer.Builder); !ok { 26 t.Error("Builder must implement builder.") 27 } 28 } 29 30 func TestBuilderPrepare_Defaults(t *testing.T) { 31 var b Builder 32 config := testConfig() 33 warns, err := b.Prepare(config) 34 if len(warns) > 0 { 35 t.Fatalf("bad: %#v", warns) 36 } 37 if err != nil { 38 t.Fatalf("should not have error: %s", err) 39 } 40 41 if b.config.ParallelsToolsMode != common.ParallelsToolsModeUpload { 42 t.Errorf("bad parallels tools mode: %s", b.config.ParallelsToolsMode) 43 } 44 45 if b.config.GuestOSType != "other" { 46 t.Errorf("bad guest OS type: %s", b.config.GuestOSType) 47 } 48 49 if b.config.VMName != "packer-foo" { 50 t.Errorf("bad vm name: %s", b.config.VMName) 51 } 52 } 53 54 func TestBuilderPrepare_DiskSize(t *testing.T) { 55 var b Builder 56 config := testConfig() 57 58 delete(config, "disk_size") 59 warns, err := b.Prepare(config) 60 if len(warns) > 0 { 61 t.Fatalf("bad: %#v", warns) 62 } 63 if err != nil { 64 t.Fatalf("bad err: %s", err) 65 } 66 67 if b.config.DiskSize != 40000 { 68 t.Fatalf("bad size: %d", b.config.DiskSize) 69 } 70 71 config["disk_size"] = 60000 72 b = Builder{} 73 warns, err = b.Prepare(config) 74 if len(warns) > 0 { 75 t.Fatalf("bad: %#v", warns) 76 } 77 if err != nil { 78 t.Fatalf("should not have error: %s", err) 79 } 80 81 if b.config.DiskSize != 60000 { 82 t.Fatalf("bad size: %s", b.config.DiskSize) 83 } 84 } 85 86 func TestBuilderPrepare_ParallelsToolsMode(t *testing.T) { 87 var b Builder 88 config := testConfig() 89 90 // test default mode 91 delete(config, "parallels_tools_mode") 92 warns, err := b.Prepare(config) 93 if len(warns) > 0 { 94 t.Fatalf("bad: %#v", warns) 95 } 96 if err != nil { 97 t.Fatalf("bad err: %s", err) 98 } 99 100 // Test another mode 101 config["parallels_tools_mode"] = "attach" 102 b = Builder{} 103 warns, err = b.Prepare(config) 104 if len(warns) > 0 { 105 t.Fatalf("bad: %#v", warns) 106 } 107 if err != nil { 108 t.Fatalf("should not have error: %s", err) 109 } 110 111 if b.config.ParallelsToolsMode != common.ParallelsToolsModeAttach { 112 t.Fatalf("bad: %s", b.config.ParallelsToolsMode) 113 } 114 115 // Test bad mode 116 config["parllels_tools_mode"] = "teleport" 117 b = Builder{} 118 warns, err = b.Prepare(config) 119 if len(warns) > 0 { 120 t.Fatalf("bad: %#v", warns) 121 } 122 if err == nil { 123 t.Fatal("should error") 124 } 125 } 126 127 func TestBuilderPrepare_ParallelsToolsGuestPath(t *testing.T) { 128 var b Builder 129 config := testConfig() 130 131 delete(config, "parallesl_tools_guest_path") 132 warns, err := b.Prepare(config) 133 if len(warns) > 0 { 134 t.Fatalf("bad: %#v", warns) 135 } 136 if err != nil { 137 t.Fatalf("bad err: %s", err) 138 } 139 140 if b.config.ParallelsToolsGuestPath != "prl-tools.iso" { 141 t.Fatalf("bad: %s", b.config.ParallelsToolsGuestPath) 142 } 143 144 config["parallels_tools_guest_path"] = "foo" 145 b = Builder{} 146 warns, err = b.Prepare(config) 147 if len(warns) > 0 { 148 t.Fatalf("bad: %#v", warns) 149 } 150 if err != nil { 151 t.Fatalf("should not have error: %s", err) 152 } 153 154 if b.config.ParallelsToolsGuestPath != "foo" { 155 t.Fatalf("bad size: %s", b.config.ParallelsToolsGuestPath) 156 } 157 } 158 159 func TestBuilderPrepare_ParallelsToolsHostPath(t *testing.T) { 160 var b Builder 161 config := testConfig() 162 163 config["parallels_tools_host_path"] = "" 164 warns, err := b.Prepare(config) 165 if len(warns) > 0 { 166 t.Fatalf("bad: %#v", warns) 167 } 168 if err != nil { 169 t.Fatalf("err: %s", err) 170 } 171 172 if b.config.ParallelsToolsHostPath != "/Applications/Parallels Desktop.app/Contents/Resources/Tools/prl-tools-other.iso" { 173 t.Fatalf("bad: %s", b.config.ParallelsToolsHostPath) 174 } 175 176 config["parallels_tools_host_path"] = "./prl-tools-lin.iso" 177 b = Builder{} 178 warns, err = b.Prepare(config) 179 if len(warns) > 0 { 180 t.Fatalf("bad: %#v", warns) 181 } 182 if err != nil { 183 t.Errorf("should not have error: %s", err) 184 } 185 } 186 187 func TestBuilderPrepare_HardDriveInterface(t *testing.T) { 188 var b Builder 189 config := testConfig() 190 191 // Test a default boot_wait 192 delete(config, "hard_drive_interface") 193 warns, err := b.Prepare(config) 194 if len(warns) > 0 { 195 t.Fatalf("bad: %#v", warns) 196 } 197 if err != nil { 198 t.Fatalf("err: %s", err) 199 } 200 201 if b.config.HardDriveInterface != "sata" { 202 t.Fatalf("bad: %s", b.config.HardDriveInterface) 203 } 204 205 // Test with a bad 206 config["hard_drive_interface"] = "fake" 207 b = Builder{} 208 warns, err = b.Prepare(config) 209 if len(warns) > 0 { 210 t.Fatalf("bad: %#v", warns) 211 } 212 if err == nil { 213 t.Fatal("should have error") 214 } 215 216 // Test with a good 217 config["hard_drive_interface"] = "scsi" 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.Fatalf("should not have error: %s", err) 225 } 226 } 227 228 func TestBuilderPrepare_HTTPPort(t *testing.T) { 229 var b Builder 230 config := testConfig() 231 232 // Bad 233 config["http_port_min"] = 1000 234 config["http_port_max"] = 500 235 warns, err := b.Prepare(config) 236 if len(warns) > 0 { 237 t.Fatalf("bad: %#v", warns) 238 } 239 if err == nil { 240 t.Fatal("should have error") 241 } 242 243 // Bad 244 config["http_port_min"] = -500 245 b = Builder{} 246 warns, err = b.Prepare(config) 247 if len(warns) > 0 { 248 t.Fatalf("bad: %#v", warns) 249 } 250 if err == nil { 251 t.Fatal("should have error") 252 } 253 254 // Good 255 config["http_port_min"] = 500 256 config["http_port_max"] = 1000 257 b = Builder{} 258 warns, err = b.Prepare(config) 259 if len(warns) > 0 { 260 t.Fatalf("bad: %#v", warns) 261 } 262 if err != nil { 263 t.Fatalf("should not have error: %s", err) 264 } 265 } 266 267 func TestBuilderPrepare_InvalidKey(t *testing.T) { 268 var b Builder 269 config := testConfig() 270 271 // Add a random key 272 config["i_should_not_be_valid"] = true 273 warns, err := b.Prepare(config) 274 if len(warns) > 0 { 275 t.Fatalf("bad: %#v", warns) 276 } 277 if err == nil { 278 t.Fatal("should have error") 279 } 280 } 281 282 func TestBuilderPrepare_ISOChecksum(t *testing.T) { 283 var b Builder 284 config := testConfig() 285 286 // Test bad 287 config["iso_checksum"] = "" 288 warns, err := b.Prepare(config) 289 if len(warns) > 0 { 290 t.Fatalf("bad: %#v", warns) 291 } 292 if err == nil { 293 t.Fatal("should have error") 294 } 295 296 // Test good 297 config["iso_checksum"] = "FOo" 298 b = Builder{} 299 warns, err = b.Prepare(config) 300 if len(warns) > 0 { 301 t.Fatalf("bad: %#v", warns) 302 } 303 if err != nil { 304 t.Fatalf("should not have error: %s", err) 305 } 306 307 if b.config.ISOChecksum != "foo" { 308 t.Fatalf("should've lowercased: %s", b.config.ISOChecksum) 309 } 310 } 311 312 func TestBuilderPrepare_ISOChecksumType(t *testing.T) { 313 var b Builder 314 config := testConfig() 315 316 // Test bad 317 config["iso_checksum_type"] = "" 318 warns, err := b.Prepare(config) 319 if len(warns) > 0 { 320 t.Fatalf("bad: %#v", warns) 321 } 322 if err == nil { 323 t.Fatal("should have error") 324 } 325 326 // Test good 327 config["iso_checksum_type"] = "mD5" 328 b = Builder{} 329 warns, err = b.Prepare(config) 330 if len(warns) > 0 { 331 t.Fatalf("bad: %#v", warns) 332 } 333 if err != nil { 334 t.Fatalf("should not have error: %s", err) 335 } 336 337 if b.config.ISOChecksumType != "md5" { 338 t.Fatalf("should've lowercased: %s", b.config.ISOChecksumType) 339 } 340 341 // Test unknown 342 config["iso_checksum_type"] = "fake" 343 b = Builder{} 344 warns, err = b.Prepare(config) 345 if len(warns) > 0 { 346 t.Fatalf("bad: %#v", warns) 347 } 348 if err == nil { 349 t.Fatal("should have error") 350 } 351 352 // Test none 353 config["iso_checksum_type"] = "none" 354 b = Builder{} 355 warns, err = b.Prepare(config) 356 if len(warns) == 0 { 357 t.Fatalf("bad: %#v", warns) 358 } 359 if err != nil { 360 t.Fatalf("should not have error: %s", err) 361 } 362 363 if b.config.ISOChecksumType != "none" { 364 t.Fatalf("should've lowercased: %s", b.config.ISOChecksumType) 365 } 366 } 367 368 func TestBuilderPrepare_ISOUrl(t *testing.T) { 369 var b Builder 370 config := testConfig() 371 delete(config, "iso_url") 372 delete(config, "iso_urls") 373 374 // Test both epty 375 config["iso_url"] = "" 376 b = Builder{} 377 warns, err := b.Prepare(config) 378 if len(warns) > 0 { 379 t.Fatalf("bad: %#v", warns) 380 } 381 if err == nil { 382 t.Fatal("should have error") 383 } 384 385 // Test iso_url set 386 config["iso_url"] = "http://www.packer.io" 387 b = Builder{} 388 warns, err = b.Prepare(config) 389 if len(warns) > 0 { 390 t.Fatalf("bad: %#v", warns) 391 } 392 if err != nil { 393 t.Errorf("should not have error: %s", err) 394 } 395 396 expected := []string{"http://www.packer.io"} 397 if !reflect.DeepEqual(b.config.ISOUrls, expected) { 398 t.Fatalf("bad: %#v", b.config.ISOUrls) 399 } 400 401 // Test both set 402 config["iso_url"] = "http://www.packer.io" 403 config["iso_urls"] = []string{"http://www.packer.io"} 404 b = Builder{} 405 warns, err = b.Prepare(config) 406 if len(warns) > 0 { 407 t.Fatalf("bad: %#v", warns) 408 } 409 if err == nil { 410 t.Fatal("should have error") 411 } 412 413 // Test just iso_urls set 414 delete(config, "iso_url") 415 config["iso_urls"] = []string{ 416 "http://www.packer.io", 417 "http://www.hashicorp.com", 418 } 419 420 b = Builder{} 421 warns, err = b.Prepare(config) 422 if len(warns) > 0 { 423 t.Fatalf("bad: %#v", warns) 424 } 425 if err != nil { 426 t.Errorf("should not have error: %s", err) 427 } 428 429 expected = []string{ 430 "http://www.packer.io", 431 "http://www.hashicorp.com", 432 } 433 if !reflect.DeepEqual(b.config.ISOUrls, expected) { 434 t.Fatalf("bad: %#v", b.config.ISOUrls) 435 } 436 }