Commits

Anonymous committed bef6c9a

Test gen_bunny:start_link also checks get_connection and get_channel

Comments (0)

Files changed (2)

src/gen_bunny.erl

                 connect_declare_subscribe(ConnectFun, DeclareFun,
                                           direct, <<"cds.test">>, true))
          end])}.
+
+
+test_gb_setup() ->
+    {ok, _} = mock:mock(lib_amqp),
+
+    ConnectionPid = c:pid(0,0,0),
+    ChannelPid = c:pid(0,0,1),
+
+    mock:expects(lib_amqp, subscribe,
+                 fun({Channel, <<"bunny.test">>, _Pid, true})
+                    when Channel =:= ChannelPid ->
+                         true
+                 end,
+                 ok),
+
+    mock:expects(lib_amqp, unsubscribe,
+                 fun({Channel, <<"bunny.consumer">>})
+                    when Channel =:= ChannelPid ->
+                         true
+                 end,
+                 ok),
+
+    mock:expects(lib_amqp, teardown,
+                 fun({Connection, Channel})
+                    when Connection =:= ConnectionPid,
+                         Channel =:= ChannelPid ->
+                         true
+                 end,
+                 ok),
+
+    ConnectFun = fun(direct) ->
+                         {ConnectionPid, ChannelPid}
+                 end,
+
+    DeclareFun = fun(Channel, <<"bunny.test">>)
+                    when Channel =:= ChannelPid ->
+                         {bunny_util:new_exchange(<<"bunny.test">>),
+                          bunny_util:new_queue(<<"bunny.test">>)}
+                 end,
+
+    {ok, Pid} = test_gb:start_link([{connect_fun, ConnectFun},
+                                    {declare_fun, DeclareFun}]),
+
+    Pid ! #'basic.consume_ok'{consumer_tag = <<"bunny.consumer">>},
+
+    Pid.
+
+
+test_gb_stop(Pid) ->
+    gen_bunny:stop(Pid),
+    timer:sleep(500), %% I hate this.
+    mock:verify_and_stop(lib_amqp),
+    ok.
+
+
+test_gb_start_link_test_() ->
+    {setup, fun test_gb_setup/0, fun test_gb_stop/1,
+     fun(Pid) ->
+             ?_test(
+                [begin
+                     ?assertEqual(c:pid(0,0,0), gen_bunny:get_connection(Pid)),
+                     ?assertEqual(c:pid(0,0,1), gen_bunny:get_channel(Pid))
+                 end])
+     end}.
+%% The MIT License
+
+%% Copyright (c) David Reid <dreid@dreid.org>, Andy Gross <andy@andygross.org>
+
+%% Permission is hereby granted, free of charge, to any person obtaining a copy
+%% of this software and associated documentation files (the "Software"), to deal
+%% in the Software without restriction, including without limitation the rights
+%% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+%% copies of the Software, and to permit persons to whom the Software is
+%% furnished to do so, subject to the following conditions:
+
+%% The above copyright notice and this permission notice shall be included in
+%% all copies or substantial portions of the Software.
+
+%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+%% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+%% THE SOFTWARE.
+-module(test_gb).
+-behavior(gen_bunny).
+
+-export([start_link/1,
+         init/1,
+         handle_message/2,
+         handle_call/3,
+         handle_cast/2,
+         handle_info/2,
+         terminate/2]).
+
+-export([get_messages/1]).
+
+-include_lib("gen_bunny.hrl").
+
+-record(state, {messages=[]}).
+
+start_link(Opts) ->
+    gen_bunny:start_link(?MODULE, direct, <<"bunny.test">>, Opts).
+
+init([]) ->
+    {ok, #state{}}.
+
+get_messages(Pid) ->
+    gen_bunny:call(Pid, get_messages).
+
+handle_message(Message, State=#state{messages=Messages})
+  when ?is_message(Message) ->
+    NewMessages = [Message|Messages],
+    {noreply, State#state{messages=NewMessages}}.
+
+handle_call(get_messages, _From, State=#state{messages=Messages}) ->
+    {reply, Messages, State}.
+
+handle_cast(_Msg, State) -> {noreply, State}.
+
+handle_info(_Info, State) -> {noreply, State}.
+
+terminate(Reason, _State) ->
+    io:format("~p terminating with reason ~p~n", [?MODULE, Reason]),
+    ok.