func TestJSONFormatWithNoUpdateConfig(t *testing.T) { now := time.Now() // s1: [{"ID":..}] // s2: {"ID":..} s1 := formatServiceInspect(t, formatter.NewServiceFormat(""), now) t.Log("// s1") t.Logf("%s", s1) s2 := formatServiceInspect(t, formatter.NewServiceFormat("{{json .}}"), now) t.Log("// s2") t.Logf("%s", s2) var m1Wrap []map[string]interface{} if err := json.Unmarshal([]byte(s1), &m1Wrap); err != nil { t.Fatal(err) } if len(m1Wrap) != 1 { t.Fatalf("strange s1=%s", s1) } m1 := m1Wrap[0] t.Logf("m1=%+v", m1) var m2 map[string]interface{} if err := json.Unmarshal([]byte(s2), &m2); err != nil { t.Fatal(err) } t.Logf("m2=%+v", m2) assert.DeepEqual(t, m2, m1) }
func runInspect(dockerCli *command.DockerCli, opts inspectOptions) error { client := dockerCli.Client() ctx := context.Background() if opts.pretty { opts.format = "pretty" } getRef := func(ref string) (interface{}, []byte, error) { service, _, err := client.ServiceInspectWithRaw(ctx, ref) if err == nil || !apiclient.IsErrServiceNotFound(err) { return service, nil, err } return nil, nil, fmt.Errorf("Error: no such service: %s", ref) } f := opts.format if len(f) == 0 { f = "raw" if len(dockerCli.ConfigFile().ServiceInspectFormat) > 0 { f = dockerCli.ConfigFile().ServiceInspectFormat } } // check if the user is trying to apply a template to the pretty format, which // is not supported if strings.HasPrefix(f, "pretty") && f != "pretty" { return fmt.Errorf("Cannot supply extra formatting options to the pretty template") } serviceCtx := formatter.Context{ Output: dockerCli.Out(), Format: formatter.NewServiceFormat(f), } if err := formatter.ServiceInspectWrite(serviceCtx, opts.refs, getRef); err != nil { return cli.StatusError{StatusCode: 1, Status: err.Error()} } return nil }
func TestPrettyPrintWithNoUpdateConfig(t *testing.T) { s := formatServiceInspect(t, formatter.NewServiceFormat("pretty"), time.Now()) if strings.Contains(s, "UpdateStatus") { t.Fatal("Pretty print failed before parsing UpdateStatus") } }
func TestPrettyPrintWithNoUpdateConfig(t *testing.T) { b := new(bytes.Buffer) endpointSpec := &swarm.EndpointSpec{ Mode: "vip", Ports: []swarm.PortConfig{ { Protocol: swarm.PortConfigProtocolTCP, TargetPort: 5000, }, }, } two := uint64(2) s := swarm.Service{ ID: "de179gar9d0o7ltdybungplod", Meta: swarm.Meta{ Version: swarm.Version{Index: 315}, CreatedAt: time.Now(), UpdatedAt: time.Now(), }, Spec: swarm.ServiceSpec{ Annotations: swarm.Annotations{ Name: "my_service", Labels: map[string]string{"com.label": "foo"}, }, TaskTemplate: swarm.TaskSpec{ ContainerSpec: swarm.ContainerSpec{ Image: "foo/bar@sha256:this_is_a_test", }, }, Mode: swarm.ServiceMode{ Replicated: &swarm.ReplicatedService{ Replicas: &two, }, }, UpdateConfig: nil, Networks: []swarm.NetworkAttachmentConfig{ { Target: "5vpyomhb6ievnk0i0o60gcnei", Aliases: []string{"web"}, }, }, EndpointSpec: endpointSpec, }, Endpoint: swarm.Endpoint{ Spec: *endpointSpec, Ports: []swarm.PortConfig{ { Protocol: swarm.PortConfigProtocolTCP, TargetPort: 5000, PublishedPort: 30000, }, }, VirtualIPs: []swarm.EndpointVirtualIP{ { NetworkID: "6o4107cj2jx9tihgb0jyts6pj", Addr: "10.255.0.4/16", }, }, }, UpdateStatus: swarm.UpdateStatus{ StartedAt: time.Now(), CompletedAt: time.Now(), }, } ctx := formatter.Context{ Output: b, Format: formatter.NewServiceFormat("pretty"), } err := formatter.ServiceInspectWrite(ctx, []string{"de179gar9d0o7ltdybungplod"}, func(ref string) (interface{}, []byte, error) { return s, nil, nil }) if err != nil { t.Fatal(err) } if strings.Contains(b.String(), "UpdateStatus") { t.Fatal("Pretty print failed before parsing UpdateStatus") } }