github.com/hashicorp/vault/sdk@v0.13.0/framework/path_struct_test.go (about)

     1  // Copyright (c) HashiCorp, Inc.
     2  // SPDX-License-Identifier: MPL-2.0
     3  
     4  package framework
     5  
     6  import (
     7  	"context"
     8  	"testing"
     9  
    10  	"github.com/hashicorp/vault/sdk/logical"
    11  )
    12  
    13  func TestPathStruct(t *testing.T) {
    14  	p := &PathStruct{
    15  		Name: "foo",
    16  		Path: "bar",
    17  		Schema: map[string]*FieldSchema{
    18  			"value": {Type: TypeString},
    19  		},
    20  		Read: true,
    21  	}
    22  
    23  	storage := new(logical.InmemStorage)
    24  	var b logical.Backend = &Backend{Paths: p.Paths()}
    25  
    26  	ctx := context.Background()
    27  
    28  	// Write via HTTP
    29  	_, err := b.HandleRequest(ctx, &logical.Request{
    30  		Operation: logical.UpdateOperation,
    31  		Path:      "bar",
    32  		Data: map[string]interface{}{
    33  			"value": "baz",
    34  		},
    35  		Storage: storage,
    36  	})
    37  	if err != nil {
    38  		t.Fatalf("bad: %#v", err)
    39  	}
    40  
    41  	// Read via HTTP
    42  	resp, err := b.HandleRequest(ctx, &logical.Request{
    43  		Operation: logical.ReadOperation,
    44  		Path:      "bar",
    45  		Storage:   storage,
    46  	})
    47  	if err != nil {
    48  		t.Fatalf("bad: %#v", err)
    49  	}
    50  	if resp.Data["value"] != "baz" {
    51  		t.Fatalf("bad: %#v", resp)
    52  	}
    53  
    54  	// Read via API
    55  	v, err := p.Get(ctx, storage)
    56  	if err != nil {
    57  		t.Fatalf("bad: %#v", err)
    58  	}
    59  	if v["value"] != "baz" {
    60  		t.Fatalf("bad: %#v", v)
    61  	}
    62  
    63  	// Delete via HTTP
    64  	resp, err = b.HandleRequest(ctx, &logical.Request{
    65  		Operation: logical.DeleteOperation,
    66  		Path:      "bar",
    67  		Data:      nil,
    68  		Storage:   storage,
    69  	})
    70  	if err != nil {
    71  		t.Fatalf("bad: %#v", err)
    72  	}
    73  	if resp != nil {
    74  		t.Fatalf("bad: %#v", resp)
    75  	}
    76  
    77  	// Re-read via HTTP
    78  	resp, err = b.HandleRequest(ctx, &logical.Request{
    79  		Operation: logical.ReadOperation,
    80  		Path:      "bar",
    81  		Storage:   storage,
    82  	})
    83  	if err != nil {
    84  		t.Fatalf("bad: %#v", err)
    85  	}
    86  	if _, ok := resp.Data["value"]; ok {
    87  		t.Fatalf("bad: %#v", resp)
    88  	}
    89  
    90  	// Re-read via API
    91  	v, err = p.Get(ctx, storage)
    92  	if err != nil {
    93  		t.Fatalf("bad: %#v", err)
    94  	}
    95  	if v != nil {
    96  		t.Fatalf("bad: %#v", v)
    97  	}
    98  }