docker_test.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. package docker
  2. import (
  3. "io/ioutil"
  4. "os"
  5. "testing"
  6. )
  7. func newTestDocker() (*Docker, error) {
  8. root, err := ioutil.TempDir("", "docker-test")
  9. if err != nil {
  10. return nil, err
  11. }
  12. docker, err := NewFromDirectory(root)
  13. if err != nil {
  14. return nil, err
  15. }
  16. return docker, nil
  17. }
  18. func TestCreate(t *testing.T) {
  19. docker, err := newTestDocker()
  20. if err != nil {
  21. t.Fatal(err)
  22. }
  23. // Make sure we start we 0 containers
  24. if len(docker.List()) != 0 {
  25. t.Errorf("Expected 0 containers, %v found", len(docker.List()))
  26. }
  27. container, err := docker.Create(
  28. "test_create",
  29. "ls",
  30. []string{"-al"},
  31. []string{"/var/lib/docker/images/ubuntu"},
  32. &Config{},
  33. )
  34. if err != nil {
  35. t.Fatal(err)
  36. }
  37. defer func() {
  38. if err := docker.Destroy(container); err != nil {
  39. t.Error(err)
  40. }
  41. }()
  42. // Make sure we can find the newly created container with List()
  43. if len(docker.List()) != 1 {
  44. t.Errorf("Expected 1 container, %v found", len(docker.List()))
  45. }
  46. // Make sure the container List() returns is the right one
  47. if docker.List()[0].Name != "test_create" {
  48. t.Errorf("Unexpected container %v returned by List", docker.List()[0])
  49. }
  50. // Make sure we can get the container with Get()
  51. if docker.Get("test_create") == nil {
  52. t.Errorf("Unable to get newly created container")
  53. }
  54. // Make sure it is the right container
  55. if docker.Get("test_create") != container {
  56. t.Errorf("Get() returned the wrong container")
  57. }
  58. // Make sure Exists returns it as existing
  59. if !docker.Exists("test_create") {
  60. t.Errorf("Exists() returned false for a newly created container")
  61. }
  62. }
  63. func TestDestroy(t *testing.T) {
  64. docker, err := newTestDocker()
  65. if err != nil {
  66. t.Fatal(err)
  67. }
  68. container, err := docker.Create(
  69. "test_destroy",
  70. "ls",
  71. []string{"-al"},
  72. []string{"/var/lib/docker/images/ubuntu"},
  73. &Config{},
  74. )
  75. if err != nil {
  76. t.Fatal(err)
  77. }
  78. // Destroy
  79. if err := docker.Destroy(container); err != nil {
  80. t.Error(err)
  81. }
  82. // Make sure docker.Exists() behaves correctly
  83. if docker.Exists("test_destroy") {
  84. t.Errorf("Exists() returned true")
  85. }
  86. // Make sure docker.List() doesn't list the destroyed container
  87. if len(docker.List()) != 0 {
  88. t.Errorf("Expected 0 container, %v found", len(docker.List()))
  89. }
  90. // Make sure docker.Get() refuses to return the unexisting container
  91. if docker.Get("test_destroy") != nil {
  92. t.Errorf("Unable to get newly created container")
  93. }
  94. // Make sure the container root directory does not exist anymore
  95. _, err = os.Stat(container.Root)
  96. if err == nil || !os.IsNotExist(err) {
  97. t.Errorf("Container root directory still exists after destroy")
  98. }
  99. // Test double destroy
  100. if err := docker.Destroy(container); err == nil {
  101. // It should have failed
  102. t.Errorf("Double destroy did not fail")
  103. }
  104. }
  105. func TestGet(t *testing.T) {
  106. docker, err := newTestDocker()
  107. if err != nil {
  108. t.Fatal(err)
  109. }
  110. container1, err := docker.Create(
  111. "test1",
  112. "ls",
  113. []string{"-al"},
  114. []string{"/var/lib/docker/images/ubuntu"},
  115. &Config{},
  116. )
  117. if err != nil {
  118. t.Fatal(err)
  119. }
  120. defer docker.Destroy(container1)
  121. container2, err := docker.Create(
  122. "test2",
  123. "ls",
  124. []string{"-al"},
  125. []string{"/var/lib/docker/images/ubuntu"},
  126. &Config{},
  127. )
  128. if err != nil {
  129. t.Fatal(err)
  130. }
  131. defer docker.Destroy(container2)
  132. container3, err := docker.Create(
  133. "test3",
  134. "ls",
  135. []string{"-al"},
  136. []string{"/var/lib/docker/images/ubuntu"},
  137. &Config{},
  138. )
  139. if err != nil {
  140. t.Fatal(err)
  141. }
  142. defer docker.Destroy(container3)
  143. if docker.Get("test1") != container1 {
  144. t.Errorf("Get(test1) returned %v while expecting %v", docker.Get("test1"), container1)
  145. }
  146. if docker.Get("test2") != container2 {
  147. t.Errorf("Get(test2) returned %v while expecting %v", docker.Get("test2"), container2)
  148. }
  149. if docker.Get("test3") != container3 {
  150. t.Errorf("Get(test3) returned %v while expecting %v", docker.Get("test3"), container3)
  151. }
  152. }