list_test.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package image // import "github.com/docker/docker/integration/image"
  2. import (
  3. "context"
  4. "testing"
  5. "github.com/docker/docker/api/types"
  6. "github.com/docker/docker/api/types/filters"
  7. "github.com/docker/docker/api/types/versions"
  8. "gotest.tools/assert"
  9. is "gotest.tools/assert/cmp"
  10. "gotest.tools/skip"
  11. )
  12. // Regression : #38171
  13. func TestImagesFilterMultiReference(t *testing.T) {
  14. skip.If(t, versions.LessThan(testEnv.DaemonAPIVersion(), "1.40"), "broken in earlier versions")
  15. defer setupTest(t)()
  16. client := testEnv.APIClient()
  17. ctx := context.Background()
  18. name := "images_filter_multi_reference"
  19. repoTags := []string{
  20. name + ":v1",
  21. name + ":v2",
  22. name + ":v3",
  23. name + ":v4",
  24. }
  25. for _, repoTag := range repoTags {
  26. err := client.ImageTag(ctx, "busybox:latest", repoTag)
  27. assert.NilError(t, err)
  28. }
  29. filter := filters.NewArgs()
  30. filter.Add("reference", repoTags[0])
  31. filter.Add("reference", repoTags[1])
  32. filter.Add("reference", repoTags[2])
  33. options := types.ImageListOptions{
  34. All: false,
  35. Filters: filter,
  36. }
  37. images, err := client.ImageList(ctx, options)
  38. assert.NilError(t, err)
  39. assert.Check(t, is.Equal(len(images[0].RepoTags), 3))
  40. for _, repoTag := range images[0].RepoTags {
  41. if repoTag != repoTags[0] && repoTag != repoTags[1] && repoTag != repoTags[2] {
  42. t.Errorf("list images doesn't match any repoTag we expected, repoTag: %s", repoTag)
  43. }
  44. }
  45. }