package winrm import ( "testing" "github.com/zclconf/go-cty/cty" ) func TestProvisioner_defaultHTTPSPort(t *testing.T) { v := cty.ObjectVal(map[string]cty.Value{ "type": cty.StringVal("winrm"), "user": cty.StringVal("Administrator"), "password": cty.StringVal("supersecret"), "host": cty.StringVal("127.0.0.1"), "https": cty.True, }) conf, err := parseConnectionInfo(v) if err != nil { t.Fatalf("err: %v", err) } if conf.Port != 5986 { t.Fatalf("expected: %v: got: %v", 5986, conf) } if conf.HTTPS != true { t.Fatalf("expected: %v: got: %v", true, conf) } } func TestProvisioner_connInfo(t *testing.T) { v := cty.ObjectVal(map[string]cty.Value{ "type": cty.StringVal("winrm"), "user": cty.StringVal("Administrator"), "password": cty.StringVal("supersecret"), "host": cty.StringVal("127.0.0.1"), "port": cty.StringVal("5985"), "https": cty.True, "use_ntlm": cty.True, "timeout": cty.StringVal("30s"), }) conf, err := parseConnectionInfo(v) if err != nil { t.Fatalf("err: %v", err) } if conf.User != "Administrator" { t.Fatalf("expected: %v: got: %v", "Administrator", conf) } if conf.Password != "supersecret" { t.Fatalf("expected: %v: got: %v", "supersecret", conf) } if conf.Host != "127.0.0.1" { t.Fatalf("expected: %v: got: %v", "127.0.0.1", conf) } if conf.Port != 5985 { t.Fatalf("expected: %v: got: %v", 5985, conf) } if conf.HTTPS != true { t.Fatalf("expected: %v: got: %v", true, conf) } if conf.NTLM != true { t.Fatalf("expected: %v: got: %v", true, conf) } if conf.Timeout != "30s" { t.Fatalf("expected: %v: got: %v", "30s", conf) } if conf.ScriptPath != DefaultScriptPath { t.Fatalf("expected: %v: got: %v", DefaultScriptPath, conf) } } func TestProvisioner_connInfoCACert(t *testing.T) { caCert := ` -----BEGIN CERTIFICATE----- MIIDBjCCAe4CCQCGWwBmOiHQdTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJB VTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0 cyBQdHkgTHRkMB4XDTE2MDYyMTE2MzM0MVoXDTE3MDYyMTE2MzM0MVowRTELMAkG A1UEBhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0 IFdpZGdpdHMgUHR5IEx0ZDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB AL+LFlsCJG5txZp4yuu+lQnuUrgBXRG+irQqcTXlV91Bp5hpmRIyhnGCtWxxDBUL xrh4WN3VV/0jDzKT976oLgOy3hj56Cdqf+JlZ1qgMN5bHB3mm3aVWnrnsLbBsfwZ SEbk3Kht/cE1nK2toNVW+rznS3m+eoV3Zn/DUNwGlZr42hGNs6ETn2jURY78ETqR mW47xvjf86eIo7vULHJaY6xyarPqkL8DZazOmvY06hUGvGwGBny7gugfXqDG+I8n cPBsGJGSAmHmVV8o0RCB9UjY+TvSMQRpEDoVlvyrGuglsD8to/4+7UcsuDGlRYN6 jmIOC37mOi/jwRfWL1YUa4MCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAPDxTH0oQ JjKXoJgkmQxurB81RfnK/NrswJVzWbOv6ejcbhwh+/ZgJTMc15BrYcxU6vUW1V/i Z7APU0qJ0icECACML+a2fRI7YdLCTiPIOmY66HY8MZHAn3dGjU5TeiUflC0n0zkP mxKJe43kcYLNDItbfvUDo/GoxTXrC3EFVZyU0RhFzoVJdODlTHXMVFCzcbQEBrBJ xKdShCEc8nFMneZcGFeEU488ntZoWzzms8/QpYrKa5S0Sd7umEU2Kwu4HTkvUFg/ CqDUFjhydXxYRsxXBBrEiLOE5BdtJR1sH/QHxIJe23C9iHI2nS1NbLziNEApLwC4 GnSud83VUo9G9w== -----END CERTIFICATE----- ` v := cty.ObjectVal(map[string]cty.Value{ "type": cty.StringVal("winrm"), "user": cty.StringVal("Administrator"), "password": cty.StringVal("supersecret"), "host": cty.StringVal("127.0.0.1"), "port": cty.StringVal("5985"), "https": cty.True, "timeout": cty.StringVal("30s"), "cacert": cty.StringVal(caCert), }) conf, err := parseConnectionInfo(v) if err != nil { t.Fatalf("err: %v", err) } if conf.User != "Administrator" { t.Fatalf("expected: %v: got: %v", "Administrator", conf) } if conf.Password != "supersecret" { t.Fatalf("expected: %v: got: %v", "supersecret", conf) } if conf.Host != "127.0.0.1" { t.Fatalf("expected: %v: got: %v", "127.0.0.1", conf) } if conf.Port != 5985 { t.Fatalf("expected: %v: got: %v", 5985, conf) } if conf.HTTPS != true { t.Fatalf("expected: %v: got: %v", true, conf) } if conf.Timeout != "30s" { t.Fatalf("expected: %v: got: %v", "30s", conf) } if conf.ScriptPath != DefaultScriptPath { t.Fatalf("expected: %v: got: %v", DefaultScriptPath, conf) } if conf.CACert != caCert { t.Fatalf("expected: %v: got: %v", caCert, conf.CACert) } } func TestProvisioner_connInfoIpv6(t *testing.T) { v := cty.ObjectVal(map[string]cty.Value{ "type": cty.StringVal("winrm"), "user": cty.StringVal("Administrator"), "password": cty.StringVal("supersecret"), "host": cty.StringVal("::1"), "port": cty.StringVal("5985"), "https": cty.True, "timeout": cty.StringVal("30s"), }) conf, err := parseConnectionInfo(v) if err != nil { t.Fatalf("err: %v", err) } if conf.User != "Administrator" { t.Fatalf("expected: %v: got: %v", "Administrator", conf) } if conf.Password != "supersecret" { t.Fatalf("expected: %v: got: %v", "supersecret", conf) } if conf.Host != "[::1]" { t.Fatalf("expected: %v: got: %v", "[::1]", conf) } if conf.Port != 5985 { t.Fatalf("expected: %v: got: %v", 5985, conf) } if conf.HTTPS != true { t.Fatalf("expected: %v: got: %v", true, conf) } if conf.Timeout != "30s" { t.Fatalf("expected: %v: got: %v", "30s", conf) } if conf.ScriptPath != DefaultScriptPath { t.Fatalf("expected: %v: got: %v", DefaultScriptPath, conf) } } func TestProvisioner_connInfoHostname(t *testing.T) { v := cty.ObjectVal(map[string]cty.Value{ "type": cty.StringVal("winrm"), "user": cty.StringVal("Administrator"), "password": cty.StringVal("supersecret"), "host": cty.StringVal("example.com"), "port": cty.StringVal("5985"), "https": cty.True, "timeout": cty.StringVal("30s"), }) conf, err := parseConnectionInfo(v) if err != nil { t.Fatalf("err: %v", err) } if conf.User != "Administrator" { t.Fatalf("expected: %v: got: %v", "Administrator", conf) } if conf.Password != "supersecret" { t.Fatalf("expected: %v: got: %v", "supersecret", conf) } if conf.Host != "example.com" { t.Fatalf("expected: %v: got: %v", "example.com", conf) } if conf.Port != 5985 { t.Fatalf("expected: %v: got: %v", 5985, conf) } if conf.HTTPS != true { t.Fatalf("expected: %v: got: %v", true, conf) } if conf.Timeout != "30s" { t.Fatalf("expected: %v: got: %v", "30s", conf) } if conf.ScriptPath != DefaultScriptPath { t.Fatalf("expected: %v: got: %v", DefaultScriptPath, conf) } } func TestProvisioner_formatDuration(t *testing.T) { cases := map[string]struct { Config map[string]cty.Value Result string }{ "testSeconds": { Config: map[string]cty.Value{ "timeout": cty.StringVal("90s"), }, Result: "PT1M30S", }, "testMinutes": { Config: map[string]cty.Value{ "timeout": cty.StringVal("5m"), }, Result: "PT5M", }, "testHours": { Config: map[string]cty.Value{ "timeout": cty.StringVal("1h"), }, Result: "PT1H", }, } for name, tc := range cases { // host is required in the schema tc.Config["host"] = cty.StringVal("") conf, err := parseConnectionInfo(cty.ObjectVal(tc.Config)) if err != nil { t.Fatalf("err: %v", err) } result := formatDuration(conf.TimeoutVal) if result != tc.Result { t.Fatalf("%s: expected: %s got: %s", name, tc.Result, result) } } }