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  }