github.com/hashicorp/vault/sdk@v0.13.0/physical/inmem/physical_view_test.go (about) 1 // Copyright (c) HashiCorp, Inc. 2 // SPDX-License-Identifier: MPL-2.0 3 4 package inmem 5 6 import ( 7 "context" 8 "testing" 9 10 log "github.com/hashicorp/go-hclog" 11 "github.com/hashicorp/vault/sdk/helper/logging" 12 "github.com/hashicorp/vault/sdk/physical" 13 ) 14 15 func TestPhysicalView_impl(t *testing.T) { 16 var _ physical.Backend = new(physical.View) 17 } 18 19 func newInmemTestBackend() (physical.Backend, error) { 20 logger := logging.NewVaultLogger(log.Debug) 21 return NewInmem(nil, logger) 22 } 23 24 func TestPhysicalView_BadKeysKeys(t *testing.T) { 25 backend, err := newInmemTestBackend() 26 if err != nil { 27 t.Fatal(err) 28 } 29 view := physical.NewView(backend, "foo/") 30 31 _, err = view.List(context.Background(), "../") 32 if err == nil { 33 t.Fatalf("expected error") 34 } 35 36 _, err = view.Get(context.Background(), "../") 37 if err == nil { 38 t.Fatalf("expected error") 39 } 40 41 err = view.Delete(context.Background(), "../foo") 42 if err == nil { 43 t.Fatalf("expected error") 44 } 45 46 le := &physical.Entry{ 47 Key: "../foo", 48 Value: []byte("test"), 49 } 50 err = view.Put(context.Background(), le) 51 if err == nil { 52 t.Fatalf("expected error") 53 } 54 } 55 56 func TestPhysicalView(t *testing.T) { 57 backend, err := newInmemTestBackend() 58 if err != nil { 59 t.Fatal(err) 60 } 61 62 view := physical.NewView(backend, "foo/") 63 64 // Write a key outside of foo/ 65 entry := &physical.Entry{Key: "test", Value: []byte("test")} 66 if err := backend.Put(context.Background(), entry); err != nil { 67 t.Fatalf("bad: %v", err) 68 } 69 70 // List should have no visibility 71 keys, err := view.List(context.Background(), "") 72 if err != nil { 73 t.Fatalf("err: %v", err) 74 } 75 if len(keys) != 0 { 76 t.Fatalf("bad: %v", err) 77 } 78 79 // Get should have no visibility 80 out, err := view.Get(context.Background(), "test") 81 if err != nil { 82 t.Fatalf("err: %v", err) 83 } 84 if out != nil { 85 t.Fatalf("bad: %v", out) 86 } 87 88 // Try to put the same entry via the view 89 if err := view.Put(context.Background(), entry); err != nil { 90 t.Fatalf("err: %v", err) 91 } 92 93 // Check it is nested 94 entry, err = backend.Get(context.Background(), "foo/test") 95 if err != nil { 96 t.Fatalf("err: %v", err) 97 } 98 if entry == nil { 99 t.Fatalf("missing nested foo/test") 100 } 101 102 // Delete nested 103 if err := view.Delete(context.Background(), "test"); err != nil { 104 t.Fatalf("err: %v", err) 105 } 106 107 // Check the nested key 108 entry, err = backend.Get(context.Background(), "foo/test") 109 if err != nil { 110 t.Fatalf("err: %v", err) 111 } 112 if entry != nil { 113 t.Fatalf("nested foo/test should be gone") 114 } 115 116 // Check the non-nested key 117 entry, err = backend.Get(context.Background(), "test") 118 if err != nil { 119 t.Fatalf("err: %v", err) 120 } 121 if entry == nil { 122 t.Fatalf("root test missing") 123 } 124 }