github.com/kimor79/packer@v0.8.7-0.20151221212622-d507b18eb4cf/builder/vmware/iso/builder_test.go (about)

     1  package iso
     2  
     3  import (
     4  	"io/ioutil"
     5  	"os"
     6  	"reflect"
     7  	"testing"
     8  
     9  	"github.com/mitchellh/packer/packer"
    10  )
    11  
    12  func testConfig() map[string]interface{} {
    13  	return map[string]interface{}{
    14  		"iso_checksum":      "foo",
    15  		"iso_checksum_type": "md5",
    16  		"iso_url":           "http://www.packer.io",
    17  		"shutdown_command":  "foo",
    18  		"ssh_username":      "foo",
    19  
    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  	warns, err := b.Prepare(config)
    36  	if len(warns) > 0 {
    37  		t.Fatalf("bad: %#v", warns)
    38  	}
    39  	if err != nil {
    40  		t.Fatalf("should not have error: %s", err)
    41  	}
    42  
    43  	if b.config.DiskName != "disk" {
    44  		t.Errorf("bad disk name: %s", b.config.DiskName)
    45  	}
    46  
    47  	if b.config.OutputDir != "output-foo" {
    48  		t.Errorf("bad output dir: %s", b.config.OutputDir)
    49  	}
    50  
    51  	if b.config.Version != "9" {
    52  		t.Errorf("bad Version: %s", b.config.Version)
    53  	}
    54  
    55  	if b.config.VMName != "packer-foo" {
    56  		t.Errorf("bad vm name: %s", b.config.VMName)
    57  	}
    58  }
    59  
    60  func TestBuilderPrepare_DiskSize(t *testing.T) {
    61  	var b Builder
    62  	config := testConfig()
    63  
    64  	delete(config, "disk_size")
    65  	warns, err := b.Prepare(config)
    66  	if len(warns) > 0 {
    67  		t.Fatalf("bad: %#v", warns)
    68  	}
    69  	if err != nil {
    70  		t.Fatalf("bad err: %s", err)
    71  	}
    72  
    73  	if b.config.DiskSize != 40000 {
    74  		t.Fatalf("bad size: %d", b.config.DiskSize)
    75  	}
    76  
    77  	config["disk_size"] = 60000
    78  	b = Builder{}
    79  	warns, err = b.Prepare(config)
    80  	if len(warns) > 0 {
    81  		t.Fatalf("bad: %#v", warns)
    82  	}
    83  	if err != nil {
    84  		t.Fatalf("should not have error: %s", err)
    85  	}
    86  
    87  	if b.config.DiskSize != 60000 {
    88  		t.Fatalf("bad size: %d", b.config.DiskSize)
    89  	}
    90  }
    91  
    92  func TestBuilderPrepare_FloppyFiles(t *testing.T) {
    93  	var b Builder
    94  	config := testConfig()
    95  
    96  	delete(config, "floppy_files")
    97  	warns, err := b.Prepare(config)
    98  	if len(warns) > 0 {
    99  		t.Fatalf("bad: %#v", warns)
   100  	}
   101  	if err != nil {
   102  		t.Fatalf("bad err: %s", err)
   103  	}
   104  
   105  	if len(b.config.FloppyFiles) != 0 {
   106  		t.Fatalf("bad: %#v", b.config.FloppyFiles)
   107  	}
   108  
   109  	config["floppy_files"] = []string{"foo", "bar"}
   110  	b = Builder{}
   111  	warns, err = b.Prepare(config)
   112  	if len(warns) > 0 {
   113  		t.Fatalf("bad: %#v", warns)
   114  	}
   115  	if err != nil {
   116  		t.Fatalf("should not have error: %s", err)
   117  	}
   118  
   119  	expected := []string{"foo", "bar"}
   120  	if !reflect.DeepEqual(b.config.FloppyFiles, expected) {
   121  		t.Fatalf("bad: %#v", b.config.FloppyFiles)
   122  	}
   123  }
   124  
   125  func TestBuilderPrepare_Format(t *testing.T) {
   126  	var b Builder
   127  	config := testConfig()
   128  
   129  	// Bad
   130  	config["format"] = "foobar"
   131  	warns, err := b.Prepare(config)
   132  	if len(warns) > 0 {
   133  		t.Fatalf("bad: %#v", warns)
   134  	}
   135  	if err == nil {
   136  		t.Fatal("should have error")
   137  	}
   138  
   139  	goodFormats := []string{"ova", "ovf", "vmx"}
   140  
   141  	for _, format := range goodFormats {
   142  		// Good
   143  		config["format"] = format
   144  		b = Builder{}
   145  		warns, err = b.Prepare(config)
   146  		if len(warns) > 0 {
   147  			t.Fatalf("bad: %#v", warns)
   148  		}
   149  		if err != nil {
   150  			t.Fatalf("should not have error: %s", err)
   151  		}
   152  	}
   153  }
   154  
   155  func TestBuilderPrepare_HTTPPort(t *testing.T) {
   156  	var b Builder
   157  	config := testConfig()
   158  
   159  	// Bad
   160  	config["http_port_min"] = 1000
   161  	config["http_port_max"] = 500
   162  	warns, err := b.Prepare(config)
   163  	if len(warns) > 0 {
   164  		t.Fatalf("bad: %#v", warns)
   165  	}
   166  	if err == nil {
   167  		t.Fatal("should have error")
   168  	}
   169  
   170  	// Bad
   171  	config["http_port_min"] = -500
   172  	b = Builder{}
   173  	warns, err = b.Prepare(config)
   174  	if len(warns) > 0 {
   175  		t.Fatalf("bad: %#v", warns)
   176  	}
   177  	if err == nil {
   178  		t.Fatal("should have error")
   179  	}
   180  
   181  	// Good
   182  	config["http_port_min"] = 500
   183  	config["http_port_max"] = 1000
   184  	b = Builder{}
   185  	warns, err = b.Prepare(config)
   186  	if len(warns) > 0 {
   187  		t.Fatalf("bad: %#v", warns)
   188  	}
   189  	if err != nil {
   190  		t.Fatalf("should not have error: %s", err)
   191  	}
   192  }
   193  
   194  func TestBuilderPrepare_InvalidKey(t *testing.T) {
   195  	var b Builder
   196  	config := testConfig()
   197  
   198  	// Add a random key
   199  	config["i_should_not_be_valid"] = true
   200  	warns, err := b.Prepare(config)
   201  	if len(warns) > 0 {
   202  		t.Fatalf("bad: %#v", warns)
   203  	}
   204  	if err == nil {
   205  		t.Fatal("should have error")
   206  	}
   207  }
   208  
   209  func TestBuilderPrepare_OutputDir(t *testing.T) {
   210  	var b Builder
   211  	config := testConfig()
   212  
   213  	// Test with existing dir
   214  	dir, err := ioutil.TempDir("", "packer")
   215  	if err != nil {
   216  		t.Fatalf("err: %s", err)
   217  	}
   218  	defer os.RemoveAll(dir)
   219  
   220  	config["output_directory"] = dir
   221  	b = Builder{}
   222  	warns, err := b.Prepare(config)
   223  	if len(warns) > 0 {
   224  		t.Fatalf("bad: %#v", warns)
   225  	}
   226  	if err != nil {
   227  		t.Fatalf("err: %s", err)
   228  	}
   229  
   230  	// Test with a good one
   231  	config["output_directory"] = "i-hope-i-dont-exist"
   232  	b = Builder{}
   233  	warns, err = b.Prepare(config)
   234  	if len(warns) > 0 {
   235  		t.Fatalf("bad: %#v", warns)
   236  	}
   237  	if err != nil {
   238  		t.Fatalf("should not have error: %s", err)
   239  	}
   240  }
   241  
   242  func TestBuilderPrepare_ToolsUploadPath(t *testing.T) {
   243  	var b Builder
   244  	config := testConfig()
   245  
   246  	// Test a default
   247  	delete(config, "tools_upload_path")
   248  	warns, err := b.Prepare(config)
   249  	if len(warns) > 0 {
   250  		t.Fatalf("bad: %#v", warns)
   251  	}
   252  	if err != nil {
   253  		t.Fatalf("err: %s", err)
   254  	}
   255  
   256  	if b.config.ToolsUploadPath == "" {
   257  		t.Fatalf("bad value: %s", b.config.ToolsUploadPath)
   258  	}
   259  
   260  	// Test with a bad value
   261  	config["tools_upload_path"] = "{{{nope}"
   262  	b = Builder{}
   263  	warns, err = b.Prepare(config)
   264  	if len(warns) > 0 {
   265  		t.Fatalf("bad: %#v", warns)
   266  	}
   267  	if err == nil {
   268  		t.Fatal("should have error")
   269  	}
   270  
   271  	// Test with a good one
   272  	config["tools_upload_path"] = "hey"
   273  	b = Builder{}
   274  	warns, err = b.Prepare(config)
   275  	if len(warns) > 0 {
   276  		t.Fatalf("bad: %#v", warns)
   277  	}
   278  	if err != nil {
   279  		t.Fatalf("should not have error: %s", err)
   280  	}
   281  }
   282  
   283  func TestBuilderPrepare_VMXTemplatePath(t *testing.T) {
   284  	var b Builder
   285  	config := testConfig()
   286  
   287  	// Test bad
   288  	config["vmx_template_path"] = "/i/dont/exist/forreal"
   289  	warns, err := b.Prepare(config)
   290  	if len(warns) > 0 {
   291  		t.Fatalf("bad: %#v", warns)
   292  	}
   293  	if err == nil {
   294  		t.Fatal("should have error")
   295  	}
   296  
   297  	// Test good
   298  	tf, err := ioutil.TempFile("", "packer")
   299  	if err != nil {
   300  		t.Fatalf("err: %s", err)
   301  	}
   302  	defer os.Remove(tf.Name())
   303  	defer tf.Close()
   304  
   305  	if _, err := tf.Write([]byte("HELLO!")); err != nil {
   306  		t.Fatalf("err: %s", err)
   307  	}
   308  
   309  	config["vmx_template_path"] = tf.Name()
   310  	b = Builder{}
   311  	warns, err = b.Prepare(config)
   312  	if len(warns) > 0 {
   313  		t.Fatalf("bad: %#v", warns)
   314  	}
   315  	if err != nil {
   316  		t.Fatalf("should not have error: %s", err)
   317  	}
   318  
   319  	// Bad template
   320  	tf2, err := ioutil.TempFile("", "packer")
   321  	if err != nil {
   322  		t.Fatalf("err: %s", err)
   323  	}
   324  	defer os.Remove(tf2.Name())
   325  	defer tf2.Close()
   326  
   327  	if _, err := tf2.Write([]byte("{{foo}")); err != nil {
   328  		t.Fatalf("err: %s", err)
   329  	}
   330  
   331  	config["vmx_template_path"] = tf2.Name()
   332  	b = Builder{}
   333  	warns, err = b.Prepare(config)
   334  	if len(warns) > 0 {
   335  		t.Fatalf("bad: %#v", warns)
   336  	}
   337  	if err == nil {
   338  		t.Fatal("should have error")
   339  	}
   340  }
   341  
   342  func TestBuilderPrepare_VNCPort(t *testing.T) {
   343  	var b Builder
   344  	config := testConfig()
   345  
   346  	// Bad
   347  	config["vnc_port_min"] = 1000
   348  	config["vnc_port_max"] = 500
   349  	warns, err := b.Prepare(config)
   350  	if len(warns) > 0 {
   351  		t.Fatalf("bad: %#v", warns)
   352  	}
   353  	if err == nil {
   354  		t.Fatal("should have error")
   355  	}
   356  
   357  	// Bad
   358  	config["vnc_port_min"] = -500
   359  	b = Builder{}
   360  	warns, err = b.Prepare(config)
   361  	if len(warns) > 0 {
   362  		t.Fatalf("bad: %#v", warns)
   363  	}
   364  	if err == nil {
   365  		t.Fatal("should have error")
   366  	}
   367  
   368  	// Good
   369  	config["vnc_port_min"] = 500
   370  	config["vnc_port_max"] = 1000
   371  	b = Builder{}
   372  	warns, err = b.Prepare(config)
   373  	if len(warns) > 0 {
   374  		t.Fatalf("bad: %#v", warns)
   375  	}
   376  	if err != nil {
   377  		t.Fatalf("should not have error: %s", err)
   378  	}
   379  }