From 218d91d76d49c7329704a80411ad2c115b074f84 Mon Sep 17 00:00:00 2001 From: Matej Vasek Date: Mon, 1 Nov 2021 16:10:10 +0100 Subject: Fix libpod API conformance to swagger * Return empty array when nothing has been pruned. * Use correct return type swagger doc-comment. Signed-off-by: Matej Vasek --- pkg/api/server/register_images.go | 2 +- pkg/domain/infra/abi/images.go | 2 +- test/apiv2/10-images.at | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/pkg/api/server/register_images.go b/pkg/api/server/register_images.go index 95a8b4939..82b4c2d89 100644 --- a/pkg/api/server/register_images.go +++ b/pkg/api/server/register_images.go @@ -1069,7 +1069,7 @@ func (s *APIServer) registerImagesHandlers(r *mux.Router) error { // - application/json // responses: // 200: - // $ref: "#/responses/DocsImageDeleteResponse" + // $ref: "#/responses/DocsLibpodPruneResponse" // 500: // $ref: '#/responses/InternalError' r.Handle(VersionedPath("/libpod/images/prune"), s.APIHandler(libpod.PruneImages)).Methods(http.MethodPost) diff --git a/pkg/domain/infra/abi/images.go b/pkg/domain/infra/abi/images.go index 8878bf128..7aa202334 100644 --- a/pkg/domain/infra/abi/images.go +++ b/pkg/domain/infra/abi/images.go @@ -57,7 +57,7 @@ func (ir *ImageEngine) Prune(ctx context.Context, opts entities.ImagePruneOption pruneOptions.Filters = append(pruneOptions.Filters, "containers=false") } - var pruneReports []*reports.PruneReport + pruneReports := make([]*reports.PruneReport, 0) // Now prune all images until we converge. numPreviouslyRemovedImages := 1 diff --git a/test/apiv2/10-images.at b/test/apiv2/10-images.at index d3fde9f9d..b7bcaf81d 100644 --- a/test/apiv2/10-images.at +++ b/test/apiv2/10-images.at @@ -218,6 +218,9 @@ if ! grep -q '400 Bad Request' "${TMPD}/headers.txt"; then BUILD_TEST_ERROR="1" fi +t POST libpod/images/prune 200 +t POST libpod/images/prune 200 length=0 [] + cleanBuildTest if [[ "${BUILD_TEST_ERROR}" ]]; then exit 1 -- cgit v1.2.3-54-g00ecf From 120ad2d3ca0ac04a3421d620a8fdf06c472abd2c Mon Sep 17 00:00:00 2001 From: Matej Vasek Date: Mon, 1 Nov 2021 17:09:35 +0100 Subject: Use correct swagger type in doc-comment Signed-off-by: Matej Vasek --- pkg/api/server/register_images.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/api/server/register_images.go b/pkg/api/server/register_images.go index 82b4c2d89..effe6627d 100644 --- a/pkg/api/server/register_images.go +++ b/pkg/api/server/register_images.go @@ -967,7 +967,7 @@ func (s *APIServer) registerImagesHandlers(r *mux.Router) error { // - application/json // responses: // 200: - // $ref: "#/responses/DocsImageDeleteResponse" + // $ref: "#/responses/DocsLibpodImagesRemoveResponse" // 400: // $ref: "#/responses/BadParamError" // 404: -- cgit v1.2.3-54-g00ecf From a845613d03db2c15c2aade29f78cd74c28957f1b Mon Sep 17 00:00:00 2001 From: Matej Vasek Date: Mon, 1 Nov 2021 20:12:35 +0100 Subject: Better emptiness test for custom JSON serializer Signed-off-by: Matej Vasek --- pkg/api/handlers/utils/handler.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/api/handlers/utils/handler.go b/pkg/api/handlers/utils/handler.go index 29139a98e..96b7a957c 100644 --- a/pkg/api/handlers/utils/handler.go +++ b/pkg/api/handlers/utils/handler.go @@ -145,12 +145,12 @@ func MarshalErrorSliceJSON(ptr unsafe.Pointer, stream *jsoniter.Stream) { } } -func MarshalErrorJSONIsEmpty(_ unsafe.Pointer) bool { - return false +func MarshalErrorJSONIsEmpty(ptr unsafe.Pointer) bool { + return *((*error)(ptr)) == nil } -func MarshalErrorSliceJSONIsEmpty(_ unsafe.Pointer) bool { - return false +func MarshalErrorSliceJSONIsEmpty(ptr unsafe.Pointer) bool { + return len(*((*[]error)(ptr))) <= 0 } // WriteJSON writes an interface value encoded as JSON to w -- cgit v1.2.3-54-g00ecf From 62ee24bb7c94556c8ed63553d2695d3c2ac24418 Mon Sep 17 00:00:00 2001 From: Matej Vasek Date: Mon, 1 Nov 2021 20:15:00 +0100 Subject: More conforming libpod API and swagger types Signed-off-by: Matej Vasek --- pkg/api/handlers/types.go | 6 +++--- pkg/domain/entities/reports/prune.go | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pkg/api/handlers/types.go b/pkg/api/handlers/types.go index b90154e30..9ad3bcca0 100644 --- a/pkg/api/handlers/types.go +++ b/pkg/api/handlers/types.go @@ -42,9 +42,9 @@ type ContainersPruneReport struct { } type LibpodContainersPruneReport struct { - ID string `json:"id"` - SpaceReclaimed int64 `json:"space"` - PruneError string `json:"error"` + ID string `json:"Id"` + SpaceReclaimed int64 `json:"Space"` + PruneError string `json:"Err,omitempty"` } type Info struct { diff --git a/pkg/domain/entities/reports/prune.go b/pkg/domain/entities/reports/prune.go index 5494ac3ae..219e35b67 100644 --- a/pkg/domain/entities/reports/prune.go +++ b/pkg/domain/entities/reports/prune.go @@ -1,9 +1,9 @@ package reports type PruneReport struct { - Id string //nolint - Err error - Size uint64 + Id string `json:"Id"` //nolint + Err error `json:"Err,omitempty"` + Size uint64 `json:"Size"` } func PruneReportsIds(r []*PruneReport) []string { -- cgit v1.2.3-54-g00ecf From 48e1cca9f8f6a9f50e317214bd87e5dfa57d9ab4 Mon Sep 17 00:00:00 2001 From: Matej Vasek Date: Mon, 1 Nov 2021 20:25:58 +0100 Subject: More conforming libpod API and swagger types Signed-off-by: Matej Vasek --- pkg/api/handlers/types.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/api/handlers/types.go b/pkg/api/handlers/types.go index 9ad3bcca0..c63cf8f0e 100644 --- a/pkg/api/handlers/types.go +++ b/pkg/api/handlers/types.go @@ -43,7 +43,7 @@ type ContainersPruneReport struct { type LibpodContainersPruneReport struct { ID string `json:"Id"` - SpaceReclaimed int64 `json:"Space"` + SpaceReclaimed int64 `json:"Size"` PruneError string `json:"Err,omitempty"` } -- cgit v1.2.3-54-g00ecf From d0dfc5e2234a3567addd8163a0bd6a3f03d740cc Mon Sep 17 00:00:00 2001 From: Matej Vasek Date: Mon, 1 Nov 2021 22:53:49 +0100 Subject: Add tests Signed-off-by: Matej Vasek --- pkg/api/handlers/utils/handler_test.go | 48 ++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/pkg/api/handlers/utils/handler_test.go b/pkg/api/handlers/utils/handler_test.go index 18a1d2678..5957e7d74 100644 --- a/pkg/api/handlers/utils/handler_test.go +++ b/pkg/api/handlers/utils/handler_test.go @@ -138,3 +138,51 @@ func TestEqualVersion(t *testing.T) { rr.Body.String(), expected) } } + +func TestErrorEncoderFuncOmit(t *testing.T) { + data, err := json.Marshal(struct { + Err error `json:"err,omitempty"` + Errs []error `json:"errs,omitempty"` + }{}) + if err != nil { + t.Fatal(err) + } + + dataAsMap := make(map[string]interface{}) + err = json.Unmarshal(data, &dataAsMap) + if err != nil { + t.Fatal(err) + } + + _, ok := dataAsMap["err"] + if ok { + t.Errorf("the `err` field should have been omitted") + } + _, ok = dataAsMap["errs"] + if ok { + t.Errorf("the `errs` field should have been omitted") + } + + dataAsMap = make(map[string]interface{}) + data, err = json.Marshal(struct { + Err error `json:"err"` + Errs []error `json:"errs"` + }{}) + if err != nil { + t.Fatal(err) + } + + err = json.Unmarshal(data, &dataAsMap) + if err != nil { + t.Fatal(err) + } + + _, ok = dataAsMap["err"] + if !ok { + t.Errorf("the `err` field shouldn't have been omitted") + } + _, ok = dataAsMap["errs"] + if !ok { + t.Errorf("the `errs` field shouldn't have been omitted") + } +} -- cgit v1.2.3-54-g00ecf