network_inspect_test.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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/network"
  12. "github.com/stretchr/testify/assert"
  13. "golang.org/x/net/context"
  14. )
  15. func TestNetworkInspectError(t *testing.T) {
  16. client := &Client{
  17. client: newMockClient(errorMock(http.StatusInternalServerError, "Server error")),
  18. }
  19. _, err := client.NetworkInspect(context.Background(), "nothing", types.NetworkInspectOptions{})
  20. assert.EqualError(t, err, "Error response from daemon: Server error")
  21. }
  22. func TestNetworkInspectNotFoundError(t *testing.T) {
  23. client := &Client{
  24. client: newMockClient(errorMock(http.StatusNotFound, "missing")),
  25. }
  26. _, err := client.NetworkInspect(context.Background(), "unknown", types.NetworkInspectOptions{})
  27. assert.EqualError(t, err, "Error: No such network: unknown")
  28. assert.True(t, IsErrNotFound(err))
  29. }
  30. func TestNetworkInspect(t *testing.T) {
  31. expectedURL := "/networks/network_id"
  32. client := &Client{
  33. client: newMockClient(func(req *http.Request) (*http.Response, error) {
  34. if !strings.HasPrefix(req.URL.Path, expectedURL) {
  35. return nil, fmt.Errorf("Expected URL '%s', got '%s'", expectedURL, req.URL)
  36. }
  37. if req.Method != "GET" {
  38. return nil, fmt.Errorf("expected GET method, got %s", req.Method)
  39. }
  40. var (
  41. content []byte
  42. err error
  43. )
  44. if strings.Contains(req.URL.RawQuery, "scope=global") {
  45. return &http.Response{
  46. StatusCode: http.StatusNotFound,
  47. Body: ioutil.NopCloser(bytes.NewReader(content)),
  48. }, nil
  49. }
  50. if strings.Contains(req.URL.RawQuery, "verbose=true") {
  51. s := map[string]network.ServiceInfo{
  52. "web": {},
  53. }
  54. content, err = json.Marshal(types.NetworkResource{
  55. Name: "mynetwork",
  56. Services: s,
  57. })
  58. } else {
  59. content, err = json.Marshal(types.NetworkResource{
  60. Name: "mynetwork",
  61. })
  62. }
  63. if err != nil {
  64. return nil, err
  65. }
  66. return &http.Response{
  67. StatusCode: http.StatusOK,
  68. Body: ioutil.NopCloser(bytes.NewReader(content)),
  69. }, nil
  70. }),
  71. }
  72. r, err := client.NetworkInspect(context.Background(), "network_id", types.NetworkInspectOptions{})
  73. if err != nil {
  74. t.Fatal(err)
  75. }
  76. if r.Name != "mynetwork" {
  77. t.Fatalf("expected `mynetwork`, got %s", r.Name)
  78. }
  79. r, err = client.NetworkInspect(context.Background(), "network_id", types.NetworkInspectOptions{Verbose: true})
  80. if err != nil {
  81. t.Fatal(err)
  82. }
  83. if r.Name != "mynetwork" {
  84. t.Fatalf("expected `mynetwork`, got %s", r.Name)
  85. }
  86. _, ok := r.Services["web"]
  87. if !ok {
  88. t.Fatalf("expected service `web` missing in the verbose output")
  89. }
  90. _, err = client.NetworkInspect(context.Background(), "network_id", types.NetworkInspectOptions{Scope: "global"})
  91. assert.EqualError(t, err, "Error: No such network: network_id")
  92. }