mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
search: un-export registry.DefaultSearchLimit, and fix API status codes
Move the default to the service itself, and produce the correct status code if an invalid limit was specified. The default is currently set both on the cli and on the daemon side, and it should be only set on one of them. There is a slight change in behavior; previously, searching with `--limit=0` would produce an error, but with this change, it's considered the equivalent of "no limit set" (and using the default). We could keep the old behavior by passing a pointer (`nil` means "not set"), but I left that for a follow-up exercise (we may want to pass an actual config instead of separate arguments, as well as some other things that need cleaning up). Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
parent
7cba4ffa30
commit
a5be5801e9
5 changed files with 15 additions and 14 deletions
|
@ -16,7 +16,6 @@ import (
|
||||||
"github.com/docker/docker/errdefs"
|
"github.com/docker/docker/errdefs"
|
||||||
"github.com/docker/docker/pkg/ioutils"
|
"github.com/docker/docker/pkg/ioutils"
|
||||||
"github.com/docker/docker/pkg/streamformatter"
|
"github.com/docker/docker/pkg/streamformatter"
|
||||||
"github.com/docker/docker/registry"
|
|
||||||
specs "github.com/opencontainers/image-spec/specs-go/v1"
|
specs "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
|
@ -290,13 +289,14 @@ func (s *imageRouter) getImagesSearch(ctx context.Context, w http.ResponseWriter
|
||||||
headers[k] = v
|
headers[k] = v
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
limit := registry.DefaultSearchLimit
|
|
||||||
|
var limit int
|
||||||
if r.Form.Get("limit") != "" {
|
if r.Form.Get("limit") != "" {
|
||||||
limitValue, err := strconv.Atoi(r.Form.Get("limit"))
|
var err error
|
||||||
if err != nil {
|
limit, err = strconv.Atoi(r.Form.Get("limit"))
|
||||||
return err
|
if err != nil || limit < 0 {
|
||||||
|
return errdefs.InvalidParameter(errors.Wrap(err, "invalid limit specified"))
|
||||||
}
|
}
|
||||||
limit = limitValue
|
|
||||||
}
|
}
|
||||||
query, err := s.backend.SearchRegistryForImages(ctx, r.Form.Get("filters"), r.Form.Get("term"), limit, config, headers)
|
query, err := s.backend.SearchRegistryForImages(ctx, r.Form.Get("filters"), r.Form.Get("term"), limit, config, headers)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -79,7 +79,7 @@ func TestSearchRegistryForImagesErrors(t *testing.T) {
|
||||||
shouldReturnError: e.shouldReturnError,
|
shouldReturnError: e.shouldReturnError,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
_, err := daemon.SearchRegistryForImages(context.Background(), e.filtersArgs, "term", 25, nil, map[string][]string{})
|
_, err := daemon.SearchRegistryForImages(context.Background(), e.filtersArgs, "term", 0, nil, map[string][]string{})
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Errorf("%d: expected an error, got nothing", index)
|
t.Errorf("%d: expected an error, got nothing", index)
|
||||||
}
|
}
|
||||||
|
@ -326,7 +326,7 @@ func TestSearchRegistryForImages(t *testing.T) {
|
||||||
results: s.registryResults,
|
results: s.registryResults,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
results, err := daemon.SearchRegistryForImages(context.Background(), s.filtersArgs, term, 25, nil, map[string][]string{})
|
results, err := daemon.SearchRegistryForImages(context.Background(), s.filtersArgs, term, 0, nil, map[string][]string{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("%d: %v", index, err)
|
t.Errorf("%d: %v", index, err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,7 +73,7 @@ func (s *DockerSuite) TestSearchWithLimit(c *testing.T) {
|
||||||
assert.Equal(c, len(outSlice), limit+2) // 1 header, 1 carriage return
|
assert.Equal(c, len(outSlice), limit+2) // 1 header, 1 carriage return
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, limit := range []int{-1, 0, 101} {
|
for _, limit := range []int{-1, 101} {
|
||||||
_, _, err := dockerCmdWithError("search", fmt.Sprintf("--limit=%d", limit), "docker")
|
_, _, err := dockerCmdWithError("search", fmt.Sprintf("--limit=%d", limit), "docker")
|
||||||
assert.ErrorContains(c, err, "")
|
assert.ErrorContains(c, err, "")
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,11 +16,6 @@ import (
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
// DefaultSearchLimit is the default value for maximum number of returned search results.
|
|
||||||
DefaultSearchLimit = 25
|
|
||||||
)
|
|
||||||
|
|
||||||
// Service is the interface defining what a registry service should implement.
|
// Service is the interface defining what a registry service should implement.
|
||||||
type Service interface {
|
type Service interface {
|
||||||
Auth(ctx context.Context, authConfig *types.AuthConfig, userAgent string) (status, token string, err error)
|
Auth(ctx context.Context, authConfig *types.AuthConfig, userAgent string) (status, token string, err error)
|
||||||
|
|
|
@ -184,8 +184,14 @@ func newSession(client *http.Client, endpoint *v1Endpoint) *session {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// defaultSearchLimit is the default value for maximum number of returned search results.
|
||||||
|
const defaultSearchLimit = 25
|
||||||
|
|
||||||
// searchRepositories performs a search against the remote repository
|
// searchRepositories performs a search against the remote repository
|
||||||
func (r *session) searchRepositories(term string, limit int) (*registry.SearchResults, error) {
|
func (r *session) searchRepositories(term string, limit int) (*registry.SearchResults, error) {
|
||||||
|
if limit == 0 {
|
||||||
|
limit = defaultSearchLimit
|
||||||
|
}
|
||||||
if limit < 1 || limit > 100 {
|
if limit < 1 || limit > 100 {
|
||||||
return nil, invalidParamf("limit %d is outside the range of [1, 100]", limit)
|
return nil, invalidParamf("limit %d is outside the range of [1, 100]", limit)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue