Advertisement
Guest User

Untitled

a guest
Mar 8th, 2020
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.96 KB | None | 0 0
  1. defmodule TelnetChat.BroadcasterTest do
  2. use ExUnit.Case, async: false
  3. use GenDebug
  4.  
  5. alias TelnetChat.Broadcaster
  6.  
  7. @moduletag :capture_log
  8.  
  9. doctest Broadcaster
  10.  
  11. @host 'localhost'
  12. @port 4040
  13. @client_opts [:binary, active: false]
  14.  
  15. setup do
  16. {:ok, server} = :gen_tcp.listen(@port, [:binary, packet: :line, active: false, reuseaddr: true])
  17.  
  18. {:ok, pid} = Broadcaster.start_link([])
  19.  
  20. on_exit fn ->
  21. Process.exit(pid, :die)
  22. end
  23.  
  24. {:ok, pid: pid}
  25. end
  26.  
  27. test "module exists" do
  28. assert is_list(Broadcaster.module_info())
  29. end
  30.  
  31. test "should register", %{pid: pid} do
  32. Broadcaster.register(:client)
  33.  
  34. assert state(pid) == [:client]
  35. end
  36.  
  37. test "should deregister", %{pid: pid} do
  38. Broadcaster.register(:client3)
  39. Broadcaster.register(:client2)
  40. Broadcaster.register(:client1)
  41.  
  42. Broadcaster.deregister(:client2)
  43.  
  44. assert state(pid) == [:client1, :client3]
  45. end
  46.  
  47. test "should broadcast", %{pid: pid} do
  48. expected_message = "test line"
  49.  
  50. {:ok, client1} = :gen_tcp.connect(@host, @port, @client_opts)
  51. {:ok, client2} = :gen_tcp.connect(@host, @port, @client_opts)
  52. {:ok, client3} = :gen_tcp.connect(@host, @port, @client_opts)
  53.  
  54. Broadcaster.register(client3)
  55. Broadcaster.register(client2)
  56. Broadcaster.register(client1)
  57.  
  58. wait_until_register_all_clients([client1, client2, client3])
  59.  
  60. spawn_link fn -> assert_receive_payload(expected_message, client2) end
  61.  
  62. Broadcaster.broadcast(expected_message, client1)
  63.  
  64. Process.sleep(2000)
  65. end
  66.  
  67. defp assert_receive_payload(expected, client) do
  68. {:ok, actual} = :gen_tcp.recv(client, 0, 1000)
  69.  
  70. assert actual == expected
  71. end
  72.  
  73. defp wait_until_register_all_clients(clients) do
  74. Process.sleep(100)
  75.  
  76.  
  77. cond do
  78. Enum.sort(clients) == Enum.sort(state(Process.whereis(Broadcaster))) -> :ok
  79. true -> wait_until_register_all_clients(clients)
  80. end
  81. end
  82.  
  83.  
  84.  
  85. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement