defmodule FloofTest do use ExUnit.Case doctest Floof test "SessionManager basic" do cur = self() spawn_link(fn -> Floof.SessionManager.push(:a, 0) Floof.SessionManager.push(:a, 2) Floof.SessionManager.push(:a, 3) assert Floof.SessionManager.pop(:a) == {:value, 0} assert Floof.SessionManager.pop(:a) == {:value, 2} assert Floof.SessionManager.pop(:a) == {:value, 3} assert Floof.SessionManager.pop(:a) == :empty send cur, :done end) spawn_link(fn -> Floof.SessionManager.push(:b, 50) Floof.SessionManager.push(:b, 12) Floof.SessionManager.push(:b, 1) assert Floof.SessionManager.pop(:b) == {:value, 50} assert Floof.SessionManager.pop(:b) == {:value, 12} assert Floof.SessionManager.pop(:b) == {:value, 1} assert Floof.SessionManager.pop(:b) == :empty send cur, :done end) for _ <- [1,2] do receive do :done -> nil end end end test "Simple usage" do # kp = :enacl.sign_keypair() # :ok = File.write("mock_keydb/test01.secret", kp.secret) # {:ok, pkname} = :FloofProtocol.encode(:RDNSequence, [{:RelativeDistinguishedName, {0, 9, 2342, 19200300, 100, 1, 25}, "test"}]) # :ok = File.write("mock_keydb/" <> Base.url_encode64(pkname), kp.public) {:ok, secret_key} = File.read("mock_keydb/test01.secret") source = [{:RelativeDistinguishedName, {0, 9, 2342, 19200300, 100, 1, 25}, "test"}] msg_id = <<0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0>> msg_topic = [{:RelativeDistinguishedName, {2, 5, 4, 41}, "test topic"}] msg_inner = Floof.Message.pack_inner(msg_id, msg_topic, [], :info, <<0, 0>>) ttl = :erlang.convert_time_unit(:erlang.system_time(), :native, :second) + 60 msg_outer = Floof.Message.build_outer(source, ttl, [], secret_key, msg_inner) {:ok, msg_encd} = :FloofProtocol.encode(:ProtoMessage, {:xfer, msg_outer}) Floof.Distributor.register(self()) {:ok, socket} = :gen_tcp.connect({127,0,0,1}, 2540, [packet: 4, active: false]) :gen_tcp.send(socket, msg_encd) :gen_tcp.close(socket) receive do {:fwdxfer, {id, _}} -> assert id == msg_id end end end