| // Copyright (c) HashiCorp, Inc. |
| // SPDX-License-Identifier: MPL-2.0 |
| |
| package framework |
| |
| import ( |
| "context" |
| "testing" |
| |
| "github.com/hashicorp/vault/sdk/logical" |
| ) |
| |
| func TestPathStruct(t *testing.T) { |
| p := &PathStruct{ |
| Name: "foo", |
| Path: "bar", |
| Schema: map[string]*FieldSchema{ |
| "value": {Type: TypeString}, |
| }, |
| Read: true, |
| } |
| |
| storage := new(logical.InmemStorage) |
| var b logical.Backend = &Backend{Paths: p.Paths()} |
| |
| ctx := context.Background() |
| |
| // Write via HTTP |
| _, err := b.HandleRequest(ctx, &logical.Request{ |
| Operation: logical.UpdateOperation, |
| Path: "bar", |
| Data: map[string]interface{}{ |
| "value": "baz", |
| }, |
| Storage: storage, |
| }) |
| if err != nil { |
| t.Fatalf("bad: %#v", err) |
| } |
| |
| // Read via HTTP |
| resp, err := b.HandleRequest(ctx, &logical.Request{ |
| Operation: logical.ReadOperation, |
| Path: "bar", |
| Storage: storage, |
| }) |
| if err != nil { |
| t.Fatalf("bad: %#v", err) |
| } |
| if resp.Data["value"] != "baz" { |
| t.Fatalf("bad: %#v", resp) |
| } |
| |
| // Read via API |
| v, err := p.Get(ctx, storage) |
| if err != nil { |
| t.Fatalf("bad: %#v", err) |
| } |
| if v["value"] != "baz" { |
| t.Fatalf("bad: %#v", v) |
| } |
| |
| // Delete via HTTP |
| resp, err = b.HandleRequest(ctx, &logical.Request{ |
| Operation: logical.DeleteOperation, |
| Path: "bar", |
| Data: nil, |
| Storage: storage, |
| }) |
| if err != nil { |
| t.Fatalf("bad: %#v", err) |
| } |
| if resp != nil { |
| t.Fatalf("bad: %#v", resp) |
| } |
| |
| // Re-read via HTTP |
| resp, err = b.HandleRequest(ctx, &logical.Request{ |
| Operation: logical.ReadOperation, |
| Path: "bar", |
| Storage: storage, |
| }) |
| if err != nil { |
| t.Fatalf("bad: %#v", err) |
| } |
| if _, ok := resp.Data["value"]; ok { |
| t.Fatalf("bad: %#v", resp) |
| } |
| |
| // Re-read via API |
| v, err = p.Get(ctx, storage) |
| if err != nil { |
| t.Fatalf("bad: %#v", err) |
| } |
| if v != nil { |
| t.Fatalf("bad: %#v", v) |
| } |
| } |