Make TokenHelper an interface and split exisiting functionality

Functionality is split into ExternalTokenHelper, which is used if a path
is given in a configuration file, and InternalTokenHelper which is used
otherwise. The internal helper no longer shells out to the same Vault
binary, instead performing the same actions with internal code. This
avoids problems using dev mode when there are spaces in paths or when
the binary is built in a container without a shell.

Fixes #850 among others
This commit is contained in:
Jeff Mitchell
2015-12-14 16:23:04 -05:00
parent 13739c886a
commit c15974cbdd
12 changed files with 257 additions and 280 deletions

View File

@@ -11,7 +11,7 @@ import (
// Test is a public function that can be used in other tests to
// test that a helper is functioning properly.
func Test(t *testing.T, h *Helper) {
func Test(t *testing.T, h TokenHelper) {
if err := h.Store("foo"); err != nil {
t.Fatalf("err: %s", err)
}
@@ -40,16 +40,16 @@ func Test(t *testing.T, h *Helper) {
}
// TestProcess is used to re-execute this test in order to use it as the
// helper process. For this to work, the TestHelperProcess function must
// helper process. For this to work, the TestExternalTokenHelperProcess function must
// exist.
func TestProcess(t *testing.T, s ...string) {
h := &Helper{Path: TestProcessPath(t, s...)}
h := &ExternalTokenHelper{BinaryPath: TestProcessPath(t, s...)}
Test(t, h)
}
// TestProcessPath returns the path to the test process.
func TestProcessPath(t *testing.T, s ...string) string {
cs := []string{"-test.run=TestHelperProcess", "--", "GO_WANT_HELPER_PROCESS"}
cs := []string{"-test.run=TestExternalTokenHelperProcess", "--", "GO_WANT_HELPER_PROCESS"}
cs = append(cs, s...)
return fmt.Sprintf(
"%s %s",
@@ -57,9 +57,9 @@ func TestProcessPath(t *testing.T, s ...string) string {
strings.Join(cs, " "))
}
// TestHelperProcessCLI can be called to implement TestHelperProcess
// TestExternalTokenHelperProcessCLI can be called to implement TestExternalTokenHelperProcess
// for TestProcess that just executes a CLI command.
func TestHelperProcessCLI(t *testing.T, cmd cli.Command) {
func TestExternalTokenHelperProcessCLI(t *testing.T, cmd cli.Command) {
args := os.Args
for len(args) > 0 {
if args[0] == "--" {