add a check and test so that the winrm communicator upload doesn't fail becuase of a nil file pointer

This commit is contained in:
Megan Marsh 2019-05-31 16:54:25 -06:00
parent 4bf75ac0f3
commit 7b1f7c87e5
2 changed files with 26 additions and 2 deletions

View File

@ -130,7 +130,11 @@ func (c *Communicator) Upload(path string, input io.Reader, fi *os.FileInfo) err
}
if strings.HasSuffix(path, `\`) {
// path is a directory
path += filepath.Base((*fi).Name())
if fi != nil {
path += filepath.Base((*fi).Name())
} else {
return fmt.Errorf("Was unable to infer file basename for upload.")
}
}
log.Printf("Uploading file to '%s'", path)
return wcp.Write(path, input)

View File

@ -120,5 +120,25 @@ func TestUpload(t *testing.T) {
if downloadedPayload != PAYLOAD {
t.Fatalf("files are not equal: expected [%s] length: %v, got [%s] length %v", PAYLOAD, len(PAYLOAD), downloadedPayload, len(downloadedPayload))
}
}
func TestUpload_nilFileInfo(t *testing.T) {
wrm := newMockWinRMServer(t)
defer wrm.Close()
c, err := New(&Config{
Host: wrm.Host,
Port: wrm.Port,
Username: "user",
Password: "pass",
Timeout: 30 * time.Second,
})
if err != nil {
t.Fatalf("error creating communicator: %s", err)
}
file := "C:\\Temp\\"
err = c.Upload(file, strings.NewReader(PAYLOAD), nil)
if err == nil {
t.Fatalf("Should have errored because of nil fileinfo")
}
}