Current section

Files

Jump to
kvs test sn_test.exs
Raw

test/sn_test.exs

ExUnit.start()
defmodule Sn.Test do
use ExUnit.Case, async: false
import Record
require KVS
defrecord(:msg, id: [], body: [])
setup do: (on_exit(fn -> :ok = :kvs.leave();:ok = :kvs_rocks.destroy() end);:kvs.join())
setup kvs, do: [
id0: :lists.map(fn _ -> :kvs.append(msg(id: :kvs.seq([],[])), "/crm/duck") end, :lists.seq(1,10)),
id1: :lists.map(fn _ -> :kvs.append(msg(id: :kvs.seq([],[])), "/crm/luck") end, :lists.seq(1,10)),
id2: :lists.map(fn _ -> :kvs.append(msg(id: :kvs.seq([],[])), "/crm/truck") end, :lists.seq(1,10))]
#% @tag :ignore
#% test "1", kvs do
#% :lists.map(fn _ -> :kvs.append(msg(id: :kvs.seq([],[])), "/aco/thug") end, :lists.seq(1,7))
#% log "all", :kvs.all("/aco/thug")
#% r = KVS.reader(id: rid) = :kvs.save(:kvs.reader("/aco/thug"))
#% log "real readers are good", r
#% r1 = :kvs.take(KVS.reader(r, args: 5, dir: 0))
#% log "take 5", r1
#% r3 = :kvs.take(KVS.reader(r1, args: 5, dir: 0))
#% log "take 2", r3
#% r5 = KVS.reader(args: args) = :kvs.take(KVS.reader(r3, args: 5, dir: 1))
#% log "back 5", r5
#% log "is pretty good", args
#% r6 = :kvs.take(KVS.reader(r5, args: 5, dir: 1))
#% log "back 2", r6
#% end
#% @tag :ignore
#% test "2" do
#% {t1,_} = :timer.tc( fn ->
#% :lists.map(fn _ -> :kvs.append(msg(id: :kvs.seq([],[])),
#% "АТУ/ЧЕРНІГІВСЬКА ОБЛАСТЬ/МІСТА СНОВСЬКОГО РАЙОНУ/СНОВСЬК/РАЙОНИ ШОТО ТАМ") end, :lists.seq(1,10000))
#% end)
#% {t,_} = :timer.tc(fn ->
#% :kvs.all("АТУ/ЧЕРНІГІВСЬКА ОБЛАСТЬ/МІСТА СНОВСЬКОГО РАЙОНУ/СНОВСЬК/РАЙОНИ ШОТО ТАМ")
#% end)
#% log "put:", :erlang.float_to_binary(t1 / 1_000_000, [:compact, {:decimals, 10}])
#% log "all:", :erlang.float_to_binary(t / 1_000_000, [:compact, {:decimals, 10}])
#% end
test "removed writer" do
prev = :kvs.all("/crm/duck")
KVS.writer(cache: ch) = w = :kvs.writer("/crm/duck")
w1 = KVS.writer(w, cache: {:msg, "unknown", "/corrupted"})
:ok = :kvs_rocks.put(w1)
w2 = :kvs.writer("/crm/duck")
assert {:ok, ^w2} = :kvs.get(:writer, "/crm/duck")
assert w1 == w2
assert prev = :kvs.all("/crm/duck")
{:ok,_} = :kvs.get(:writer, "/crm/duck")
:ok = :kvs.delete(:writer, "/crm/duck")
{:error, :not_found} = :kvs.get(:writer, "/crm/duck")
assert prev = :kvs.all("/crm/duck")
end
#% feed(Feed) -> feed(fun(#reader{}=R) -> take(R#reader{args=4}) end, top(reader(Feed)),[]).
#% feed(F,#reader{cache=C1}=R,Acc) ->
#% #reader{args=A, cache=Ch, feed=Feed} = R1 = F(R),
#% case Ch of
#% C1 -> Acc ++ A;
#% {_,_,K} when binary_part(K,{0,byte_size(Feed)}) == Feed
#% andalso length(A) == 4
#% -> feed(F, R1, Acc ++ A);
#% _ -> Acc ++ A
#% end.
defp log(x), do: IO.puts '#{inspect(x)}'
defp log(m, x), do: IO.puts '#{m} #{inspect(x)}'
end