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-----
`
|