Merge pull request #12156 from matejvasek/docker-api-zero-value-fixes

Fix libpod API conformance to swagger
This commit is contained in:
OpenShift Merge Robot
2021-11-02 18:19:24 +01:00
committed by GitHub
7 changed files with 64 additions and 13 deletions

View File

@ -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:"Size"`
PruneError string `json:"Err,omitempty"`
}
type Info struct {

View File

@ -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

View File

@ -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")
}
}

View File

@ -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:
@ -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)

View File

@ -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 {

View File

@ -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

View File

@ -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