docker_cli_daemon_test.go 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package main
  2. import (
  3. "encoding/json"
  4. "os"
  5. "strings"
  6. "testing"
  7. )
  8. func TestDaemonRestartWithRunningContainersPorts(t *testing.T) {
  9. d := NewDaemon(t)
  10. if err := d.StartWithBusybox(); err != nil {
  11. t.Fatalf("Could not start daemon with busybox: %v", err)
  12. }
  13. defer d.Stop()
  14. if out, err := d.Cmd("run", "-d", "--name", "top1", "-p", "1234:80", "--restart", "always", "busybox:latest", "top"); err != nil {
  15. t.Fatalf("Could not run top1: err=%v\n%s", err, out)
  16. }
  17. // --restart=no by default
  18. if out, err := d.Cmd("run", "-d", "--name", "top2", "-p", "80", "busybox:latest", "top"); err != nil {
  19. t.Fatalf("Could not run top2: err=%v\n%s", err, out)
  20. }
  21. testRun := func(m map[string]bool, prefix string) {
  22. var format string
  23. for c, shouldRun := range m {
  24. out, err := d.Cmd("ps")
  25. if err != nil {
  26. t.Fatalf("Could not run ps: err=%v\n%q", err, out)
  27. }
  28. if shouldRun {
  29. format = "%scontainer %q is not running"
  30. } else {
  31. format = "%scontainer %q is running"
  32. }
  33. if shouldRun != strings.Contains(out, c) {
  34. t.Fatalf(format, prefix, c)
  35. }
  36. }
  37. }
  38. testRun(map[string]bool{"top1": true, "top2": true}, "")
  39. if err := d.Restart(); err != nil {
  40. t.Fatalf("Could not restart daemon: %v", err)
  41. }
  42. testRun(map[string]bool{"top1": true, "top2": false}, "After daemon restart: ")
  43. logDone("daemon - running containers on daemon restart")
  44. }
  45. func TestDaemonRestartWithVolumesRefs(t *testing.T) {
  46. d := NewDaemon(t)
  47. if err := d.StartWithBusybox(); err != nil {
  48. t.Fatal(err)
  49. }
  50. defer d.Stop()
  51. if out, err := d.Cmd("run", "-d", "--name", "volrestarttest1", "-v", "/foo", "busybox"); err != nil {
  52. t.Fatal(err, out)
  53. }
  54. if err := d.Restart(); err != nil {
  55. t.Fatal(err)
  56. }
  57. if _, err := d.Cmd("run", "-d", "--volumes-from", "volrestarttest1", "--name", "volrestarttest2", "busybox"); err != nil {
  58. t.Fatal(err)
  59. }
  60. if out, err := d.Cmd("rm", "-fv", "volrestarttest2"); err != nil {
  61. t.Fatal(err, out)
  62. }
  63. v, err := d.Cmd("inspect", "--format", "{{ json .Volumes }}", "volrestarttest1")
  64. if err != nil {
  65. t.Fatal(err)
  66. }
  67. volumes := make(map[string]string)
  68. json.Unmarshal([]byte(v), &volumes)
  69. if _, err := os.Stat(volumes["/foo"]); err != nil {
  70. t.Fatalf("Expected volume to exist: %s - %s", volumes["/foo"], err)
  71. }
  72. logDone("daemon - volume refs are restored")
  73. }
  74. func TestDaemonStartIptablesFalse(t *testing.T) {
  75. d := NewDaemon(t)
  76. if err := d.Start("--iptables=false"); err != nil {
  77. t.Fatalf("we should have been able to start the daemon with passing iptables=false: %v", err)
  78. }
  79. d.Stop()
  80. logDone("daemon - started daemon with iptables=false")
  81. }