File: winrm_test.go

package info (click to toggle)
golang-github-juju-utils 0.0~git20200923.4646bfe-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 1,324 kB
  • sloc: makefile: 37
file content (224 lines) | stat: -rw-r--r-- 7,115 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
// Copyright 2016 Canonical ltd.
// Copyright 2016 Cloudbase solutions
// Licensed under the LGPLv3, see licence file for details.

package winrm_test

import (
	"os"
	"testing"

	jc "github.com/juju/testing/checkers"
	"github.com/juju/utils/v2/winrm"
	gc "gopkg.in/check.v1"
)

func TestAll(t *testing.T) {
	gc.TestingT(t)
}

type WinRMSuite struct{}

func (w *WinRMSuite) GetPasswd(password string, c *gc.C) winrm.GetPasswd {
	return func() (string, error) {
		return password, nil
	}
}

var _ = gc.Suite(&WinRMSuite{})

func (w *WinRMSuite) TestValidateClient(c *gc.C) {
	config := winrm.ClientConfig{}

	err := config.Validate()
	// Empty host in client config
	c.Assert(err, gc.NotNil)

	hostname, err := os.Hostname()
	c.Assert(err, gc.IsNil)
	config.Host = hostname
	err = config.Validate()
	// Nil password getter, unable to retrive password
	c.Assert(err, gc.NotNil)

	config.Password = w.GetPasswd("Password123", c)
	err = config.Validate()
	c.Assert(err, gc.IsNil)

	config.Password = nil
	config.Cert = []byte("smth")
	config.Key = []byte("smth")
	err = config.Validate()
	// Cannot use cert auth with http connection
	c.Assert(err, gc.NotNil)

	config.Secure = true
	err = config.Validate()
	// Empty CA cert passed in client config
	c.Assert(err, gc.NotNil)

	config.Password = w.GetPasswd("Password123", c)
	err = config.Validate()
	// Empty CA cert passed in client config
	c.Assert(err, gc.NotNil)

	config.Cert = nil
	config.Key = nil
	config.Password = nil
	// empty key or cert in client config
	config.Insecure = false
	err = config.Validate()
	// Empty CA cert passed in client config
	c.Assert(err, gc.NotNil)

	config.Password = w.GetPasswd("Password123", c)
	config.CACert = []byte("smth")
	err = config.Validate()
	c.Assert(err, gc.IsNil)

}
func (w *WinRMSuite) TestWinrmClient(c *gc.C) {
	hostname, err := os.Hostname()
	c.Assert(err, gc.IsNil)

	config := winrm.ClientConfig{
		User:     "Administrator",
		Host:     hostname,
		Password: w.GetPasswd("Password123", c),
		Secure:   false,
	}

	cli, err := winrm.NewClient(config)
	c.Assert(err, jc.ErrorIsNil)
	c.Assert(cli.Password(), jc.DeepEquals, "Password123")
	c.Assert(cli.Secure(), jc.IsFalse)
}

func (w *WinRMSuite) TestWinrmSecureClient(c *gc.C) {
	hostname, err := os.Hostname()
	c.Assert(err, gc.IsNil)

	config := winrm.ClientConfig{
		User:     "Administrator",
		Host:     hostname,
		Cert:     []byte(clientCert),
		Key:      []byte(clientKey),
		Insecure: true,
		Secure:   true,
	}

	cli, err := winrm.NewClient(config)
	c.Assert(err, gc.IsNil)
	c.Assert("", jc.DeepEquals, cli.Password())
	c.Assert(cli.Secure(), jc.IsTrue)
}

func (w *WinRMSuite) TestWinrmClientPasswd(c *gc.C) {
	hostname, err := os.Hostname()
	c.Assert(err, gc.IsNil)
	config := winrm.ClientConfig{
		User:     "Administrator",
		Host:     hostname,
		Password: w.GetPasswd("Password123", c),
	}

	cli, err := winrm.NewClient(config)
	c.Assert(err, gc.IsNil)
	c.Assert(cli, gc.NotNil)
	c.Assert("Password123", jc.DeepEquals, cli.Password())
	c.Assert(cli.Secure(), jc.IsFalse)
	config.Password = winrm.TTYGetPasswd
	cli, err = winrm.NewClient(config)
	c.Assert(err, gc.NotNil)
	c.Assert(cli, gc.IsNil)
}

