inspect_test.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. package service
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "strings"
  6. "testing"
  7. "time"
  8. "github.com/docker/docker/api/types/swarm"
  9. "github.com/docker/docker/cli/command/formatter"
  10. "github.com/docker/docker/pkg/testutil/assert"
  11. )
  12. func formatServiceInspect(t *testing.T, format formatter.Format, now time.Time) string {
  13. b := new(bytes.Buffer)
  14. endpointSpec := &swarm.EndpointSpec{
  15. Mode: "vip",
  16. Ports: []swarm.PortConfig{
  17. {
  18. Protocol: swarm.PortConfigProtocolTCP,
  19. TargetPort: 5000,
  20. },
  21. },
  22. }
  23. two := uint64(2)
  24. s := swarm.Service{
  25. ID: "de179gar9d0o7ltdybungplod",
  26. Meta: swarm.Meta{
  27. Version: swarm.Version{Index: 315},
  28. CreatedAt: now,
  29. UpdatedAt: now,
  30. },
  31. Spec: swarm.ServiceSpec{
  32. Annotations: swarm.Annotations{
  33. Name: "my_service",
  34. Labels: map[string]string{"com.label": "foo"},
  35. },
  36. TaskTemplate: swarm.TaskSpec{
  37. ContainerSpec: swarm.ContainerSpec{
  38. Image: "foo/bar@sha256:this_is_a_test",
  39. },
  40. },
  41. Mode: swarm.ServiceMode{
  42. Replicated: &swarm.ReplicatedService{
  43. Replicas: &two,
  44. },
  45. },
  46. UpdateConfig: nil,
  47. Networks: []swarm.NetworkAttachmentConfig{
  48. {
  49. Target: "5vpyomhb6ievnk0i0o60gcnei",
  50. Aliases: []string{"web"},
  51. },
  52. },
  53. EndpointSpec: endpointSpec,
  54. },
  55. Endpoint: swarm.Endpoint{
  56. Spec: *endpointSpec,
  57. Ports: []swarm.PortConfig{
  58. {
  59. Protocol: swarm.PortConfigProtocolTCP,
  60. TargetPort: 5000,
  61. PublishedPort: 30000,
  62. },
  63. },
  64. VirtualIPs: []swarm.EndpointVirtualIP{
  65. {
  66. NetworkID: "6o4107cj2jx9tihgb0jyts6pj",
  67. Addr: "10.255.0.4/16",
  68. },
  69. },
  70. },
  71. UpdateStatus: swarm.UpdateStatus{
  72. StartedAt: now,
  73. CompletedAt: now,
  74. },
  75. }
  76. ctx := formatter.Context{
  77. Output: b,
  78. Format: format,
  79. }
  80. err := formatter.ServiceInspectWrite(ctx, []string{"de179gar9d0o7ltdybungplod"}, func(ref string) (interface{}, []byte, error) {
  81. return s, nil, nil
  82. })
  83. if err != nil {
  84. t.Fatal(err)
  85. }
  86. return b.String()
  87. }
  88. func TestPrettyPrintWithNoUpdateConfig(t *testing.T) {
  89. s := formatServiceInspect(t, formatter.NewServiceFormat("pretty"), time.Now())
  90. if strings.Contains(s, "UpdateStatus") {
  91. t.Fatal("Pretty print failed before parsing UpdateStatus")
  92. }
  93. }
  94. func TestJSONFormatWithNoUpdateConfig(t *testing.T) {
  95. now := time.Now()
  96. // s1: [{"ID":..}]
  97. // s2: {"ID":..}
  98. s1 := formatServiceInspect(t, formatter.NewServiceFormat(""), now)
  99. t.Log("// s1")
  100. t.Logf("%s", s1)
  101. s2 := formatServiceInspect(t, formatter.NewServiceFormat("{{json .}}"), now)
  102. t.Log("// s2")
  103. t.Logf("%s", s2)
  104. var m1Wrap []map[string]interface{}
  105. if err := json.Unmarshal([]byte(s1), &m1Wrap); err != nil {
  106. t.Fatal(err)
  107. }
  108. if len(m1Wrap) != 1 {
  109. t.Fatalf("strange s1=%s", s1)
  110. }
  111. m1 := m1Wrap[0]
  112. t.Logf("m1=%+v", m1)
  113. var m2 map[string]interface{}
  114. if err := json.Unmarshal([]byte(s2), &m2); err != nil {
  115. t.Fatal(err)
  116. }
  117. t.Logf("m2=%+v", m2)
  118. assert.DeepEqual(t, m2, m1)
  119. }