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