Skip to content

Commit

Permalink
cli: service inspect - Null check for UpdateConfig
Browse files Browse the repository at this point in the history
Fixes moby#25453

Signed-off-by: Dave Tucker <[email protected]>
  • Loading branch information
Dave Tucker committed Aug 5, 2016
1 parent 049210c commit 0e1fe45
Show file tree
Hide file tree
Showing 2 changed files with 92 additions and 5 deletions.
13 changes: 8 additions & 5 deletions api/client/service/inspect.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,12 +117,15 @@ func printService(out io.Writer, service swarm.Service) {
if service.Spec.TaskTemplate.Placement != nil && len(service.Spec.TaskTemplate.Placement.Constraints) > 0 {
ioutils.FprintfIfNotEmpty(out, " Constraints\t: %s\n", strings.Join(service.Spec.TaskTemplate.Placement.Constraints, ", "))
}
fmt.Fprintf(out, "UpdateConfig:\n")
fmt.Fprintf(out, " Parallelism:\t%d\n", service.Spec.UpdateConfig.Parallelism)
if service.Spec.UpdateConfig.Delay.Nanoseconds() > 0 {
fmt.Fprintf(out, " Delay:\t\t%s\n", service.Spec.UpdateConfig.Delay)
if service.Spec.UpdateConfig != nil {
fmt.Fprintf(out, "UpdateConfig:\n")
fmt.Fprintf(out, " Parallelism:\t%d\n", service.Spec.UpdateConfig.Parallelism)
if service.Spec.UpdateConfig.Delay.Nanoseconds() > 0 {
fmt.Fprintf(out, " Delay:\t\t%s\n", service.Spec.UpdateConfig.Delay)
}
fmt.Fprintf(out, " On failure:\t%s\n", service.Spec.UpdateConfig.FailureAction)
}
fmt.Fprintf(out, " On failure:\t%s\n", service.Spec.UpdateConfig.FailureAction)

fmt.Fprintf(out, "ContainerSpec:\n")
printContainerSpec(out, service.Spec.TaskTemplate.ContainerSpec)

Expand Down
84 changes: 84 additions & 0 deletions api/client/service/inspect_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
package service

import (
"bytes"
"strings"
"testing"
"time"

"github.com/docker/engine-api/types/swarm"
)

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(),
},
}

printService(b, s)
if strings.Contains(b.String(), "UpdateStatus") {
t.Fatal("Pretty print failed before parsing UpdateStatus")
}
}

0 comments on commit 0e1fe45

Please sign in to comment.