Add test for stdin input

Shamelessly borrowed this pattern from write_test.go
This commit is contained in:
David Wittman 2015-05-23 13:22:35 -05:00
parent 1411749222
commit 5df1d725aa
2 changed files with 42 additions and 2 deletions

View File

@ -27,6 +27,9 @@ type AuthCommand struct {
Meta
Handlers map[string]AuthHandler
// The fields below can be overwritten for tests
testStdin io.Reader
}
func (c *AuthCommand) Run(args []string) int {
@ -66,9 +69,15 @@ func (c *AuthCommand) Run(args []string) int {
// token is where the final token will go
handler := c.Handlers[method]
// Read token from stdin if first arg is exactly "-"
var stdin io.Reader = os.Stdin
if c.testStdin != nil {
stdin = c.testStdin
}
if len(args) > 0 && args[0] == "-" {
stdin := bufio.NewReader(os.Stdin)
args[0], err = stdin.ReadString('\n')
stdinR := bufio.NewReader(stdin)
args[0], err = stdinR.ReadString('\n')
if err != nil && err != io.EOF {
c.Ui.Error(fmt.Sprintf("Error reading from stdin: %s", err))
return 1

View File

@ -2,6 +2,7 @@ package command
import (
"fmt"
"io"
"io/ioutil"
"os"
"path/filepath"
@ -82,6 +83,36 @@ func TestAuth_token(t *testing.T) {
}
}
func TestAuth_stdin(t *testing.T) {
core, _, token := vault.TestCoreUnsealed(t)
ln, addr := http.TestServer(t, core)
defer ln.Close()
testAuthInit(t)
stdinR, stdinW := io.Pipe()
ui := new(cli.MockUi)
c := &AuthCommand{
Meta: Meta{
Ui: ui,
},
testStdin: stdinR,
}
go func() {
stdinW.Write([]byte(token))
stdinW.Close()
}()
args := []string{
"-address", addr,
"-",
}
if code := c.Run(args); code != 0 {
t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter.String())
}
}
func TestAuth_badToken(t *testing.T) {
core, _, _ := vault.TestCoreUnsealed(t)
ln, addr := http.TestServer(t, core)