dbserver_test.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package dbtest_test
  2. import (
  3. "os"
  4. "testing"
  5. "time"
  6. . "gopkg.in/check.v1"
  7. "gopkg.in/mgo.v2"
  8. "gopkg.in/mgo.v2/dbtest"
  9. )
  10. type M map[string]interface{}
  11. func TestAll(t *testing.T) {
  12. TestingT(t)
  13. }
  14. type S struct {
  15. oldCheckSessions string
  16. }
  17. var _ = Suite(&S{})
  18. func (s *S) SetUpTest(c *C) {
  19. s.oldCheckSessions = os.Getenv("CHECK_SESSIONS")
  20. os.Setenv("CHECK_SESSIONS", "")
  21. }
  22. func (s *S) TearDownTest(c *C) {
  23. os.Setenv("CHECK_SESSIONS", s.oldCheckSessions)
  24. }
  25. func (s *S) TestWipeData(c *C) {
  26. var server dbtest.DBServer
  27. server.SetPath(c.MkDir())
  28. defer server.Stop()
  29. session := server.Session()
  30. err := session.DB("mydb").C("mycoll").Insert(M{"a": 1})
  31. session.Close()
  32. c.Assert(err, IsNil)
  33. server.Wipe()
  34. session = server.Session()
  35. names, err := session.DatabaseNames()
  36. session.Close()
  37. c.Assert(err, IsNil)
  38. for _, name := range names {
  39. if name != "local" && name != "admin" {
  40. c.Fatalf("Wipe should have removed this database: %s", name)
  41. }
  42. }
  43. }
  44. func (s *S) TestStop(c *C) {
  45. var server dbtest.DBServer
  46. server.SetPath(c.MkDir())
  47. defer server.Stop()
  48. // Server should not be running.
  49. process := server.ProcessTest()
  50. c.Assert(process, IsNil)
  51. session := server.Session()
  52. addr := session.LiveServers()[0]
  53. session.Close()
  54. // Server should be running now.
  55. process = server.ProcessTest()
  56. p, err := os.FindProcess(process.Pid)
  57. c.Assert(err, IsNil)
  58. p.Release()
  59. server.Stop()
  60. // Server should not be running anymore.
  61. session, err = mgo.DialWithTimeout(addr, 500*time.Millisecond)
  62. if session != nil {
  63. session.Close()
  64. c.Fatalf("Stop did not stop the server")
  65. }
  66. }
  67. func (s *S) TestCheckSessions(c *C) {
  68. var server dbtest.DBServer
  69. server.SetPath(c.MkDir())
  70. defer server.Stop()
  71. session := server.Session()
  72. defer session.Close()
  73. c.Assert(server.Wipe, PanicMatches, "There are mgo sessions still alive.")
  74. }
  75. func (s *S) TestCheckSessionsDisabled(c *C) {
  76. var server dbtest.DBServer
  77. server.SetPath(c.MkDir())
  78. defer server.Stop()
  79. os.Setenv("CHECK_SESSIONS", "0")
  80. // Should not panic, although it looks to Wipe like this session will leak.
  81. session := server.Session()
  82. defer session.Close()
  83. server.Wipe()
  84. }