mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
api: filters: return correct status on invalid filters
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
parent
a5be5801e9
commit
2d45b5ddbc
6 changed files with 21 additions and 10 deletions
|
@ -721,7 +721,7 @@ func (s *containerRouter) postContainersPrune(ctx context.Context, w http.Respon
|
||||||
|
|
||||||
pruneFilters, err := filters.FromJSON(r.Form.Get("filters"))
|
pruneFilters, err := filters.FromJSON(r.Form.Get("filters"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errdefs.InvalidParameter(err)
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
pruneReport, err := s.backend.ContainersPrune(ctx, pruneFilters)
|
pruneReport, err := s.backend.ContainersPrune(ctx, pruneFilters)
|
||||||
|
|
|
@ -30,7 +30,7 @@ func (n *networkRouter) getNetworksList(ctx context.Context, w http.ResponseWrit
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := network.ValidateFilters(filter); err != nil {
|
if err := network.ValidateFilters(filter); err != nil {
|
||||||
return errdefs.InvalidParameter(err)
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var list []types.NetworkResource
|
var list []types.NetworkResource
|
||||||
|
|
|
@ -164,7 +164,7 @@ func (sr *swarmRouter) getServices(ctx context.Context, w http.ResponseWriter, r
|
||||||
}
|
}
|
||||||
filter, err := filters.FromJSON(r.Form.Get("filters"))
|
filter, err := filters.FromJSON(r.Form.Get("filters"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errdefs.InvalidParameter(err)
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// the status query parameter is only support in API versions >= 1.41. If
|
// the status query parameter is only support in API versions >= 1.41. If
|
||||||
|
|
|
@ -21,7 +21,7 @@ func (v *volumeRouter) getVolumesList(ctx context.Context, w http.ResponseWriter
|
||||||
|
|
||||||
filters, err := filters.FromJSON(r.Form.Get("filters"))
|
filters, err := filters.FromJSON(r.Form.Get("filters"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errdefs.InvalidParameter(errors.Wrap(err, "error reading volume filters"))
|
return errors.Wrap(err, "error reading volume filters")
|
||||||
}
|
}
|
||||||
volumes, warnings, err := v.backend.List(ctx, filters)
|
volumes, warnings, err := v.backend.List(ctx, filters)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -9,6 +9,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/docker/docker/api/types/versions"
|
"github.com/docker/docker/api/types/versions"
|
||||||
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Args stores a mapping of keys to a set of multiple values.
|
// Args stores a mapping of keys to a set of multiple values.
|
||||||
|
@ -97,7 +98,7 @@ func FromJSON(p string) (Args, error) {
|
||||||
// Fallback to parsing arguments in the legacy slice format
|
// Fallback to parsing arguments in the legacy slice format
|
||||||
deprecated := map[string][]string{}
|
deprecated := map[string][]string{}
|
||||||
if legacyErr := json.Unmarshal(raw, &deprecated); legacyErr != nil {
|
if legacyErr := json.Unmarshal(raw, &deprecated); legacyErr != nil {
|
||||||
return args, err
|
return args, invalidFilter{errors.Wrap(err, "invalid filter")}
|
||||||
}
|
}
|
||||||
|
|
||||||
args.fields = deprecatedArgs(deprecated)
|
args.fields = deprecatedArgs(deprecated)
|
||||||
|
@ -247,10 +248,10 @@ func (args Args) Contains(field string) bool {
|
||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
|
|
||||||
type invalidFilter string
|
type invalidFilter struct{ error }
|
||||||
|
|
||||||
func (e invalidFilter) Error() string {
|
func (e invalidFilter) Error() string {
|
||||||
return "Invalid filter '" + string(e) + "'"
|
return e.error.Error()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (invalidFilter) InvalidParameter() {}
|
func (invalidFilter) InvalidParameter() {}
|
||||||
|
@ -260,7 +261,7 @@ func (invalidFilter) InvalidParameter() {}
|
||||||
func (args Args) Validate(accepted map[string]bool) error {
|
func (args Args) Validate(accepted map[string]bool) error {
|
||||||
for name := range args.fields {
|
for name := range args.fields {
|
||||||
if !accepted[name] {
|
if !accepted[name] {
|
||||||
return invalidFilter(name)
|
return invalidFilter{errors.New("invalid filter '" + name + "'")}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -69,9 +69,14 @@ func TestFromJSON(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, invalid := range invalids {
|
for _, invalid := range invalids {
|
||||||
if _, err := FromJSON(invalid); err == nil {
|
_, err := FromJSON(invalid)
|
||||||
|
if err == nil {
|
||||||
t.Fatalf("Expected an error with %v, got nothing", invalid)
|
t.Fatalf("Expected an error with %v, got nothing", invalid)
|
||||||
}
|
}
|
||||||
|
var invalidFilterError invalidFilter
|
||||||
|
if !errors.As(err, &invalidFilterError) {
|
||||||
|
t.Fatalf("Expected an invalidFilter error, got %T", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for expectedArgs, matchers := range valid {
|
for expectedArgs, matchers := range valid {
|
||||||
|
@ -327,9 +332,14 @@ func TestValidate(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
f.Add("bogus", "running")
|
f.Add("bogus", "running")
|
||||||
if err := f.Validate(valid); err == nil {
|
err := f.Validate(valid)
|
||||||
|
if err == nil {
|
||||||
t.Fatal("Expected to return an error, got nil")
|
t.Fatal("Expected to return an error, got nil")
|
||||||
}
|
}
|
||||||
|
var invalidFilterError invalidFilter
|
||||||
|
if !errors.As(err, &invalidFilterError) {
|
||||||
|
t.Fatalf("Expected an invalidFilter error, got %T", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestWalkValues(t *testing.T) {
|
func TestWalkValues(t *testing.T) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue