/test/monger/test/indexing_test.clj

https://github.com/michaelklishin/monger · Clojure · 46 lines · 42 code · 2 blank · 2 comment · 3 complexity · c4f53ca9aca55ca2d1096291fed7c421 MD5 · raw file

  1. (ns monger.test.indexing-test
  2. (:import org.bson.types.ObjectId
  3. java.util.Date)
  4. (:require [monger.core :as mg]
  5. [monger.collection :as mc]
  6. monger.joda-time
  7. [clojure.test :refer :all]
  8. [clj-time.core :refer [now seconds ago from-now]]))
  9. (let [conn (mg/connect)
  10. db (mg/get-db conn "monger-test")]
  11. (deftest ^{:indexing true} test-creating-and-dropping-indexes
  12. (let [collection "libraries"]
  13. (mc/drop-indexes db collection)
  14. (mc/create-index db collection {"language" 1})
  15. (is (= "language_1"
  16. (:name (second (mc/indexes-on db collection)))))
  17. (mc/drop-index db collection "language_1")
  18. (mc/create-index db collection ["language"])
  19. (mc/drop-index db collection "language_1")
  20. (is (nil? (second (mc/indexes-on db collection))))
  21. (mc/ensure-index db collection (array-map "language" 1) {:unique true})
  22. (is (= "language_1"
  23. (:name (second (mc/indexes-on db collection)))))
  24. (mc/ensure-index db collection (array-map "language" 1))
  25. (mc/ensure-index db collection (array-map "language" 1) {:unique true})
  26. (mc/drop-indexes db collection)))
  27. (deftest ^{:indexing true :time-consuming true} test-ttl-collections
  28. (let [coll "recent_events"
  29. ttl 30
  30. sleep 120]
  31. (mc/remove db coll)
  32. (mc/ensure-index db coll (array-map :created-at 1) {:expireAfterSeconds ttl})
  33. (dotimes [i 100]
  34. (mc/insert db coll {:type "signup" :created-at (-> i seconds ago) :i i}))
  35. (dotimes [i 100]
  36. (mc/insert db coll {:type "signup" :created-at (-> i seconds from-now) :i i}))
  37. (is (= 200 (mc/count db coll {:type "signup"})))
  38. ;; sleep for 65 seconds. MongoDB 2.1.2 seems to run TTLMonitor once per minute, according to
  39. ;; the log. MK.
  40. (println (format "Now sleeping for %d seconds to test TTL collections!" sleep))
  41. (Thread/sleep (* sleep 1000))
  42. (println (format "Documents in the TTL collection: %d" (mc/count db coll {:type "signup"})))
  43. (is (< (mc/count db coll {:type "signup"}) 100))
  44. (mc/remove db coll))))