Skip to content

Commit a00c97f

Browse files
allow delete-version-after to be reset to 0 (#8635) (#8641)
1 parent e4b9bff commit a00c97f

2 files changed

Lines changed: 78 additions & 2 deletions

File tree

command/kv_metadata_put.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ func (c *KVMetadataPutCommand) Flags() *FlagSets {
7878
f.DurationVar(&DurationVar{
7979
Name: "delete-version-after",
8080
Target: &c.flagDeleteVersionAfter,
81-
Default: 0,
81+
Default: -1,
8282
EnvVar: "",
8383
Completion: complete.PredictAnything,
8484
Usage: `Specifies the length of time before a version is deleted.
@@ -141,7 +141,7 @@ func (c *KVMetadataPutCommand) Run(args []string) int {
141141
"cas_required": c.flagCASRequired,
142142
}
143143

144-
if c.flagDeleteVersionAfter > 0 {
144+
if c.flagDeleteVersionAfter >= 0 {
145145
data["delete_version_after"] = c.flagDeleteVersionAfter.String()
146146
}
147147

command/kv_metadata_put_test.go

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package command
2+
3+
import (
4+
"strings"
5+
"testing"
6+
7+
"github.com/hashicorp/vault/api"
8+
"github.com/mitchellh/cli"
9+
)
10+
11+
func testKVMetadataPutCommand(tb testing.TB) (*cli.MockUi, *KVMetadataPutCommand) {
12+
tb.Helper()
13+
14+
ui := cli.NewMockUi()
15+
return ui, &KVMetadataPutCommand{
16+
BaseCommand: &BaseCommand{
17+
UI: ui,
18+
},
19+
}
20+
}
21+
22+
func TestKvMetadataPutCommandDeleteVersionAfter(t *testing.T) {
23+
client, closer := testVaultServer(t)
24+
defer closer()
25+
26+
if err := client.Sys().Mount("kv/", &api.MountInput{
27+
Type: "kv-v2",
28+
}); err != nil {
29+
t.Fatal(err)
30+
}
31+
32+
ui, cmd := testKVMetadataPutCommand(t)
33+
cmd.client = client
34+
35+
// Set a limit of 1s first.
36+
code := cmd.Run([]string{"-delete-version-after=1s", "kv/secret/my-secret"})
37+
if code != 0 {
38+
t.Errorf("expected %d but received %d", 0, code)
39+
}
40+
41+
combined := ui.OutputWriter.String() + ui.ErrorWriter.String()
42+
if !strings.Contains(combined, "Success! Data written to: kv/metadata/secret/my-secret\n") {
43+
t.Errorf("expected %q but received %q", "Success! Data written to: kv/metadata/secret/my-secret\n", combined)
44+
}
45+
46+
secret, err := client.Logical().Read("kv/metadata/secret/my-secret")
47+
if err != nil {
48+
t.Fatal(err)
49+
}
50+
if secret.Data["delete_version_after"] != "1s" {
51+
t.Fatalf("expected 1s but received %q", secret.Data["delete_version_after"])
52+
}
53+
54+
// Now verify that we can return it to 0s.
55+
ui, cmd = testKVMetadataPutCommand(t)
56+
cmd.client = client
57+
58+
// Set a limit of 1s first.
59+
code = cmd.Run([]string{"-delete-version-after=0", "kv/secret/my-secret"})
60+
if code != 0 {
61+
t.Errorf("expected %d but received %d", 0, code)
62+
}
63+
64+
combined = ui.OutputWriter.String() + ui.ErrorWriter.String()
65+
if !strings.Contains(combined, "Success! Data written to: kv/metadata/secret/my-secret\n") {
66+
t.Errorf("expected %q but received %q", "Success! Data written to: kv/metadata/secret/my-secret\n", combined)
67+
}
68+
69+
secret, err = client.Logical().Read("kv/metadata/secret/my-secret")
70+
if err != nil {
71+
t.Fatal(err)
72+
}
73+
if secret.Data["delete_version_after"] != "0s" {
74+
t.Fatalf("expected 0s but received %q", secret.Data["delete_version_after"])
75+
}
76+
}

0 commit comments

Comments
 (0)