mirror of
				https://github.com/optim-enterprises-bv/vault.git
				synced 2025-10-31 02:28:09 +00:00 
			
		
		
		
	Update delete command
This commit is contained in:
		| @@ -1,56 +1,131 @@ | ||||
| package command | ||||
|  | ||||
| import ( | ||||
| 	"strings" | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/hashicorp/vault/http" | ||||
| 	"github.com/hashicorp/vault/meta" | ||||
| 	"github.com/hashicorp/vault/vault" | ||||
| 	"github.com/mitchellh/cli" | ||||
| ) | ||||
|  | ||||
| func TestDelete(t *testing.T) { | ||||
| 	core, _, token := vault.TestCoreUnsealed(t) | ||||
| 	ln, addr := http.TestServer(t, core) | ||||
| 	defer ln.Close() | ||||
| func testDeleteCommand(tb testing.TB) (*cli.MockUi, *DeleteCommand) { | ||||
| 	tb.Helper() | ||||
|  | ||||
| 	ui := new(cli.MockUi) | ||||
| 	c := &DeleteCommand{ | ||||
| 		Meta: meta.Meta{ | ||||
| 			ClientToken: token, | ||||
| 			Ui:          ui, | ||||
| 	ui := cli.NewMockUi() | ||||
| 	return ui, &DeleteCommand{ | ||||
| 		BaseCommand: &BaseCommand{ | ||||
| 			UI: ui, | ||||
| 		}, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func TestDeleteCommand_Run(t *testing.T) { | ||||
| 	t.Parallel() | ||||
|  | ||||
| 	cases := []struct { | ||||
| 		name string | ||||
| 		args []string | ||||
| 		out  string | ||||
| 		code int | ||||
| 	}{ | ||||
| 		{ | ||||
| 			"empty", | ||||
| 			nil, | ||||
| 			"Missing PATH!", | ||||
| 			1, | ||||
| 		}, | ||||
| 		{ | ||||
| 			"slash", | ||||
| 			[]string{"/"}, | ||||
| 			"Missing PATH!", | ||||
| 			1, | ||||
| 		}, | ||||
| 	} | ||||
|  | ||||
| 	args := []string{ | ||||
| 		"-address", addr, | ||||
| 		"secret/foo", | ||||
| 	} | ||||
| 	t.Run("validations", func(t *testing.T) { | ||||
| 		t.Parallel() | ||||
|  | ||||
| 	// Run once so the client is setup, ignore errors | ||||
| 	c.Run(args) | ||||
| 		for _, tc := range cases { | ||||
| 			tc := tc | ||||
|  | ||||
| 	// Get the client so we can write data | ||||
| 	client, err := c.Client() | ||||
| 	if err != nil { | ||||
| 		t.Fatalf("err: %s", err) | ||||
| 	} | ||||
| 			t.Run(tc.name, func(t *testing.T) { | ||||
| 				t.Parallel() | ||||
|  | ||||
| 	data := map[string]interface{}{"value": "bar"} | ||||
| 	if _, err := client.Logical().Write("secret/foo", data); err != nil { | ||||
| 		t.Fatalf("err: %s", err) | ||||
| 	} | ||||
| 				ui, cmd := testDeleteCommand(t) | ||||
|  | ||||
| 	// Run the delete | ||||
| 	if code := c.Run(args); code != 0 { | ||||
| 		t.Fatalf("bad: %d\n\n%s", code, ui.ErrorWriter.String()) | ||||
| 	} | ||||
| 				code := cmd.Run(tc.args) | ||||
| 				if code != tc.code { | ||||
| 					t.Errorf("expected %d to be %d", code, tc.code) | ||||
| 				} | ||||
|  | ||||
| 	resp, err := client.Logical().Read("secret/foo") | ||||
| 	if err != nil { | ||||
| 		t.Fatalf("err: %s", err) | ||||
| 	} | ||||
| 	if resp != nil { | ||||
| 		t.Fatalf("bad: %#v", resp) | ||||
| 	} | ||||
| 				combined := ui.OutputWriter.String() + ui.ErrorWriter.String() | ||||
| 				if !strings.Contains(combined, tc.out) { | ||||
| 					t.Errorf("expected %q to contain %q", combined, tc.out) | ||||
| 				} | ||||
| 			}) | ||||
| 		} | ||||
| 	}) | ||||
|  | ||||
| 	t.Run("integration", func(t *testing.T) { | ||||
| 		t.Parallel() | ||||
|  | ||||
| 		client, closer := testVaultServer(t) | ||||
| 		defer closer() | ||||
|  | ||||
| 		if _, err := client.Logical().Write("secret/delete/foo", map[string]interface{}{ | ||||
| 			"foo": "bar", | ||||
| 		}); err != nil { | ||||
| 			t.Fatal(err) | ||||
| 		} | ||||
|  | ||||
| 		ui, cmd := testDeleteCommand(t) | ||||
| 		cmd.client = client | ||||
|  | ||||
| 		code := cmd.Run([]string{ | ||||
| 			"secret/delete/foo", | ||||
| 		}) | ||||
| 		if exp := 0; code != exp { | ||||
| 			t.Errorf("expected %d to be %d", code, exp) | ||||
| 		} | ||||
|  | ||||
| 		expected := "Success! Data deleted (if it existed) at: secret/delete/foo" | ||||
| 		combined := ui.OutputWriter.String() + ui.ErrorWriter.String() | ||||
| 		if !strings.Contains(combined, expected) { | ||||
| 			t.Errorf("expected %q to contain %q", combined, expected) | ||||
| 		} | ||||
|  | ||||
| 		secret, _ := client.Logical().Read("secret/delete/foo") | ||||
| 		if secret != nil { | ||||
| 			t.Errorf("expected deletion: %#v", secret) | ||||
| 		} | ||||
| 	}) | ||||
|  | ||||
| 	t.Run("communication_failure", func(t *testing.T) { | ||||
| 		t.Parallel() | ||||
|  | ||||
| 		client, closer := testVaultServerBad(t) | ||||
| 		defer closer() | ||||
|  | ||||
| 		ui, cmd := testDeleteCommand(t) | ||||
| 		cmd.client = client | ||||
|  | ||||
| 		code := cmd.Run([]string{ | ||||
| 			"secret/delete/foo", | ||||
| 		}) | ||||
| 		if exp := 2; code != exp { | ||||
| 			t.Errorf("expected %d to be %d", code, exp) | ||||
| 		} | ||||
|  | ||||
| 		expected := "Error deleting secret/delete/foo: " | ||||
| 		combined := ui.OutputWriter.String() + ui.ErrorWriter.String() | ||||
| 		if !strings.Contains(combined, expected) { | ||||
| 			t.Errorf("expected %q to contain %q", combined, expected) | ||||
| 		} | ||||
| 	}) | ||||
|  | ||||
| 	t.Run("no_tabs", func(t *testing.T) { | ||||
| 		t.Parallel() | ||||
|  | ||||
| 		_, cmd := testDeleteCommand(t) | ||||
| 		assertNoTabs(t, cmd) | ||||
| 	}) | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Seth Vargo
					Seth Vargo