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  }