github.phpd.cn/hashicorp/packer@v1.3.2/builder/null/config_test.go (about)

     1  package null
     2  
     3  import (
     4  	"os"
     5  	"testing"
     6  
     7  	"github.com/hashicorp/packer/helper/communicator"
     8  )
     9  
    10  func testConfig() map[string]interface{} {
    11  	return map[string]interface{}{
    12  		"ssh_host":     "foo",
    13  		"ssh_username": "bar",
    14  		"ssh_password": "baz",
    15  	}
    16  }
    17  
    18  func testConfigStruct(t *testing.T) *Config {
    19  	c, warns, errs := NewConfig(testConfig())
    20  	if len(warns) > 0 {
    21  		t.Fatalf("bad: %#v", len(warns))
    22  	}
    23  	if errs != nil {
    24  		t.Fatalf("bad: %#v", errs)
    25  	}
    26  
    27  	return c
    28  }
    29  
    30  func testConfigErr(t *testing.T, warns []string, err error) {
    31  	if len(warns) > 0 {
    32  		t.Fatalf("bad: %#v", warns)
    33  	}
    34  	if err == nil {
    35  		t.Fatal("should error")
    36  	}
    37  }
    38  
    39  func testConfigOk(t *testing.T, warns []string, err error) {
    40  	if len(warns) > 0 {
    41  		t.Fatalf("bad: %#v", warns)
    42  	}
    43  	if err != nil {
    44  		t.Fatalf("bad: %s", err)
    45  	}
    46  }
    47  
    48  func TestConfigPrepare_port(t *testing.T) {
    49  	raw := testConfig()
    50  
    51  	// default port should be 22
    52  	delete(raw, "port")
    53  	c, warns, errs := NewConfig(raw)
    54  	if c.CommConfig.SSHPort != 22 {
    55  		t.Fatalf("bad: port should default to 22, not %d", c.CommConfig.SSHPort)
    56  	}
    57  	testConfigOk(t, warns, errs)
    58  }
    59  
    60  func TestConfigPrepare_host(t *testing.T) {
    61  	raw := testConfig()
    62  
    63  	// No host
    64  	delete(raw, "ssh_host")
    65  	_, warns, errs := NewConfig(raw)
    66  	testConfigErr(t, warns, errs)
    67  
    68  	// Good host
    69  	raw["ssh_host"] = "good"
    70  	_, warns, errs = NewConfig(raw)
    71  	testConfigOk(t, warns, errs)
    72  }
    73  
    74  func TestConfigPrepare_sshCredential(t *testing.T) {
    75  	raw := testConfig()
    76  
    77  	// no ssh_password and no ssh_private_key_file
    78  	delete(raw, "ssh_password")
    79  	delete(raw, "ssh_private_key_file")
    80  	_, warns, errs := NewConfig(raw)
    81  	testConfigErr(t, warns, errs)
    82  
    83  	// only ssh_password
    84  	raw["ssh_password"] = "good"
    85  	_, warns, errs = NewConfig(raw)
    86  	testConfigOk(t, warns, errs)
    87  
    88  	// only ssh_private_key_file
    89  	testFile := communicator.TestPEM(t)
    90  	defer os.Remove(testFile)
    91  	raw["ssh_private_key_file"] = testFile
    92  	delete(raw, "ssh_password")
    93  	_, warns, errs = NewConfig(raw)
    94  	testConfigOk(t, warns, errs)
    95  
    96  	// both ssh_password and ssh_private_key_file set
    97  	raw["ssh_password"] = "bad"
    98  	_, warns, errs = NewConfig(raw)
    99  	testConfigErr(t, warns, errs)
   100  }