1package command 2 3import ( 4 "strings" 5 "testing" 6 7 "github.com/hashicorp/vault/api" 8 "github.com/mitchellh/cli" 9) 10 11func 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 22func TestKvMetadataPutCommandDeleteVersionAfter(t *testing.T) { 23 client, closer := testVaultServer(t) 24 defer closer() 25 26 basePath := t.Name() + "/" 27 if err := client.Sys().Mount(basePath, &api.MountInput{ 28 Type: "kv-v2", 29 }); err != nil { 30 t.Fatal(err) 31 } 32 33 ui, cmd := testKVMetadataPutCommand(t) 34 cmd.client = client 35 36 // Set a limit of 1s first. 37 code := cmd.Run([]string{"-delete-version-after=1s", basePath + "secret/my-secret"}) 38 if code != 0 { 39 t.Fatalf("expected %d but received %d", 0, code) 40 } 41 42 metaFullPath := basePath + "metadata/secret/my-secret" 43 combined := ui.OutputWriter.String() + ui.ErrorWriter.String() 44 success := "Success! Data written to: " + metaFullPath 45 if !strings.Contains(combined, success) { 46 t.Fatalf("expected %q but received %q", success, combined) 47 } 48 49 secret, err := client.Logical().Read(metaFullPath) 50 if err != nil { 51 t.Fatal(err) 52 } 53 if secret.Data["delete_version_after"] != "1s" { 54 t.Fatalf("expected 1s but received %q", secret.Data["delete_version_after"]) 55 } 56 57 // Now verify that we can return it to 0s. 58 ui, cmd = testKVMetadataPutCommand(t) 59 cmd.client = client 60 61 // Set a limit of 1s first. 62 code = cmd.Run([]string{"-delete-version-after=0", basePath + "secret/my-secret"}) 63 if code != 0 { 64 t.Errorf("expected %d but received %d", 0, code) 65 } 66 67 combined = ui.OutputWriter.String() + ui.ErrorWriter.String() 68 if !strings.Contains(combined, success) { 69 t.Errorf("expected %q but received %q", success, combined) 70 } 71 72 secret, err = client.Logical().Read(metaFullPath) 73 if err != nil { 74 t.Fatal(err) 75 } 76 if secret.Data["delete_version_after"] != "0s" { 77 t.Fatalf("expected 0s but received %q", secret.Data["delete_version_after"]) 78 } 79} 80