Hi again I'm curios about how to make a test for the flush/0 method: To test that it flushes both Logger and error_logger queues. (And similar tests for add_backend and remove_backend given opts[:flush]) I never really liked mocking and expectations but I don't see any other solution. Truth be told, I'm not even sure how to use mocks in Elixir :-)
Is it possible to test if a function call/statement results in a specific message to another processes? Or is there a better solution? Or is it just a bad idea to try to test this? Den fredag 3 juni 2016 kl. 00:27:00 UTC+2 skrev [email protected]: > > I'll be (extremely) happy to make a PR :-) > And thank you! > > > Den torsdag 2 juni 2016 kl. 23:42:13 UTC+2 skrev José Valim: >> >> Yes, it should, specially now that the flush implementation has changed. >> Can you please send a PR? >> >> Thank you! >> >> >> >> *José Valim* >> www.plataformatec.com.br >> Skype: jv.ptec >> Founder and Director of R&D >> >> On Thu, Jun 2, 2016 at 11:24 PM, <[email protected]> wrote: >> >>> Thank you very much for taking the time to answer my (newbie) question >>> :-) >>> >>> Another question about the logger.ex: shouldn't add_backend and >>> remove_backend(line 420 and 440) call the flush/1 method instead of >>> GenEvent.which_handlers(:error_logger) >>> >>> diff --git a/lib/logger/lib/logger.ex b/lib/logger/lib/logger.ex >>> index 0ef5ede..4feddb9 100644 >>> --- a/lib/logger/lib/logger.ex >>> +++ b/lib/logger/lib/logger.ex >>> @@ -417,7 +417,7 @@ defmodule Logger do >>> >>> """ >>> def add_backend(backend, opts \\ []) do >>> - _ = if opts[:flush], do: GenEvent.which_handlers(:error_logger) >>> + _ = if opts[:flush], do: flush() >>> case Logger.Watcher.watch(Logger, >>> Logger.Config.translate_backend(backend), backend) do >>> {:ok, _} = ok -> >>> Logger.Config.add_backend(backend) >>> @@ -437,7 +437,7 @@ defmodule Logger do >>> the backend is removed >>> """ >>> def remove_backend(backend, opts \\ []) do >>> - _ = if opts[:flush], do: GenEvent.which_handlers(:error_logger) >>> + _ = if opts[:flush], do: flush() >>> Logger.Config.remove_backend(backend) >>> Logger.Watcher.unwatch(Logger, >>> Logger.Config.translate_backend(backend)) >>> end >>> >>> >>> According to the docs both Logger and Erlang's error_logger message will >>> be flushed if opts[:flush]. And if I understand the code correctly only >>> error_logger messages will be flushed. >>> >>> /Johan >>> >>> Den torsdag 2 juni 2016 kl. 22:57:03 UTC+2 skrev José Valim: >>>> >>>> The "_ =" is just to signal that the function returns something (in >>>> this case handlers) but we are not interested in the result. It does not >>>> change the code in any possible way. If the test fails, that's a race >>>> condition in the suite and should not be related to your code change. >>>> >>>> >>>> >>>> *José Valim* >>>> www.plataformatec.com.br >>>> Skype: jv.ptec >>>> Founder and Director of R&D >>>> >>>> On Thu, Jun 2, 2016 at 10:48 PM, <[email protected]> wrote: >>>> >>>>> This could me my bad: the test failure only occurs sometimes. I guess >>>>> my computer is to slow :-) >>>>> >>>>> Den torsdag 2 juni 2016 kl. 22:15:39 UTC+2 skrev [email protected] >>>>> : >>>>>> >>>>>> OK, so I figured out that "_=" actually has effect because if I >>>>>> remove _= from line 205 in logger.ex the tests fails. >>>>>> >>>>>> $ git diff >>>>>> diff --git a/lib/logger/lib/logger.ex b/lib/logger/lib/logger.ex >>>>>> index 0ef5ede..644ffcb 100644 >>>>>> --- a/lib/logger/lib/logger.ex >>>>>> +++ b/lib/logger/lib/logger.ex >>>>>> @@ -402,7 +402,7 @@ defmodule Logger do >>>>>> """ >>>>>> @spec flush :: :ok >>>>>> def flush do >>>>>> - _ = GenEvent.which_handlers(:error_logger) >>>>>> + GenEvent.which_handlers(:error_logger) >>>>>> GenEvent.sync_notify(Logger, :flush) >>>>>> end >>>>>> >>>>>> $ make clean test >>>>>> ...... >>>>>> >>>>>> 1) test drop/2 with negative count stream entries (StreamTest) >>>>>> test/elixir/stream_test.exs:202 >>>>>> No message matching {:stream, 1} after 100ms. >>>>>> The process mailbox is empty. >>>>>> stacktrace: >>>>>> test/elixir/stream_test.exs:215: (test) >>>>>> >>>>>> >>>>>> Can someone please help me understand? >>>>>> >>>>>> >>>>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "elixir-lang-talk" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to [email protected]. >>>>> To view this discussion on the web visit >>>>> https://groups.google.com/d/msgid/elixir-lang-talk/3c1f5f6b-cfdc-440d-bbe8-a061660c6622%40googlegroups.com >>>>> >>>>> <https://groups.google.com/d/msgid/elixir-lang-talk/3c1f5f6b-cfdc-440d-bbe8-a061660c6622%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>> . >>>>> For more options, visit https://groups.google.com/d/optout. >>>>> >>>> >>>> >> -- You received this message because you are subscribed to the Google Groups "elixir-lang-talk" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-talk/cc4a9ba4-4c6b-49ba-843f-96c164b58950%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
