github.com/terramate-io/tf@v0.0.0-20230830114523-fce866b4dfcd/communicator/winrm/provisioner_test.go (about) 1 // Copyright (c) HashiCorp, Inc. 2 // SPDX-License-Identifier: MPL-2.0 3 4 package winrm 5 6 import ( 7 "testing" 8 9 "github.com/zclconf/go-cty/cty" 10 ) 11 12 func TestProvisioner_defaultHTTPSPort(t *testing.T) { 13 v := cty.ObjectVal(map[string]cty.Value{ 14 "type": cty.StringVal("winrm"), 15 "user": cty.StringVal("Administrator"), 16 "password": cty.StringVal("supersecret"), 17 "host": cty.StringVal("127.0.0.1"), 18 "https": cty.True, 19 }) 20 21 conf, err := parseConnectionInfo(v) 22 if err != nil { 23 t.Fatalf("err: %v", err) 24 } 25 if conf.Port != 5986 { 26 t.Fatalf("expected: %v: got: %v", 5986, conf) 27 } 28 if conf.HTTPS != true { 29 t.Fatalf("expected: %v: got: %v", true, conf) 30 } 31 } 32 33 func TestProvisioner_connInfo(t *testing.T) { 34 v := cty.ObjectVal(map[string]cty.Value{ 35 "type": cty.StringVal("winrm"), 36 "user": cty.StringVal("Administrator"), 37 "password": cty.StringVal("supersecret"), 38 "host": cty.StringVal("127.0.0.1"), 39 "port": cty.StringVal("5985"), 40 "https": cty.True, 41 "use_ntlm": cty.True, 42 "timeout": cty.StringVal("30s"), 43 }) 44 45 conf, err := parseConnectionInfo(v) 46 if err != nil { 47 t.Fatalf("err: %v", err) 48 } 49 50 if conf.User != "Administrator" { 51 t.Fatalf("expected: %v: got: %v", "Administrator", conf) 52 } 53 if conf.Password != "supersecret" { 54 t.Fatalf("expected: %v: got: %v", "supersecret", conf) 55 } 56 if conf.Host != "127.0.0.1" { 57 t.Fatalf("expected: %v: got: %v", "127.0.0.1", conf) 58 } 59 if conf.Port != 5985 { 60 t.Fatalf("expected: %v: got: %v", 5985, conf) 61 } 62 if conf.HTTPS != true { 63 t.Fatalf("expected: %v: got: %v", true, conf) 64 } 65 if conf.NTLM != true { 66 t.Fatalf("expected: %v: got: %v", true, conf) 67 } 68 if conf.Timeout != "30s" { 69 t.Fatalf("expected: %v: got: %v", "30s", conf) 70 } 71 if conf.ScriptPath != DefaultScriptPath { 72 t.Fatalf("expected: %v: got: %v", DefaultScriptPath, conf) 73 } 74 } 75 76 func TestProvisioner_connInfoCACert(t *testing.T) { 77 caCert := ` 78 -----BEGIN CERTIFICATE----- 79 MIIDBjCCAe4CCQCGWwBmOiHQdTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJB 80 VTETMBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0 81 cyBQdHkgTHRkMB4XDTE2MDYyMTE2MzM0MVoXDTE3MDYyMTE2MzM0MVowRTELMAkG 82 A1UEBhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0 83 IFdpZGdpdHMgUHR5IEx0ZDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB 84 AL+LFlsCJG5txZp4yuu+lQnuUrgBXRG+irQqcTXlV91Bp5hpmRIyhnGCtWxxDBUL 85 xrh4WN3VV/0jDzKT976oLgOy3hj56Cdqf+JlZ1qgMN5bHB3mm3aVWnrnsLbBsfwZ 86 SEbk3Kht/cE1nK2toNVW+rznS3m+eoV3Zn/DUNwGlZr42hGNs6ETn2jURY78ETqR 87 mW47xvjf86eIo7vULHJaY6xyarPqkL8DZazOmvY06hUGvGwGBny7gugfXqDG+I8n 88 cPBsGJGSAmHmVV8o0RCB9UjY+TvSMQRpEDoVlvyrGuglsD8to/4+7UcsuDGlRYN6 89 jmIOC37mOi/jwRfWL1YUa4MCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAPDxTH0oQ 90 JjKXoJgkmQxurB81RfnK/NrswJVzWbOv6ejcbhwh+/ZgJTMc15BrYcxU6vUW1V/i 91 Z7APU0qJ0icECACML+a2fRI7YdLCTiPIOmY66HY8MZHAn3dGjU5TeiUflC0n0zkP 92 mxKJe43kcYLNDItbfvUDo/GoxTXrC3EFVZyU0RhFzoVJdODlTHXMVFCzcbQEBrBJ 93 xKdShCEc8nFMneZcGFeEU488ntZoWzzms8/QpYrKa5S0Sd7umEU2Kwu4HTkvUFg/ 94 CqDUFjhydXxYRsxXBBrEiLOE5BdtJR1sH/QHxIJe23C9iHI2nS1NbLziNEApLwC4 95 GnSud83VUo9G9w== 96 -----END CERTIFICATE----- 97 ` 98 v := cty.ObjectVal(map[string]cty.Value{ 99 "type": cty.StringVal("winrm"), 100 "user": cty.StringVal("Administrator"), 101 "password": cty.StringVal("supersecret"), 102 "host": cty.StringVal("127.0.0.1"), 103 "port": cty.StringVal("5985"), 104 "https": cty.True, 105 "timeout": cty.StringVal("30s"), 106 "cacert": cty.StringVal(caCert), 107 }) 108 109 conf, err := parseConnectionInfo(v) 110 if err != nil { 111 t.Fatalf("err: %v", err) 112 } 113 114 if conf.User != "Administrator" { 115 t.Fatalf("expected: %v: got: %v", "Administrator", conf) 116 } 117 if conf.Password != "supersecret" { 118 t.Fatalf("expected: %v: got: %v", "supersecret", conf) 119 } 120 if conf.Host != "127.0.0.1" { 121 t.Fatalf("expected: %v: got: %v", "127.0.0.1", conf) 122 } 123 if conf.Port != 5985 { 124 t.Fatalf("expected: %v: got: %v", 5985, conf) 125 } 126 if conf.HTTPS != true { 127 t.Fatalf("expected: %v: got: %v", true, conf) 128 } 129 if conf.Timeout != "30s" { 130 t.Fatalf("expected: %v: got: %v", "30s", conf) 131 } 132 if conf.ScriptPath != DefaultScriptPath { 133 t.Fatalf("expected: %v: got: %v", DefaultScriptPath, conf) 134 } 135 if conf.CACert != caCert { 136 t.Fatalf("expected: %v: got: %v", caCert, conf.CACert) 137 } 138 } 139 140 func TestProvisioner_connInfoIpv6(t *testing.T) { 141 v := cty.ObjectVal(map[string]cty.Value{ 142 "type": cty.StringVal("winrm"), 143 "user": cty.StringVal("Administrator"), 144 "password": cty.StringVal("supersecret"), 145 "host": cty.StringVal("::1"), 146 "port": cty.StringVal("5985"), 147 "https": cty.True, 148 "timeout": cty.StringVal("30s"), 149 }) 150 151 conf, err := parseConnectionInfo(v) 152 if err != nil { 153 t.Fatalf("err: %v", err) 154 } 155 156 if conf.User != "Administrator" { 157 t.Fatalf("expected: %v: got: %v", "Administrator", conf) 158 } 159 if conf.Password != "supersecret" { 160 t.Fatalf("expected: %v: got: %v", "supersecret", conf) 161 } 162 if conf.Host != "[::1]" { 163 t.Fatalf("expected: %v: got: %v", "[::1]", conf) 164 } 165 if conf.Port != 5985 { 166 t.Fatalf("expected: %v: got: %v", 5985, conf) 167 } 168 if conf.HTTPS != true { 169 t.Fatalf("expected: %v: got: %v", true, conf) 170 } 171 if conf.Timeout != "30s" { 172 t.Fatalf("expected: %v: got: %v", "30s", conf) 173 } 174 if conf.ScriptPath != DefaultScriptPath { 175 t.Fatalf("expected: %v: got: %v", DefaultScriptPath, conf) 176 } 177 } 178 179 func TestProvisioner_connInfoHostname(t *testing.T) { 180 v := cty.ObjectVal(map[string]cty.Value{ 181 "type": cty.StringVal("winrm"), 182 "user": cty.StringVal("Administrator"), 183 "password": cty.StringVal("supersecret"), 184 "host": cty.StringVal("example.com"), 185 "port": cty.StringVal("5985"), 186 "https": cty.True, 187 "timeout": cty.StringVal("30s"), 188 }) 189 190 conf, err := parseConnectionInfo(v) 191 if err != nil { 192 t.Fatalf("err: %v", err) 193 } 194 195 if conf.User != "Administrator" { 196 t.Fatalf("expected: %v: got: %v", "Administrator", conf) 197 } 198 if conf.Password != "supersecret" { 199 t.Fatalf("expected: %v: got: %v", "supersecret", conf) 200 } 201 if conf.Host != "example.com" { 202 t.Fatalf("expected: %v: got: %v", "example.com", conf) 203 } 204 if conf.Port != 5985 { 205 t.Fatalf("expected: %v: got: %v", 5985, conf) 206 } 207 if conf.HTTPS != true { 208 t.Fatalf("expected: %v: got: %v", true, conf) 209 } 210 if conf.Timeout != "30s" { 211 t.Fatalf("expected: %v: got: %v", "30s", conf) 212 } 213 if conf.ScriptPath != DefaultScriptPath { 214 t.Fatalf("expected: %v: got: %v", DefaultScriptPath, conf) 215 } 216 } 217 218 func TestProvisioner_formatDuration(t *testing.T) { 219 cases := map[string]struct { 220 Config map[string]cty.Value 221 Result string 222 }{ 223 "testSeconds": { 224 Config: map[string]cty.Value{ 225 "timeout": cty.StringVal("90s"), 226 }, 227 228 Result: "PT1M30S", 229 }, 230 "testMinutes": { 231 Config: map[string]cty.Value{ 232 "timeout": cty.StringVal("5m"), 233 }, 234 235 Result: "PT5M", 236 }, 237 "testHours": { 238 Config: map[string]cty.Value{ 239 "timeout": cty.StringVal("1h"), 240 }, 241 242 Result: "PT1H", 243 }, 244 } 245 246 for name, tc := range cases { 247 // host is required in the schema 248 tc.Config["host"] = cty.StringVal("") 249 250 conf, err := parseConnectionInfo(cty.ObjectVal(tc.Config)) 251 if err != nil { 252 t.Fatalf("err: %v", err) 253 } 254 255 result := formatDuration(conf.TimeoutVal) 256 if result != tc.Result { 257 t.Fatalf("%s: expected: %s got: %s", name, tc.Result, result) 258 } 259 } 260 }