func (w *WinRMSuite) TestDefaultClient(c *gc.C) {
	hostname, err := os.Hostname()
	c.Assert(err, gc.IsNil)

	config := winrm.ClientConfig{
		User:     "Administrator",
		Host:     hostname,
		Password: w.GetPasswd("Password123", c),
	}

	cli, err := winrm.NewClient(config)
	c.Assert(err, jc.ErrorIsNil)
	c.Assert(cli, gc.NotNil)
	c.Assert(cli.Password(), jc.DeepEquals, "Password123")
	c.Assert(cli.Secure(), jc.IsFalse)

	configSecure := winrm.ClientConfig{
		User:     "Administrator",
		Host:     hostname,
		Password: nil,
		Cert:     []byte(clientCert),
		Key:      []byte(clientKey),
		Insecure: true,
		Secure:   true,
	}

	cli, err = winrm.NewClient(configSecure)
	c.Assert(cli, gc.NotNil)
	c.Assert("", jc.DeepEquals, cli.Password())
	c.Assert(err, jc.ErrorIsNil)
	c.Assert(cli.Secure(), jc.IsTrue)
}

const clientKey = `
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAxsHQSbJCvWlF+BOn0QDRxJ0aKCAcFWvQryfqMKo+HUMgHQe7
1kgxXNTryi9uuGVTcxo1Jk9RVYBjbLYF56gNWdBv8lHz+K3CGVYJSXF2FTEvV56x
VdZKy3i1Ss8nm8RlOZN6qp8Ko0FJoKXi8IDYcoeNzEQeL/sZl6PUumTe92NQU4Df
NM+W/+p5hFSVAn0Hh/ICdAecInEiwCQinE1ZZcapTR2z8zjWi5zbzpzJM9e8ner1
pMHhGY/JbWqbjKnI7ZMR0qL6Vfc9QlMnuVe9B/1jDnieosUwnG9NTqeQsLCONuEP
0KRv9Dx8MjVYu26NAtspNpMVop+7hT+Mg/o4UQIDAQABAoIBAGCOe3+x6BZYdDNm
aRpyCXY41CI2Jy6I6CKPg4gMzIwutgUkYq5g+AofLkVU8bcHEplSXAu2cM7WxnZj
n07BJ2tAhYH1Kk7fKvJgB7b0Nedps5Qfdgs7Ra6/f2NOa/GSYZKtAOSuyt4ws3Il
5K/uCDjrfYmEdh3dILu4TXoX0vHfIxk2ZUj7FHAXFhyl8+kl2NvwRehJbGFx0JoK
Rm9ku8PtHEO6Geh4lj04qIydDqClRRy7xWyqov6cU8aqVHIOXtCW7siAXo3mrbLi
jXcgaM+gzRDGVvv8yVYhVVWWjJe6KLrDsagG/vquo+wItO6tUbeww08Lut2o6L7G
BFg9aDkCgYEA+tbPCOLESqKBWVExlSuNFZoYKV4RQnEETOFiOOmQ3oPH2HlzDXc5
iG4271hAIkLLjgnaQrc0imiom7nXhUAUtJMBHkM/OSf3wY3k3ev7NkmH6QZvkaXm
2+zaXdtW4/cg1L/smAAcx7yZb9vpkKVKBxxVz1jeHmncJK0BlhXOSV8CgYEAytiv
NkBJjdrl0cXYz7L3Eazv8fFyYYSKVA/pSt1f8DD/Di/PZjfrsjkhoLVrmQy1XD/j
VP4uBt5zeDsXfhXiBaXNDj5k9+LvpXCId0yRACBNI5Cm1+68GVJuz4V88gR2bLua
ZITkzwIe+5dGpNMteitD3AfQ1ePOx1UsIqsS7E8CgYEAkD6syehVhrHSfkFRqP1l
YVG+qTM9655AIdHOAPpXY44Wgya8AbdY71qp3pM6NjmBAsopqAngfeNXak3BYRAL
mBedIgD7v2t7buOhA/kq+fno3RjlWbU0f63BmQ2D9w3q5E0FyhbudfG/rnKg6pwS
aOpjchwhhw3LGZAfhGY/vTMCgYA8pXAtHidfnBSeFTLvVih8RmIuyetSsJfS7jbn
xSwL2fpHuY+elhWH4YDmVZdn2N7YR9ml7aDBOPz482HgtpYu7hVSruDtJBJWOkDy
uheYHBA0E+luIdhnEbhDnztt+FuXwrc0Wm82XQH6Yo4idWjhX9IYFNYhPMzz18ks
TE2KDQKBgQCXEOd26yjQd3yUiNiWy7dj/SjgjakKJ3EfUNU9Jn5d2OpCRKZpue3v
kwNtCKrmdl71oSlUtLxMOg5b5aoaKc52+NXQ6YII4gKUFSELEiPXUQiFNLzPeVF9
3vOGxdNw61G2F/vfoTN6EhmEHZySjU+nRInwET/eGyE3nVgepxj96w==
-----END RSA PRIVATE KEY-----
`

