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  }