diff --git a/daemon/cluster/cluster.go b/daemon/cluster/cluster.go index 8042d2c7fa..fa3ece8fa3 100644 --- a/daemon/cluster/cluster.go +++ b/daemon/cluster/cluster.go @@ -654,7 +654,7 @@ func (c *Cluster) GetServices(options apitypes.ServiceListOptions) ([]types.Serv return nil, err } - var services []types.Service + services := []types.Service{} for _, service := range r.Services { services = append(services, convert.ServiceFromGRPC(*service)) diff --git a/integration-cli/daemon_swarm.go b/integration-cli/daemon_swarm.go index 015cd28f8e..1fca8aeacf 100644 --- a/integration-cli/daemon_swarm.go +++ b/integration-cli/daemon_swarm.go @@ -212,6 +212,16 @@ func (d *SwarmDaemon) listNodes(c *check.C) []swarm.Node { return nodes } +func (d *SwarmDaemon) listServices(c *check.C) []swarm.Service { + status, out, err := d.SockRequest("GET", "/services", nil) + c.Assert(err, checker.IsNil) + c.Assert(status, checker.Equals, http.StatusOK, check.Commentf("output: %q", string(out))) + + services := []swarm.Service{} + c.Assert(json.Unmarshal(out, &services), checker.IsNil) + return services +} + func (d *SwarmDaemon) updateSwarm(c *check.C, f ...specConstructor) { var sw swarm.Swarm status, out, err := d.SockRequest("GET", "/swarm", nil) diff --git a/integration-cli/docker_api_swarm_test.go b/integration-cli/docker_api_swarm_test.go index 51e2be17b0..3f74d4c9f5 100644 --- a/integration-cli/docker_api_swarm_test.go +++ b/integration-cli/docker_api_swarm_test.go @@ -294,6 +294,15 @@ func (s *DockerSwarmSuite) TestApiSwarmPromoteDemote(c *check.C) { waitAndAssert(c, defaultReconciliationTimeout, d2.checkControlAvailable, checker.True) } +func (s *DockerSwarmSuite) TestApiSwarmServicesEmptyList(c *check.C) { + testRequires(c, Network) + d := s.AddDaemon(c, true, true) + + services := d.listServices(c) + c.Assert(services, checker.NotNil) + c.Assert(len(services), checker.Equals, 0, check.Commentf("services: %#v", services)) +} + func (s *DockerSwarmSuite) TestApiSwarmServicesCreate(c *check.C) { testRequires(c, Network) d := s.AddDaemon(c, true, true)