123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358 |
- package daemon
- import (
- "fmt"
- "strings"
- "testing"
- "golang.org/x/net/context"
- "github.com/docker/docker/registry"
- "github.com/docker/engine-api/types"
- registrytypes "github.com/docker/engine-api/types/registry"
- )
- type FakeService struct {
- registry.DefaultService
- shouldReturnError bool
- term string
- results []registrytypes.SearchResult
- }
- func (s *FakeService) Search(ctx context.Context, term string, limit int, authConfig *types.AuthConfig, userAgent string, headers map[string][]string) (*registrytypes.SearchResults, error) {
- if s.shouldReturnError {
- return nil, fmt.Errorf("Search unknown error")
- }
- return ®istrytypes.SearchResults{
- Query: s.term,
- NumResults: len(s.results),
- Results: s.results,
- }, nil
- }
- func TestSearchRegistryForImagesErrors(t *testing.T) {
- errorCases := []struct {
- filtersArgs string
- shouldReturnError bool
- expectedError string
- }{
- {
- expectedError: "Search unknown error",
- shouldReturnError: true,
- },
- {
- filtersArgs: "invalid json",
- expectedError: "invalid character 'i' looking for beginning of value",
- },
- {
- filtersArgs: `{"type":{"custom":true}}`,
- expectedError: "Invalid filter 'type'",
- },
- {
- filtersArgs: `{"is-automated":{"invalid":true}}`,
- expectedError: "Invalid filter 'is-automated=[invalid]'",
- },
- {
- filtersArgs: `{"is-automated":{"true":true,"false":true}}`,
- expectedError: "Invalid filter 'is-automated",
- },
- {
- filtersArgs: `{"is-official":{"invalid":true}}`,
- expectedError: "Invalid filter 'is-official=[invalid]'",
- },
- {
- filtersArgs: `{"is-official":{"true":true,"false":true}}`,
- expectedError: "Invalid filter 'is-official",
- },
- {
- filtersArgs: `{"stars":{"invalid":true}}`,
- expectedError: "Invalid filter 'stars=invalid'",
- },
- {
- filtersArgs: `{"stars":{"1":true,"invalid":true}}`,
- expectedError: "Invalid filter 'stars=invalid'",
- },
- }
- for index, e := range errorCases {
- daemon := &Daemon{
- RegistryService: &FakeService{
- shouldReturnError: e.shouldReturnError,
- },
- }
- _, err := daemon.SearchRegistryForImages(context.Background(), e.filtersArgs, "term", 25, nil, map[string][]string{})
- if err == nil {
- t.Errorf("%d: expected an error, got nothing", index)
- }
- if !strings.Contains(err.Error(), e.expectedError) {
- t.Errorf("%d: expected error to contain %s, got %s", index, e.expectedError, err.Error())
- }
- }
- }
- func TestSearchRegistryForImages(t *testing.T) {
- term := "term"
- successCases := []struct {
- filtersArgs string
- registryResults []registrytypes.SearchResult
- expectedResults []registrytypes.SearchResult
- }{
- {
- filtersArgs: "",
- registryResults: []registrytypes.SearchResult{},
- expectedResults: []registrytypes.SearchResult{},
- },
- {
- filtersArgs: "",
- registryResults: []registrytypes.SearchResult{
- {
- Name: "name",
- Description: "description",
- },
- },
- expectedResults: []registrytypes.SearchResult{
- {
- Name: "name",
- Description: "description",
- },
- },
- },
- {
- filtersArgs: `{"is-automated":{"true":true}}`,
- registryResults: []registrytypes.SearchResult{
- {
- Name: "name",
- Description: "description",
- },
- },
- expectedResults: []registrytypes.SearchResult{},
- },
- {
- filtersArgs: `{"is-automated":{"true":true}}`,
- registryResults: []registrytypes.SearchResult{
- {
- Name: "name",
- Description: "description",
- IsAutomated: true,
- },
- },
- expectedResults: []registrytypes.SearchResult{
- {
- Name: "name",
- Description: "description",
- IsAutomated: true,
- },
- },
- },
- {
- filtersArgs: `{"is-automated":{"false":true}}`,
- registryResults: []registrytypes.SearchResult{
- {
- Name: "name",
- Description: "description",
- IsAutomated: true,
- },
- },
- expectedResults: []registrytypes.SearchResult{},
- },
- {
- filtersArgs: `{"is-automated":{"false":true}}`,
- registryResults: []registrytypes.SearchResult{
- {
- Name: "name",
- Description: "description",
- IsAutomated: false,
- },
- },
- expectedResults: []registrytypes.SearchResult{
- {
- Name: "name",
- Description: "description",
- IsAutomated: false,
- },
- },
- },
- {
- filtersArgs: `{"is-official":{"true":true}}`,
- registryResults: []registrytypes.SearchResult{
- {
- Name: "name",
- Description: "description",
- },
- },
- expectedResults: []registrytypes.SearchResult{},
- },
- {
- filtersArgs: `{"is-official":{"true":true}}`,
- registryResults: []registrytypes.SearchResult{
- {
- Name: "name",
- Description: "description",
- IsOfficial: true,
- },
- },
- expectedResults: []registrytypes.SearchResult{
- {
- Name: "name",
- Description: "description",
- IsOfficial: true,
- },
- },
- },
- {
- filtersArgs: `{"is-official":{"false":true}}`,
- registryResults: []registrytypes.SearchResult{
- {
- Name: "name",
- Description: "description",
- IsOfficial: true,
- },
- },
- expectedResults: []registrytypes.SearchResult{},
- },
- {
- filtersArgs: `{"is-official":{"false":true}}`,
- registryResults: []registrytypes.SearchResult{
- {
- Name: "name",
- Description: "description",
- IsOfficial: false,
- },
- },
- expectedResults: []registrytypes.SearchResult{
- {
- Name: "name",
- Description: "description",
- IsOfficial: false,
- },
- },
- },
- {
- filtersArgs: `{"stars":{"0":true}}`,
- registryResults: []registrytypes.SearchResult{
- {
- Name: "name",
- Description: "description",
- StarCount: 0,
- },
- },
- expectedResults: []registrytypes.SearchResult{
- {
- Name: "name",
- Description: "description",
- StarCount: 0,
- },
- },
- },
- {
- filtersArgs: `{"stars":{"1":true}}`,
- registryResults: []registrytypes.SearchResult{
- {
- Name: "name",
- Description: "description",
- StarCount: 0,
- },
- },
- expectedResults: []registrytypes.SearchResult{},
- },
- {
- filtersArgs: `{"stars":{"1":true}}`,
- registryResults: []registrytypes.SearchResult{
- {
- Name: "name0",
- Description: "description0",
- StarCount: 0,
- },
- {
- Name: "name1",
- Description: "description1",
- StarCount: 1,
- },
- },
- expectedResults: []registrytypes.SearchResult{
- {
- Name: "name1",
- Description: "description1",
- StarCount: 1,
- },
- },
- },
- {
- filtersArgs: `{"stars":{"1":true}, "is-official":{"true":true}, "is-automated":{"true":true}}`,
- registryResults: []registrytypes.SearchResult{
- {
- Name: "name0",
- Description: "description0",
- StarCount: 0,
- IsOfficial: true,
- IsAutomated: true,
- },
- {
- Name: "name1",
- Description: "description1",
- StarCount: 1,
- IsOfficial: false,
- IsAutomated: true,
- },
- {
- Name: "name2",
- Description: "description2",
- StarCount: 1,
- IsOfficial: true,
- IsAutomated: false,
- },
- {
- Name: "name3",
- Description: "description3",
- StarCount: 2,
- IsOfficial: true,
- IsAutomated: true,
- },
- },
- expectedResults: []registrytypes.SearchResult{
- {
- Name: "name3",
- Description: "description3",
- StarCount: 2,
- IsOfficial: true,
- IsAutomated: true,
- },
- },
- },
- }
- for index, s := range successCases {
- daemon := &Daemon{
- RegistryService: &FakeService{
- term: term,
- results: s.registryResults,
- },
- }
- results, err := daemon.SearchRegistryForImages(context.Background(), s.filtersArgs, term, 25, nil, map[string][]string{})
- if err != nil {
- t.Errorf("%d: %v", index, err)
- }
- if results.Query != term {
- t.Errorf("%d: expected Query to be %s, got %s", index, term, results.Query)
- }
- if results.NumResults != len(s.expectedResults) {
- t.Errorf("%d: expected NumResults to be %d, got %d", index, len(s.expectedResults), results.NumResults)
- }
- for _, result := range results.Results {
- found := false
- for _, expectedResult := range s.expectedResults {
- if expectedResult.Name == result.Name &&
- expectedResult.Description == result.Description &&
- expectedResult.IsAutomated == result.IsAutomated &&
- expectedResult.IsOfficial == result.IsOfficial &&
- expectedResult.StarCount == result.StarCount {
- found = true
- break
- }
- }
- if !found {
- t.Errorf("%d: expected results %v, got %v", index, s.expectedResults, results.Results)
- }
- }
- }
- }
|