docker_cli_service_test.go 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // +build experimental
  2. package main
  3. import (
  4. "fmt"
  5. "os/exec"
  6. "strings"
  7. "github.com/go-check/check"
  8. )
  9. func assertSrvIsAvailable(c *check.C, sname, name string) {
  10. if !isSrvPresent(c, sname, name) {
  11. c.Fatalf("Service %s on network %s not found in service ls o/p", sname, name)
  12. }
  13. }
  14. func assertSrvNotAvailable(c *check.C, sname, name string) {
  15. if isSrvPresent(c, sname, name) {
  16. c.Fatalf("Found service %s on network %s in service ls o/p", sname, name)
  17. }
  18. }
  19. func isSrvPresent(c *check.C, sname, name string) bool {
  20. runCmd := exec.Command(dockerBinary, "service", "ls")
  21. out, _, _, err := runCommandWithStdoutStderr(runCmd)
  22. c.Assert(err, check.IsNil)
  23. lines := strings.Split(out, "\n")
  24. for i := 1; i < len(lines)-1; i++ {
  25. if strings.Contains(lines[i], sname) && strings.Contains(lines[i], name) {
  26. return true
  27. }
  28. }
  29. return false
  30. }
  31. func isCntPresent(c *check.C, cname, sname, name string) bool {
  32. runCmd := exec.Command(dockerBinary, "service", "ls", "--no-trunc")
  33. out, _, _, err := runCommandWithStdoutStderr(runCmd)
  34. c.Assert(err, check.IsNil)
  35. lines := strings.Split(out, "\n")
  36. for i := 1; i < len(lines)-1; i++ {
  37. fmt.Println(lines)
  38. if strings.Contains(lines[i], name) && strings.Contains(lines[i], sname) && strings.Contains(lines[i], cname) {
  39. return true
  40. }
  41. }
  42. return false
  43. }
  44. func (s *DockerSuite) TestDockerServiceCreateDelete(c *check.C) {
  45. runCmd := exec.Command(dockerBinary, "network", "create", "test")
  46. _, _, _, err := runCommandWithStdoutStderr(runCmd)
  47. c.Assert(err, check.IsNil)
  48. assertNwIsAvailable(c, "test")
  49. runCmd = exec.Command(dockerBinary, "service", "publish", "s1.test")
  50. _, _, _, err = runCommandWithStdoutStderr(runCmd)
  51. c.Assert(err, check.IsNil)
  52. assertSrvIsAvailable(c, "s1", "test")
  53. runCmd = exec.Command(dockerBinary, "service", "unpublish", "s1.test")
  54. _, _, _, err = runCommandWithStdoutStderr(runCmd)
  55. c.Assert(err, check.IsNil)
  56. assertSrvNotAvailable(c, "s1", "test")
  57. runCmd = exec.Command(dockerBinary, "network", "rm", "test")
  58. _, _, _, err = runCommandWithStdoutStderr(runCmd)
  59. c.Assert(err, check.IsNil)
  60. assertNwNotAvailable(c, "test")
  61. }
  62. func (s *DockerSuite) TestDockerPublishServiceFlag(c *check.C) {
  63. // Run saying the container is the backend for the specified service on the specified network
  64. runCmd := exec.Command(dockerBinary, "run", "-d", "--expose=23", "--publish-service", "telnet.production", "busybox", "top")
  65. out, _, err := runCommandWithOutput(runCmd)
  66. c.Assert(err, check.IsNil)
  67. cid := strings.TrimSpace(out)
  68. // Verify container is attached in service ps o/p
  69. assertSrvIsAvailable(c, "telnet", "production")
  70. runCmd = exec.Command(dockerBinary, "rm", "-f", cid)
  71. out, _, err = runCommandWithOutput(runCmd)
  72. c.Assert(err, check.IsNil)
  73. }