PageRenderTime 38ms CodeModel.GetById 9ms RepoModel.GetById 0ms app.codeStats 0ms

/test/clojurewerkz/welle/test/indices_test.clj

http://github.com/michaelklishin/welle
Clojure | 91 lines | 81 code | 10 blank | 0 comment | 5 complexity | 0b1851dd0cc3bdfe99c4c14cf2062b5a MD5 | raw file
  1. (ns clojurewerkz.welle.test.indices-test
  2. (:use clojure.test
  3. [clojurewerkz.welle.testkit :only [drain]]
  4. [clojure.set :only [subset?]])
  5. (:require [clojurewerkz.welle.core :as wc]
  6. [clojurewerkz.welle.buckets :as wb]
  7. [clojurewerkz.welle.kv :as kv])
  8. (:import java.util.UUID
  9. com.basho.riak.client.http.util.Constants))
  10. (wc/connect!)
  11. (deftest ^{:2i true} test-indexes-on-converted-riak-objects
  12. (let [bucket-name "clojurewerkz.welle.test.indices-test"
  13. bucket (wb/update bucket-name)
  14. k (str (UUID/randomUUID))
  15. v "value"
  16. indexes {:email #{"john@example.com"}
  17. :username #{"johndoe"}}
  18. stored (kv/store bucket-name k v :indexes indexes)
  19. [fetched] (kv/fetch bucket-name k)]
  20. (is (:indexes fetched))
  21. (is (= indexes (:indexes fetched)))
  22. (kv/delete bucket-name k)))
  23. (deftest ^{:2i true} test-basic-index-query-with-a-single-string-value
  24. (let [bucket-name "clojurewerkz.welle.test.indices-test"
  25. bucket (wb/update bucket-name)
  26. k (str (UUID/randomUUID))
  27. v (.getBytes "value")
  28. indexes {:email #{"johndoe@example.com" "timsmith@example.com"}}
  29. stored (kv/store bucket-name k v :indexes indexes :content-type Constants/CTYPE_OCTET_STREAM)
  30. [idx-key] (kv/index-query bucket-name :email "johndoe@example.com")
  31. [fetched] (kv/fetch bucket-name idx-key)]
  32. (is (:indexes fetched))
  33. (is (= (String. ^bytes (:value fetched))
  34. (String. ^bytes v)))
  35. (is (= (:indexes fetched) indexes))
  36. (kv/delete bucket-name k)))
  37. (deftest ^{:2i true} test-basic-index-query-with-a-range-of-string-values
  38. (let [bucket-name "clojurewerkz.welle.test.indices-test"
  39. bucket (wb/update bucket-name)
  40. k1 (str (UUID/randomUUID))
  41. k2 (str (UUID/randomUUID))
  42. k3 (str (UUID/randomUUID))
  43. k4 (str (UUID/randomUUID))
  44. v (.getBytes "value1")
  45. _ (kv/store bucket-name k1 v :indexes {:username #{"abc"}} :content-type Constants/CTYPE_OCTET_STREAM)
  46. _ (kv/store bucket-name k2 v :indexes {:username #{"bcd"}} :content-type Constants/CTYPE_OCTET_STREAM)
  47. _ (kv/store bucket-name k3 v :indexes {:username #{"cde"}} :content-type Constants/CTYPE_OCTET_STREAM)
  48. _ (kv/store bucket-name k4 v :indexes {:username #{"def"}} :content-type Constants/CTYPE_OCTET_STREAM)
  49. keys (set (kv/index-query bucket-name :username ["b" "d"]))]
  50. (is (subset? #{k2 k3} keys))
  51. (kv/delete-all bucket-name [k1 k2 k3 k4])
  52. (kv/delete-all bucket-name keys)))
  53. (deftest ^{:2i true} test-basic-index-query-with-a-single-integer-value
  54. (let [bucket-name "clojurewerkz.welle.test.alt-indices-test"
  55. bucket (wb/update bucket-name)
  56. k (str (UUID/randomUUID))
  57. v "value"
  58. indexes {:age 27}
  59. stored (kv/store bucket-name k v :indexes indexes :content-type Constants/CTYPE_TEXT_UTF8)
  60. [idx-key] (kv/index-query bucket-name :age 27)
  61. [fetched] (kv/fetch bucket-name idx-key)]
  62. (is (:indexes fetched))
  63. (is (= (:value fetched) v))
  64. (is (= (:indexes fetched) {:age #{27}}))
  65. (kv/delete bucket-name k)))
  66. (deftest ^{:2i true} test-basic-index-query-with-a-range-of-integer-values
  67. (let [bucket-name "clojurewerkz.welle.test.indices-test"
  68. bucket (wb/update bucket-name)
  69. k1 (str (UUID/randomUUID))
  70. k2 (str (UUID/randomUUID))
  71. k3 (str (UUID/randomUUID))
  72. k4 (str (UUID/randomUUID))
  73. v (.getBytes "value1")
  74. _ (kv/store bucket-name k1 v :indexes {:hops #{1 2 3 4}} :content-type Constants/CTYPE_OCTET_STREAM)
  75. _ (kv/store bucket-name k2 v :indexes {:hops #{5 6 7 8}} :content-type Constants/CTYPE_OCTET_STREAM)
  76. _ (kv/store bucket-name k3 v :indexes {:hops #{9 10 11 12}} :content-type Constants/CTYPE_OCTET_STREAM)
  77. _ (kv/store bucket-name k4 v :indexes {:hops #{13 14 18 77}} :content-type Constants/CTYPE_OCTET_STREAM)
  78. keys (set (kv/index-query bucket-name :hops [2 11]))]
  79. (is (subset? #{k1 k2 k3} keys))
  80. (kv/delete-all bucket-name [k1 k2 k3 k4])
  81. (kv/delete-all bucket-name keys)))