st_test.exs 4.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. ExUnit.start()
  2. defmodule ST.Test do
  3. use ExUnit.Case, async: false
  4. import Record
  5. require KVS
  6. defrecord(:msg, id: [], body: [])
  7. setup do: (on_exit(fn -> :ok = :kvs.leave();:ok = :kvs_rocks.destroy() end);:kvs.join())
  8. setup kvs, do: [
  9. ids: :lists.map(fn _ -> :kvs.append(msg(id: :kvs.seq([],[])), :feed) end, :lists.seq(1,10)),
  10. id0: :lists.map(fn _ -> :kvs.append(msg(id: :kvs.seq([],[])), "/crm/personal/Реєстратор А1/in/directory/duck") end, :lists.seq(1,10)),
  11. id1: :lists.map(fn _ -> :kvs.append(msg(id: :kvs.seq([],[])), "/crm/personal/Реєстратор А1/in/mail") end, :lists.seq(1,10)),
  12. id2: :lists.map(fn _ -> :kvs.append(msg(id: :kvs.seq([],[])), "/crm/personal/Реєстратор А1/in/doc") end, :lists.seq(1,10))]
  13. test "al0", kvs, do: assert kvs[:ids] |> Enum.map(&msg(id: &1)) == :kvs.all(:feed)
  14. test "al1", kvs, do: assert (kvs[:id0] ++ kvs[:id2] ++ kvs[:id1]) |> Enum.map(&msg(id: &1)) == :kvs.all("/crm/personal/Реєстратор А1/in")
  15. #: old behaviour is reversed ?
  16. test "fe0", kvs, do: assert kvs[:ids] |> Enum.reverse |> Enum.map(&msg(id: &1)) == :kvs.feed(:feed)
  17. #: real cache {:feed, :msg, id}
  18. test "top", kvs, do: (r0=:kvs.reader(:feed); assert KVS.reader(r0, cache: {:msg, Enum.at(kvs[:ids],0), "/feed"}, dir: 0) == :kvs.top(r0))
  19. test "bot", kvs, do: (r0=:kvs.reader(:feed); assert KVS.reader(r0, cache: {:msg, Enum.at(kvs[:ids],9), "/feed"}, dir: 1) == :kvs.bot(r0))
  20. test "next", kvs do
  21. KVS.reader(id: rid) = :kvs.save(:kvs.top(:kvs.reader(:feed)))
  22. kvs[:ids] |> Enum.each(&assert(KVS.reader(cache: {:msg,&1,"/feed"}) = :kvs.next(:kvs.load_reader(rid))))
  23. end
  24. test "prev", kvs do
  25. KVS.reader(id: rid) = :kvs.save(:kvs.bot(:kvs.reader(:feed)))
  26. kvs[:ids] |> Enum.reverse |> Enum.each(&assert KVS.reader(cache: {:msg,&1,"/feed"}) = :kvs.prev(:kvs.load_reader(rid)))
  27. end
  28. test "take-ø", kvs do
  29. r = KVS.reader() = :kvs.reader("/empty-feed")
  30. assert r1 = KVS.reader(feed: "/empty-feed", args: []) = :kvs.take(KVS.reader(r, args: 1))
  31. assert r1 = KVS.reader(feed: "/empty-feed", args: []) = :kvs.take(KVS.reader(r, args: 1, dir: 1))
  32. assert r2 = KVS.reader(feed: "/empty-feed", args: []) = :kvs.next(r)
  33. assert r3 = KVS.reader(feed: "/empty-feed", args: []) = :kvs.prev(r)
  34. assert r1 = KVS.reader(feed: "/empty-feed", args: []) = :kvs.take(KVS.reader(r, args: 100))
  35. assert r1 = KVS.reader(feed: "/empty-feed", args: []) = :kvs.take(KVS.reader(r, args: 100, dir: 1))
  36. KVS.reader(id: rid) = :kvs.save(r1)
  37. assert rs1 = KVS.reader(id: rid) = :kvs.load_reader(rid)
  38. assert KVS.reader(feed: "/empty-feed", args: []) = :kvs.take(KVS.reader(rs1, args: 5))
  39. assert KVS.reader(feed: "/empty-feed", args: []) = :kvs.take(KVS.reader(rs1, args: 5, dir: 1))
  40. assert KVS.reader(feed: "/empty-feed", args: []) = :kvs.next(rs1)
  41. assert KVS.reader(feed: "/empty-feed", args: []) = :kvs.prev(rs1)
  42. assert KVS.reader(feed: "/empty-feed", args: []) = :kvs.take(KVS.reader(rs1, args: 0))
  43. assert KVS.reader(feed: "/empty-feed", args: []) = :kvs.take(KVS.reader(rs1, args: 0, dir: 1))
  44. end
  45. test "drop", kvs do
  46. assert r = KVS.reader(id: rid, args: [], cache: c0) = :kvs.save(:kvs.reader(:feed))
  47. assert r1 = KVS.reader(id: ^rid, feed: :feed, args: []) = :kvs.drop(KVS.reader(r, args: 10, dir: 0))
  48. kvs[:ids] |> Enum.map(&msg(id: &1))
  49. |> Enum.each(&assert(KVS.reader(id: rid, feed: :feed, args: [], cache: &1) = :kvs.save(:kvs.drop(KVS.reader(:kvs.load_reader(rid), args: 1, dir: 0)))))
  50. assert r2 = KVS.reader(id: ^rid, feed: :feed, args: [], cache: c1) = :kvs.drop(KVS.reader(r, args: 1, dir: 0))
  51. assert {:msg, Enum.at(kvs[:ids], 1)} == c1
  52. assert r3 = KVS.reader(id: ^rid, feed: :feed, args: [], cache: c2) = :kvs.drop(KVS.reader(r2, args: 5, dir: 0))
  53. assert {:msg, Enum.at(kvs[:ids], 6)} == c2
  54. assert r4 = KVS.reader(id: ^rid, feed: :feed, args: [], cache: c3) = :kvs.drop(KVS.reader(r1, args: 100))
  55. assert {:msg, Enum.at(kvs[:ids],9)} == c3
  56. end
  57. defp log(x), do: IO.puts '#{inspect(x)}'
  58. defp log(m, x), do: IO.puts '#{m} #{inspect(x)}'
  59. end