| // +build experimental |
| |
| package main |
| |
| import ( |
| "fmt" |
| "strings" |
| |
| "github.com/go-check/check" |
| ) |
| |
| func assertSrvIsAvailable(c *check.C, sname, name string) { |
| if !isSrvPresent(c, sname, name) { |
| c.Fatalf("Service %s on network %s not found in service ls o/p", sname, name) |
| } |
| } |
| |
| func assertSrvNotAvailable(c *check.C, sname, name string) { |
| if isSrvPresent(c, sname, name) { |
| c.Fatalf("Found service %s on network %s in service ls o/p", sname, name) |
| } |
| } |
| |
| func isSrvPresent(c *check.C, sname, name string) bool { |
| out, _, _ := dockerCmdWithStdoutStderr(c, "service", "ls") |
| lines := strings.Split(out, "\n") |
| for i := 1; i < len(lines)-1; i++ { |
| if strings.Contains(lines[i], sname) && strings.Contains(lines[i], name) { |
| return true |
| } |
| } |
| return false |
| } |
| |
| func isCntPresent(c *check.C, cname, sname, name string) bool { |
| out, _, _ := dockerCmdWithStdoutStderr(c, "service", "ls", "--no-trunc") |
| lines := strings.Split(out, "\n") |
| for i := 1; i < len(lines)-1; i++ { |
| fmt.Println(lines) |
| if strings.Contains(lines[i], name) && strings.Contains(lines[i], sname) && strings.Contains(lines[i], cname) { |
| return true |
| } |
| } |
| return false |
| } |
| |
| func (s *DockerSuite) TestDockerServiceCreateDelete(c *check.C) { |
| dockerCmdWithStdoutStderr(c, "network", "create", "test") |
| assertNwIsAvailable(c, "test") |
| |
| dockerCmdWithStdoutStderr(c, "service", "publish", "s1.test") |
| assertSrvIsAvailable(c, "s1", "test") |
| |
| dockerCmdWithStdoutStderr(c, "service", "unpublish", "s1.test") |
| assertSrvNotAvailable(c, "s1", "test") |
| |
| dockerCmdWithStdoutStderr(c, "network", "rm", "test") |
| assertNwNotAvailable(c, "test") |
| } |
| |
| func (s *DockerSuite) TestDockerPublishServiceFlag(c *check.C) { |
| // Run saying the container is the backend for the specified service on the specified network |
| out, _ := dockerCmd(c, "run", "-d", "--expose=23", "--publish-service", "telnet.production", "busybox", "top") |
| cid := strings.TrimSpace(out) |
| |
| // Verify container is attached in service ps o/p |
| assertSrvIsAvailable(c, "telnet", "production") |
| dockerCmd(c, "rm", "-f", cid) |
| } |