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