server_unit_test.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package docker
  2. import (
  3. "github.com/dotcloud/docker/utils"
  4. "testing"
  5. "time"
  6. )
  7. func TestPools(t *testing.T) {
  8. srv := &Server{
  9. pullingPool: make(map[string]struct{}),
  10. pushingPool: make(map[string]struct{}),
  11. }
  12. err := srv.poolAdd("pull", "test1")
  13. if err != nil {
  14. t.Fatal(err)
  15. }
  16. err = srv.poolAdd("pull", "test2")
  17. if err != nil {
  18. t.Fatal(err)
  19. }
  20. err = srv.poolAdd("push", "test1")
  21. if err == nil || err.Error() != "pull test1 is already in progress" {
  22. t.Fatalf("Expected `pull test1 is already in progress`")
  23. }
  24. err = srv.poolAdd("pull", "test1")
  25. if err == nil || err.Error() != "pull test1 is already in progress" {
  26. t.Fatalf("Expected `pull test1 is already in progress`")
  27. }
  28. err = srv.poolAdd("wait", "test3")
  29. if err == nil || err.Error() != "Unknown pool type" {
  30. t.Fatalf("Expected `Unknown pool type`")
  31. }
  32. err = srv.poolRemove("pull", "test2")
  33. if err != nil {
  34. t.Fatal(err)
  35. }
  36. err = srv.poolRemove("pull", "test2")
  37. if err != nil {
  38. t.Fatal(err)
  39. }
  40. err = srv.poolRemove("pull", "test1")
  41. if err != nil {
  42. t.Fatal(err)
  43. }
  44. err = srv.poolRemove("push", "test1")
  45. if err != nil {
  46. t.Fatal(err)
  47. }
  48. err = srv.poolRemove("wait", "test3")
  49. if err == nil || err.Error() != "Unknown pool type" {
  50. t.Fatalf("Expected `Unknown pool type`")
  51. }
  52. }
  53. func TestLogEvent(t *testing.T) {
  54. srv := &Server{
  55. events: make([]utils.JSONMessage, 0, 64),
  56. listeners: make(map[string]chan utils.JSONMessage),
  57. }
  58. srv.LogEvent("fakeaction", "fakeid", "fakeimage")
  59. listener := make(chan utils.JSONMessage)
  60. srv.Lock()
  61. srv.listeners["test"] = listener
  62. srv.Unlock()
  63. srv.LogEvent("fakeaction2", "fakeid", "fakeimage")
  64. numEvents := len(srv.GetEvents())
  65. if numEvents != 2 {
  66. t.Fatalf("Expected 2 events, found %d", numEvents)
  67. }
  68. go func() {
  69. time.Sleep(200 * time.Millisecond)
  70. srv.LogEvent("fakeaction3", "fakeid", "fakeimage")
  71. time.Sleep(200 * time.Millisecond)
  72. srv.LogEvent("fakeaction4", "fakeid", "fakeimage")
  73. }()
  74. setTimeout(t, "Listening for events timed out", 2*time.Second, func() {
  75. for i := 2; i < 4; i++ {
  76. event := <-listener
  77. if event != srv.GetEvents()[i] {
  78. t.Fatalf("Event received it different than expected")
  79. }
  80. }
  81. })
  82. }
  83. // FIXME: this is duplicated from integration/commands_test.go
  84. func setTimeout(t *testing.T, msg string, d time.Duration, f func()) {
  85. c := make(chan bool)
  86. // Make sure we are not too long
  87. go func() {
  88. time.Sleep(d)
  89. c <- true
  90. }()
  91. go func() {
  92. f()
  93. c <- false
  94. }()
  95. if <-c && msg != "" {
  96. t.Fatal(msg)
  97. }
  98. }