| // Copyright (c) HashiCorp, Inc. |
| // SPDX-License-Identifier: MPL-2.0 |
| |
| package api |
| |
| import ( |
| "net/http" |
| "net/http/httptest" |
| "testing" |
| ) |
| |
| func TestListMounts(t *testing.T) { |
| mockVaultServer := httptest.NewServer(http.HandlerFunc(mockVaultMountsHandler)) |
| defer mockVaultServer.Close() |
| |
| cfg := DefaultConfig() |
| cfg.Address = mockVaultServer.URL |
| client, err := NewClient(cfg) |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| resp, err := client.Sys().ListMounts() |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| expectedMounts := map[string]struct { |
| Type string |
| Version string |
| }{ |
| "cubbyhole/": {Type: "cubbyhole", Version: "v1.0.0"}, |
| "identity/": {Type: "identity", Version: ""}, |
| "secret/": {Type: "kv", Version: ""}, |
| "sys/": {Type: "system", Version: ""}, |
| } |
| |
| for path, mount := range resp { |
| expected, ok := expectedMounts[path] |
| if !ok { |
| t.Errorf("Unexpected mount: %s: %+v", path, mount) |
| continue |
| } |
| if expected.Type != mount.Type || expected.Version != mount.PluginVersion { |
| t.Errorf("Mount did not match: %s -> expected %+v but got %+v", path, expected, mount) |
| } |
| } |
| |
| for path, expected := range expectedMounts { |
| mount, ok := resp[path] |
| if !ok { |
| t.Errorf("Expected mount not found mount: %s: %+v", path, expected) |
| continue |
| } |
| if expected.Type != mount.Type || expected.Version != mount.PluginVersion { |
| t.Errorf("Mount did not match: %s -> expected %+v but got %+v", path, expected, mount) |
| } |
| } |
| } |
| |
| func mockVaultMountsHandler(w http.ResponseWriter, _ *http.Request) { |
| _, _ = w.Write([]byte(listMountsResponse)) |
| } |
| |
| const listMountsResponse = `{ |
| "request_id": "3cd881e9-ea50-2e06-90b2-5641667485fa", |
| "lease_id": "", |
| "lease_duration": 0, |
| "renewable": false, |
| "data": { |
| "cubbyhole/": { |
| "accessor": "cubbyhole_2e3fc28d", |
| "config": { |
| "default_lease_ttl": 0, |
| "force_no_cache": false, |
| "max_lease_ttl": 0 |
| }, |
| "description": "per-token private secret storage", |
| "external_entropy_access": false, |
| "local": true, |
| "options": null, |
| "plugin_version": "v1.0.0", |
| "running_sha256": "", |
| "running_plugin_version": "", |
| "seal_wrap": false, |
| "type": "cubbyhole", |
| "uuid": "575063dc-5ef8-4487-c842-22c494c19a6f" |
| }, |
| "identity/": { |
| "accessor": "identity_6e01c327", |
| "config": { |
| "default_lease_ttl": 0, |
| "force_no_cache": false, |
| "max_lease_ttl": 0, |
| "passthrough_request_headers": [ |
| "Authorization" |
| ] |
| }, |
| "description": "identity store", |
| "external_entropy_access": false, |
| "local": false, |
| "options": null, |
| "plugin_version": "", |
| "running_sha256": "", |
| "running_plugin_version": "", |
| "seal_wrap": false, |
| "type": "identity", |
| "uuid": "187d7eba-3471-554b-c2d9-1479612c8046" |
| }, |
| "secret/": { |
| "accessor": "kv_3e2f282f", |
| "config": { |
| "default_lease_ttl": 0, |
| "force_no_cache": false, |
| "max_lease_ttl": 0 |
| }, |
| "description": "key/value secret storage", |
| "external_entropy_access": false, |
| "local": false, |
| "options": { |
| "version": "2" |
| }, |
| "plugin_version": "", |
| "running_sha256": "", |
| "running_plugin_version": "", |
| "seal_wrap": false, |
| "type": "kv", |
| "uuid": "13375e0f-876e-7e96-0a3e-076f37b6b69d" |
| }, |
| "sys/": { |
| "accessor": "system_93503264", |
| "config": { |
| "default_lease_ttl": 0, |
| "force_no_cache": false, |
| "max_lease_ttl": 0, |
| "passthrough_request_headers": [ |
| "Accept" |
| ] |
| }, |
| "description": "system endpoints used for control, policy and debugging", |
| "external_entropy_access": false, |
| "local": false, |
| "options": null, |
| "plugin_version": "", |
| "running_sha256": "", |
| "running_plugin_version": "", |
| "seal_wrap": true, |
| "type": "system", |
| "uuid": "1373242d-cc4d-c023-410b-7f336e7ba0a8" |
| } |
| } |
| }` |