container_list_test.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package client
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "fmt"
  6. "io/ioutil"
  7. "net/http"
  8. "strings"
  9. "testing"
  10. "github.com/docker/docker/api/types"
  11. "github.com/docker/docker/api/types/filters"
  12. "golang.org/x/net/context"
  13. )
  14. func TestContainerListError(t *testing.T) {
  15. client := &Client{
  16. client: newMockClient(errorMock(http.StatusInternalServerError, "Server error")),
  17. }
  18. _, err := client.ContainerList(context.Background(), types.ContainerListOptions{})
  19. if err == nil || err.Error() != "Error response from daemon: Server error" {
  20. t.Fatalf("expected a Server Error, got %v", err)
  21. }
  22. }
  23. func TestContainerList(t *testing.T) {
  24. expectedURL := "/containers/json"
  25. expectedFilters := `{"before":{"container":true},"label":{"label1":true,"label2":true}}`
  26. client := &Client{
  27. client: newMockClient(func(req *http.Request) (*http.Response, error) {
  28. if !strings.HasPrefix(req.URL.Path, expectedURL) {
  29. return nil, fmt.Errorf("Expected URL '%s', got '%s'", expectedURL, req.URL)
  30. }
  31. query := req.URL.Query()
  32. all := query.Get("all")
  33. if all != "1" {
  34. return nil, fmt.Errorf("all not set in URL query properly. Expected '1', got %s", all)
  35. }
  36. limit := query.Get("limit")
  37. if limit != "0" {
  38. return nil, fmt.Errorf("limit should have not be present in query. Expected '0', got %s", limit)
  39. }
  40. since := query.Get("since")
  41. if since != "container" {
  42. return nil, fmt.Errorf("since not set in URL query properly. Expected 'container', got %s", since)
  43. }
  44. before := query.Get("before")
  45. if before != "" {
  46. return nil, fmt.Errorf("before should have not be present in query, go %s", before)
  47. }
  48. size := query.Get("size")
  49. if size != "1" {
  50. return nil, fmt.Errorf("size not set in URL query properly. Expected '1', got %s", size)
  51. }
  52. filters := query.Get("filters")
  53. if filters != expectedFilters {
  54. return nil, fmt.Errorf("expected filters incoherent '%v' with actual filters %v", expectedFilters, filters)
  55. }
  56. b, err := json.Marshal([]types.Container{
  57. {
  58. ID: "container_id1",
  59. },
  60. {
  61. ID: "container_id2",
  62. },
  63. })
  64. if err != nil {
  65. return nil, err
  66. }
  67. return &http.Response{
  68. StatusCode: http.StatusOK,
  69. Body: ioutil.NopCloser(bytes.NewReader(b)),
  70. }, nil
  71. }),
  72. }
  73. filters := filters.NewArgs()
  74. filters.Add("label", "label1")
  75. filters.Add("label", "label2")
  76. filters.Add("before", "container")
  77. containers, err := client.ContainerList(context.Background(), types.ContainerListOptions{
  78. Size: true,
  79. All: true,
  80. Since: "container",
  81. Filters: filters,
  82. })
  83. if err != nil {
  84. t.Fatal(err)
  85. }
  86. if len(containers) != 2 {
  87. t.Fatalf("expected 2 containers, got %v", containers)
  88. }
  89. }