From bf63d3a7c04134eb5a25e49eb44c76aeaffbe622 Mon Sep 17 00:00:00 2001 From: Jeff Mitchell Date: Mon, 8 Aug 2016 20:01:08 -0400 Subject: [PATCH] Add HTTP test for renew and fix muxing --- command/renew_test.go | 59 +++++++++++++++++++++++++++++++++++++++++++ http/handler.go | 1 + 2 files changed, 60 insertions(+) diff --git a/command/renew_test.go b/command/renew_test.go index a6360ec575..d43e516d8f 100644 --- a/command/renew_test.go +++ b/command/renew_test.go @@ -3,6 +3,7 @@ package command import ( "testing" + "github.com/hashicorp/vault/api" "github.com/hashicorp/vault/http" "github.com/hashicorp/vault/meta" "github.com/hashicorp/vault/vault" @@ -46,3 +47,61 @@ func TestRenew(t *testing.T) { t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter.String()) } } + +func TestRenewBothWays(t *testing.T) { + core, _, token := vault.TestCoreUnsealed(t) + ln, addr := http.TestServer(t, core) + defer ln.Close() + + // write a secret with a lease + client := testClient(t, addr, token) + _, err := client.Logical().Write("secret/foo", map[string]interface{}{ + "key": "value", + "ttl": "1m", + }) + if err != nil { + t.Fatalf("err: %s", err) + } + + // read the secret to get its lease ID + secret, err := client.Logical().Read("secret/foo") + if err != nil { + t.Fatalf("err: %s", err) + } + + // Test one renew path + r := client.NewRequest("PUT", "/v1/sys/renew") + body := map[string]interface{}{ + "lease_id": secret.LeaseID, + } + if err := r.SetJSONBody(body); err != nil { + t.Fatal(err) + } + resp, err := client.RawRequest(r) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + secret, err = api.ParseSecret(resp.Body) + if err != nil { + t.Fatal(err) + } + if secret.LeaseDuration != 60 { + t.Fatal("bad lease duration") + } + + // Test the other + r = client.NewRequest("PUT", "/v1/sys/renew/"+secret.LeaseID) + resp, err = client.RawRequest(r) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + secret, err = api.ParseSecret(resp.Body) + if err != nil { + t.Fatal(err) + } + if secret.LeaseDuration != 60 { + t.Fatalf("bad lease duration; secret is %#v\n", *secret) + } +} diff --git a/http/handler.go b/http/handler.go index 3420ce17b6..d383159f69 100644 --- a/http/handler.go +++ b/http/handler.go @@ -35,6 +35,7 @@ func Handler(core *vault.Core) http.Handler { mux.Handle("/v1/sys/step-down", handleSysStepDown(core)) mux.Handle("/v1/sys/unseal", handleSysUnseal(core)) mux.Handle("/v1/sys/renew", handleLogical(core, false, nil)) + mux.Handle("/v1/sys/renew/", handleLogical(core, false, nil)) mux.Handle("/v1/sys/leader", handleSysLeader(core)) mux.Handle("/v1/sys/health", handleSysHealth(core)) mux.Handle("/v1/sys/generate-root/attempt", handleSysGenerateRootAttempt(core))