const clientCert = `
-----BEGIN CERTIFICATE-----
MIID3zCCAsegAwIBAgIVANcq1/xuRPDyKLvhiL2hnHnCYd4PMA0GCSqGSIb3DQEB
CwUAMEwxDTALBgNVBAoTBGp1anUxOzA5BgNVBAMTMmp1anUtZ2VuZXJhdGVkIGNs
aWVudCBjZXJ0IGZvciBtb2RlbCBBZG1pbmlzdHJhdG9yMB4XDTE2MTExNzE4MzIw
NVoXDTI2MTEyNDE4MzIwNVowTDENMAsGA1UEChMEanVqdTE7MDkGA1UEAxMyanVq
dS1nZW5lcmF0ZWQgY2xpZW50IGNlcnQgZm9yIG1vZGVsIEFkbWluaXN0cmF0b3Iw
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGwdBJskK9aUX4E6fRANHE
nRooIBwVa9CvJ+owqj4dQyAdB7vWSDFc1OvKL264ZVNzGjUmT1FVgGNstgXnqA1Z
0G/yUfP4rcIZVglJcXYVMS9XnrFV1krLeLVKzyebxGU5k3qqnwqjQUmgpeLwgNhy
h43MRB4v+xmXo9S6ZN73Y1BTgN80z5b/6nmEVJUCfQeH8gJ0B5wicSLAJCKcTVll
xqlNHbPzONaLnNvOnMkz17yd6vWkweEZj8ltapuMqcjtkxHSovpV9z1CUye5V70H
/WMOeJ6ixTCcb01Op5CwsI424Q/QpG/0PHwyNVi7bo0C2yk2kxWin7uFP4yD+jhR
AgMBAAGjgbcwgbQwDgYDVR0PAQH/BAQDAgOoMBMGA1UdJQQMMAoGCCsGAQUFBwMC
MB0GA1UdDgQWBBSe8QgQMBjotVFMquerN06PYaB04TAfBgNVHSMEGDAWgBSe8QgQ
MBjotVFMquerN06PYaB04TBNBgNVHREERjBEoEIGCisGAQQBgjcUAgOgNAwyanVq
dS1nZW5lcmF0ZWQgY2xpZW50IGNlcnQgZm9yIG1vZGVsIEFkbWluaXN0cmF0b3Iw
DQYJKoZIhvcNAQELBQADggEBAGBSX1K5n10mBlD/HPcxUrwQ+yaZuQNihrC+nELX
BLLGEhKCz/6+15B8uvNTTePt0C73F/Gnp1376r1Q901J2Ec/z4X7w6VSig87/QgG
Yb0Ct/xU9mMqW0FpxdGNoFCt0nfBN9SXFpqyKwWup+R13XqDqoi1MQgNv4aiK5Yd
Xj8BUlGgJAmXHHsrHn2//m8+4C+3SIF76WKBYw8kgsy6W4+pd11iClyCiteNCmqT
OukwGPUibJ1CQesqnS6faYnI8cMSTM5ntFic1kr80IlmpLRnaQneiAUssd40XoRW
DS94Bhc+lI61ZWy7CWcy20ZKABNRfzVjoSoBXdSZnCihNSg=
-----END CERTIFICATE-----

`