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  }