/test/work/core_test.clj

https://github.com/ngrunwald/work · Clojure · 82 lines · 73 code · 9 blank · 0 comment · 2 complexity · 27015f2cbac46dfc502602716cba02d8 MD5 · raw file

  1. (ns work.core-test
  2. (:use clojure.test
  3. [plumbing.core :only [retry wait-until]]
  4. [plumbing.serialize :only [send-clj clj-worker
  5. send-json json-worker]])
  6. (:require [work.core :as work]
  7. [store.core :as bucket])
  8. (:require [work.queue :as q])
  9. (:import [java.util.concurrent Executors]))
  10. (defn wait-for-complete-results
  11. "Test helper fn waits until the pool finishes processing before returning results."
  12. [response-q expected-seq-size]
  13. (wait-until #(= (.size response-q) expected-seq-size) 20)
  14. (sort (iterator-seq (.iterator response-q))))
  15. (deftest do-work-test
  16. (let [input-data (range 1 101 1)
  17. response-q (q/local-queue)]
  18. (work/do-work #(q/offer response-q (* 10 %))
  19. 10
  20. input-data)
  21. (is (= (range 10 1010 10)
  22. (wait-for-complete-results response-q (count input-data))))))
  23. (deftest map-work-test
  24. (is (= (range 10 1010 10)
  25. (sort (work/map-work
  26. #(* 10 %)
  27. 10
  28. (range 1 101 1))))))
  29. (deftest map-reduce-test
  30. (is (=
  31. {:a 13 :b 4 :c 4 :d 3}
  32. (into {}
  33. (bucket/seq
  34. (work/map-reduce
  35. frequencies
  36. (fnil + 0 0)
  37. 5
  38. [[:a :a :b :b]
  39. [:c :c :a :a :a]
  40. [:d :d :d :a :a]
  41. [:c :c :a :a :a]
  42. [:b :b :a :a :a]]))))))
  43. (deftest mapchunk-reduce-test
  44. (is (=
  45. {:a 13 :b 4 :c 4 :d 3}
  46. (into {}
  47. (bucket/seq
  48. (work/mapchunk-reduce
  49. frequencies
  50. (fnil + 0 0)
  51. 5
  52. 2
  53. [[:a :a :b :b]
  54. [:c :c :a :a :a]
  55. [:d :d :d :a :a]
  56. [:c :c :a :a :a]
  57. [:b :b :a :a :a]]))))))
  58. (deftest trivial-map-work-test
  59. (is (.get (future (doall (work/map-work (fn [x] (do (Thread/sleep x)
  60. 1)) 200 (range 100))))
  61. (long 300) java.util.concurrent.TimeUnit/SECONDS)))
  62. (deftest worker-exception-test
  63. (let [p (Executors/newFixedThreadPool 2)
  64. c (atom 0)]
  65. (work/submit-to p
  66. (constantly
  67. {:in (constantly 42)
  68. :f (fn [_]
  69. (swap! c inc)
  70. (/ 1 0))}))
  71. (Thread/sleep 100)
  72. (.shutdownNow p)
  73. (is (> @c 1))))