And here are the tests...
Pretty nice test coverage this way, covering all WinRM actions/logic by using the winrmtest package. I had to extend/update/fix that package a little here and there, but it now serves a nice purpose for testing WinRM stuff…
This commit is contained in:
parent
41748003c0
commit
2689601bc3
|
@ -1,10 +1,128 @@
|
||||||
package winrm
|
package winrm
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
|
"io"
|
||||||
"regexp"
|
"regexp"
|
||||||
|
"strconv"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/dylanmei/winrmtest"
|
||||||
|
"github.com/hashicorp/terraform/communicator/remote"
|
||||||
|
"github.com/hashicorp/terraform/terraform"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func newMockWinRMServer(t *testing.T) *winrmtest.Remote {
|
||||||
|
wrm := winrmtest.NewRemote()
|
||||||
|
|
||||||
|
wrm.CommandFunc(
|
||||||
|
"echo foo",
|
||||||
|
"",
|
||||||
|
func(out, err io.Writer) int {
|
||||||
|
out.Write([]byte("foo"))
|
||||||
|
return 0
|
||||||
|
})
|
||||||
|
|
||||||
|
wrm.CommandFunc(
|
||||||
|
"file-copy",
|
||||||
|
`^echo c29tZXRoaW5n >> ".*"$`,
|
||||||
|
func(out, err io.Writer) int {
|
||||||
|
return 0
|
||||||
|
})
|
||||||
|
|
||||||
|
wrm.CommandFunc(
|
||||||
|
"file-encode",
|
||||||
|
`^powershell.exe -EncodedCommand .*$`,
|
||||||
|
func(out, err io.Writer) int {
|
||||||
|
return 0
|
||||||
|
})
|
||||||
|
|
||||||
|
wrm.CommandFunc(
|
||||||
|
"powershell",
|
||||||
|
"",
|
||||||
|
func(out, err io.Writer) int {
|
||||||
|
return 0
|
||||||
|
})
|
||||||
|
|
||||||
|
return wrm
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestStart(t *testing.T) {
|
||||||
|
wrm := newMockWinRMServer(t)
|
||||||
|
defer wrm.Close()
|
||||||
|
|
||||||
|
r := &terraform.InstanceState{
|
||||||
|
Ephemeral: terraform.EphemeralState{
|
||||||
|
ConnInfo: map[string]string{
|
||||||
|
"type": "winrm",
|
||||||
|
"user": "user",
|
||||||
|
"password": "pass",
|
||||||
|
"host": wrm.Host,
|
||||||
|
"port": strconv.Itoa(wrm.Port),
|
||||||
|
"timeout": "30000s",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
//time.Sleep(time.Duration(30000 * time.Second))
|
||||||
|
|
||||||
|
c, err := New(r)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("error creating communicator: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var cmd remote.Cmd
|
||||||
|
stdout := new(bytes.Buffer)
|
||||||
|
cmd.Command = "echo foo"
|
||||||
|
cmd.Stdout = stdout
|
||||||
|
|
||||||
|
err = c.Start(&cmd)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("error executing remote command: %s", err)
|
||||||
|
}
|
||||||
|
cmd.Wait()
|
||||||
|
|
||||||
|
if stdout.String() != "foo" {
|
||||||
|
t.Fatalf("bad command response: expected %q, got %q", "foo", stdout.String())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestUpload(t *testing.T) {
|
||||||
|
t.Skip()
|
||||||
|
|
||||||
|
wrm := newMockWinRMServer(t)
|
||||||
|
defer wrm.Close()
|
||||||
|
|
||||||
|
r := &terraform.InstanceState{
|
||||||
|
Ephemeral: terraform.EphemeralState{
|
||||||
|
ConnInfo: map[string]string{
|
||||||
|
"type": "winrm",
|
||||||
|
"user": "user",
|
||||||
|
"password": "pass",
|
||||||
|
"host": wrm.Host,
|
||||||
|
"port": strconv.Itoa(wrm.Port),
|
||||||
|
"timeout": "30s",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
c, err := New(r)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("error creating communicator: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = c.Connect(nil)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("error connecting communicator: %s", err)
|
||||||
|
}
|
||||||
|
defer c.Disconnect()
|
||||||
|
|
||||||
|
err = c.Upload("C:/Temp/terraform.cmd", bytes.NewReader([]byte("something")))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("error uploading file: %s", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestScriptPath(t *testing.T) {
|
func TestScriptPath(t *testing.T) {
|
||||||
cases := []struct {
|
cases := []struct {
|
||||||
Input string
|
Input string
|
||||||
|
|
Loading…
Reference in New Issue