Comment on error failures in logs + indenting

This commit is contained in:
Mickael Remond 2016-03-21 09:42:59 +01:00
parent 939bb244e1
commit 0e3026539e
1 changed files with 31 additions and 20 deletions

View File

@ -18,30 +18,41 @@
# #
# ---------------------------------------------------------------------- # ----------------------------------------------------------------------
# Notes on the tests:
#
# This test suite will print out errors in logs for tests:
#
# test "Error in run_fold is ignored"
# test "Throw in run_fold is ignored"
# test "Exit in run_fold is ignored"
#
# Those tests are not failing and we can safely ignore those errors in
# log as we are exercising hook handler recovery from that situation.
defmodule EjabberdHooksTest do defmodule EjabberdHooksTest do
use ExUnit.Case, async: true use ExUnit.Case, async: true
@author "mremond@process-one.net" @author "mremond@process-one.net"
@host <<"domain.net">> @host <<"domain.net">>
@self __MODULE__ @self __MODULE__
setup_all do setup_all do
{:ok, _Pid} = :ejabberd_hooks.start_link {:ok, _Pid} = :ejabberd_hooks.start_link
:ok :ok
end end
setup do setup do
:meck.unload :meck.unload
:true = :ejabberd_hooks.delete_all_hooks :true = :ejabberd_hooks.delete_all_hooks
:ok :ok
end end
test "An anonymous function can be added as a hook" do test "An anonymous function can be added as a hook" do
hookname = :test_fun_hook hookname = :test_fun_hook
:ok = :ejabberd_hooks.add(hookname, @host, fn _ -> :ok end, 50) :ok = :ejabberd_hooks.add(hookname, @host, fn _ -> :ok end, 50)
[{50, :undefined, _}] = :ejabberd_hooks.get_handlers(hookname, @host) [{50, :undefined, _}] = :ejabberd_hooks.get_handlers(hookname, @host)
end end
test "A module function can be added as a hook" do test "A module function can be added as a hook" do
hookname = :test_mod_hook hookname = :test_mod_hook
callback = :hook_callback callback = :hook_callback
@ -51,7 +62,7 @@ defmodule EjabberdHooksTest do
test "An anonymous function can be removed from hook handlers" do test "An anonymous function can be removed from hook handlers" do
hookname = :test_fun_hook hookname = :test_fun_hook
anon_fun = fn _ -> :ok end anon_fun = fn _ -> :ok end
:ok = :ejabberd_hooks.add(hookname, @host, anon_fun, 50) :ok = :ejabberd_hooks.add(hookname, @host, anon_fun, 50)
:ok = :ejabberd_hooks.delete(hookname, @host, anon_fun, 50) :ok = :ejabberd_hooks.delete(hookname, @host, anon_fun, 50)
[] = :ejabberd_hooks.get_handlers(hookname, @host) [] = :ejabberd_hooks.get_handlers(hookname, @host)
@ -77,20 +88,20 @@ defmodule EjabberdHooksTest do
end end
# TODO test "Several handlers are run in order by hook" # TODO test "Several handlers are run in order by hook"
test "Hook run chain is stopped when handler return 'stop'" do test "Hook run chain is stopped when handler return 'stop'" do
# setup test # setup test
hookname = :test_mod_hook hookname = :test_mod_hook
modulename = :hook_module modulename = :hook_module
mock(modulename, :hook_callback1, fn _ -> :stop end) mock(modulename, :hook_callback1, fn _ -> :stop end)
mock(modulename, :hook_callback2, fn _ -> :end_result end) mock(modulename, :hook_callback2, fn _ -> :end_result end)
:ok = :ejabberd_hooks.add(hookname, @host, modulename, :hook_callback1, 40) :ok = :ejabberd_hooks.add(hookname, @host, modulename, :hook_callback1, 40)
:ok = :ejabberd_hooks.add(hookname, @host, modulename, :hook_callback1, 50) :ok = :ejabberd_hooks.add(hookname, @host, modulename, :hook_callback1, 50)
:ok = :ejabberd_hooks.run(hookname, @host, [:hook_params]) :ok = :ejabberd_hooks.run(hookname, @host, [:hook_params])
# callback2 is never run: # callback2 is never run:
[{_pid, {^modulename, _callback, [:hook_params]}, :stop}] = :meck.history(modulename) [{_pid, {^modulename, _callback, [:hook_params]}, :stop}] = :meck.history(modulename)
end end
test "Run fold hooks accumulate state in correct order through handlers" do test "Run fold hooks accumulate state in correct order through handlers" do
@ -99,10 +110,10 @@ defmodule EjabberdHooksTest do
modulename = :hook_module modulename = :hook_module
mock(modulename, :hook_callback1, fn(list, user) -> [user|list] end) mock(modulename, :hook_callback1, fn(list, user) -> [user|list] end)
mock(modulename, :hook_callback2, fn(list, _user) -> ["jid2"|list] end) mock(modulename, :hook_callback2, fn(list, _user) -> ["jid2"|list] end)
:ok = :ejabberd_hooks.add(hookname, @host, modulename, :hook_callback1, 40) :ok = :ejabberd_hooks.add(hookname, @host, modulename, :hook_callback1, 40)
:ok = :ejabberd_hooks.add(hookname, @host, modulename, :hook_callback2, 50) :ok = :ejabberd_hooks.add(hookname, @host, modulename, :hook_callback2, 50)
["jid2", "jid1"] = :ejabberd_hooks.run_fold(hookname, @host, [], ["jid1"]) ["jid2", "jid1"] = :ejabberd_hooks.run_fold(hookname, @host, [], ["jid1"])
end end
@ -115,12 +126,12 @@ defmodule EjabberdHooksTest do
:ok = :ejabberd_hooks.add(hookname, @host, modulename, :hook_callback2, 50) :ok = :ejabberd_hooks.add(hookname, @host, modulename, :hook_callback2, 50)
:ok = :ejabberd_hooks.add(hookname, @host, modulename, :hook_callback1, 40) :ok = :ejabberd_hooks.add(hookname, @host, modulename, :hook_callback1, 40)
:second = :ejabberd_hooks.run_fold(hookname, @host, :started, []) :second = :ejabberd_hooks.run_fold(hookname, @host, :started, [])
# Both module have been called: # Both module have been called:
2 = length(:meck.history(modulename)) 2 = length(:meck.history(modulename))
end end
# TODO: Test with ability to stop and return a value # TODO: Test with ability to stop and return a value
test "Hook run_fold chain is stopped when handler return 'stop'" do test "Hook run_fold chain is stopped when handler return 'stop'" do
# setup test # setup test
@ -148,19 +159,19 @@ defmodule EjabberdHooksTest do
test "Exit in run_fold is ignored" do test "Exit in run_fold is ignored" do
run_fold_crash(fn(_acc) -> exit :crashed end) run_fold_crash(fn(_acc) -> exit :crashed end)
end end
# test for run hook with various number of params # test for run hook with various number of params
def run_hook(params, fun, result) do def run_hook(params, fun, result) do
# setup test # setup test
hookname = :test_mod_hook hookname = :test_mod_hook
modulename = :hook_module modulename = :hook_module
callback = :hook_callback callback = :hook_callback
mock(modulename, callback, fun) mock(modulename, callback, fun)
# Then check # Then check
:ok = :ejabberd_hooks.add(hookname, @host, modulename, callback, 40) :ok = :ejabberd_hooks.add(hookname, @host, modulename, callback, 40)
:ok = :ejabberd_hooks.run(hookname, @host, params) :ok = :ejabberd_hooks.run(hookname, @host, params)
[{_pid, {^modulename, ^callback, ^params}, ^result}] = :meck.history(modulename) [{_pid, {^modulename, ^callback, ^params}, ^result}] = :meck.history(modulename)
end end
def run_fold_crash(crash_fun) do def run_fold_crash(crash_fun) do
@ -175,7 +186,7 @@ defmodule EjabberdHooksTest do
:final = :ejabberd_hooks.run_fold(hookname, @host, :started, []) :final = :ejabberd_hooks.run_fold(hookname, @host, :started, [])
# Both handlers were called # Both handlers were called
2 = length(:meck.history(modulename)) 2 = length(:meck.history(modulename))
end end
# TODO refactor: Move to ejabberd_test_mock # TODO refactor: Move to ejabberd_test_mock
@ -188,5 +199,5 @@ defmodule EjabberdHooksTest do
:meck.expect(module, function, fun) :meck.expect(module, function, fun)
end end
end end