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