diff --git a/changelog/18626.txt b/changelog/18626.txt new file mode 100644 index 000000000000..6bb2ba0f4d89 --- /dev/null +++ b/changelog/18626.txt @@ -0,0 +1,3 @@ +```release-note:improvement +openapi: add openapi response definitions to /sys/tool endpoints +``` \ No newline at end of file diff --git a/vault/logical_system_paths.go b/vault/logical_system_paths.go index 26c3e5aa0b20..ab5cee659285 100644 --- a/vault/logical_system_paths.go +++ b/vault/logical_system_paths.go @@ -960,8 +960,21 @@ func (b *SystemBackend) toolsPaths() []*framework.Path { }, }, - Callbacks: map[logical.Operation]framework.OperationFunc{ - logical.UpdateOperation: b.pathHashWrite, + Operations: map[logical.Operation]framework.OperationHandler{ + logical.UpdateOperation: &framework.PathOperation{ + Callback: b.pathHashWrite, + Responses: map[int][]framework.Response{ + http.StatusOK: {{ + Description: "OK", + Fields: map[string]*framework.FieldSchema{ + "sum": { + Type: framework.TypeString, + Required: true, + }, + }, + }}, + }, + }, }, HelpSynopsis: strings.TrimSpace(sysHelp["hash"][0]), @@ -995,8 +1008,21 @@ func (b *SystemBackend) toolsPaths() []*framework.Path { }, }, - Callbacks: map[logical.Operation]framework.OperationFunc{ - logical.UpdateOperation: b.pathRandomWrite, + Operations: map[logical.Operation]framework.OperationHandler{ + logical.UpdateOperation: &framework.PathOperation{ + Callback: b.pathRandomWrite, + Responses: map[int][]framework.Response{ + http.StatusOK: {{ + Description: "OK", + Fields: map[string]*framework.FieldSchema{ + "random_bytes": { + Type: framework.TypeString, + Required: true, + }, + }, + }}, + }, + }, }, HelpSynopsis: strings.TrimSpace(sysHelp["random"][0]), diff --git a/vault/logical_system_test.go b/vault/logical_system_test.go index 033beefdaf8b..76dba4bbecc8 100644 --- a/vault/logical_system_test.go +++ b/vault/logical_system_test.go @@ -3178,10 +3178,16 @@ func TestSystemBackend_ToolsHash(t *testing.T) { req.Data = map[string]interface{}{ "input": "dGhlIHF1aWNrIGJyb3duIGZveA==", } - _, err := b.HandleRequest(namespace.RootContext(nil), req) + resp, err := b.HandleRequest(namespace.RootContext(nil), req) if err != nil { t.Fatalf("err: %v", err) } + schema.ValidateResponse( + t, + schema.GetResponseSchema(t, b.(*SystemBackend).Route(req.Path), req.Operation), + resp, + true, + ) doRequest := func(req *logical.Request, errExpected bool, expected string) { t.Helper() @@ -3192,12 +3198,21 @@ func TestSystemBackend_ToolsHash(t *testing.T) { if resp == nil { t.Fatal("expected non-nil response") } + if errExpected { if !resp.IsError() { t.Fatalf("bad: got error response: %#v", *resp) } return + } else { + schema.ValidateResponse( + t, + schema.GetResponseSchema(t, b.(*SystemBackend).Route(req.Path), req.Operation), + resp, + true, + ) } + if resp.IsError() { t.Fatalf("bad: got error response: %#v", *resp) } @@ -3263,10 +3278,16 @@ func TestSystemBackend_ToolsRandom(t *testing.T) { b := testSystemBackend(t) req := logical.TestRequest(t, logical.UpdateOperation, "tools/random") - _, err := b.HandleRequest(namespace.RootContext(nil), req) + resp, err := b.HandleRequest(namespace.RootContext(nil), req) if err != nil { t.Fatalf("err: %v", err) } + schema.ValidateResponse( + t, + schema.GetResponseSchema(t, b.(*SystemBackend).Route(req.Path), req.Operation), + resp, + true, + ) doRequest := func(req *logical.Request, errExpected bool, format string, numBytes int) { t.Helper() @@ -3283,7 +3304,15 @@ func TestSystemBackend_ToolsRandom(t *testing.T) { t.Fatalf("bad: got error response: %#v", *resp) } return nil + } else { + schema.ValidateResponse( + t, + schema.GetResponseSchema(t, b.(*SystemBackend).Route(req.Path), req.Operation), + resp, + true, + ) } + if resp.IsError() { t.Fatalf("bad: got error response: %#v", *resp) }