From 087bfe80c8d43d2eb917ca5052c2af494b9b5136 Mon Sep 17 00:00:00 2001 From: Gilbert Wong Date: Mon, 27 Aug 2018 15:24:40 +0800 Subject: [PATCH] fix unsubscribe emqx_mock_client error --- src/emqx.erl | 7 +++++-- test/emqx_mock_client.erl | 30 ++++++++++++++++++++++-------- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/emqx.erl b/src/emqx.erl index 9ac9227ed..54f1952f4 100644 --- a/src/emqx.erl +++ b/src/emqx.erl @@ -94,8 +94,11 @@ unsubscribe(Topic) -> emqx_broker:unsubscribe(iolist_to_binary(Topic)). -spec(unsubscribe(topic() | string(), subscriber() | string()) -> ok | {error, term()}). -unsubscribe(Topic, Subscriber) -> - emqx_broker:unsubscribe(iolist_to_binary(Topic), list_to_subid(Subscriber)). +unsubscribe(Topic, Sub) when is_list(Sub) -> + emqx_broker:unsubscribe(iolist_to_binary(Topic)); +unsubscribe(Topic, Subscriber) when is_tuple(Subscriber) -> + {SubPid, SubId} = Subscriber, + emqx_broker:unsubscribe(iolist_to_binary(Topic), SubPid, SubId). %%-------------------------------------------------------------------- %% PubSub management API diff --git a/test/emqx_mock_client.erl b/test/emqx_mock_client.erl index 2b18c348f..e76e5551c 100644 --- a/test/emqx_mock_client.erl +++ b/test/emqx_mock_client.erl @@ -18,28 +18,42 @@ -behaviour(gen_server). --export([start_link/1, start_session/1, stop/1]). +-export([start_link/1, open_session/3, stop/1]). -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). --record(state, {clientid, session}). +-record(state, {clean_start, client_id, client_pid}). start_link(ClientId) -> gen_server:start_link(?MODULE, [ClientId], []). -start_session(CPid) -> - gen_server:call(CPid, start_session). +open_session(ClientPid, ClientId, Zone) -> + gen_server:call(ClientPid, {start_session, ClientPid, ClientId, Zone}). stop(CPid) -> gen_server:call(CPid, stop). init([ClientId]) -> - {ok, #state{clientid = ClientId}}. + {ok, + #state{clean_start = true, + client_id = ClientId} + }. -handle_call(start_session, _From, State = #state{clientid = ClientId}) -> - {ok, SessPid, _} = emqx_sm:start_session(true, {ClientId, undefined}), - {reply, {ok, SessPid}, State#state{session = SessPid}}; +handle_call({start_session, ClientPid, ClientId, Zone}, _From, State) -> + Attrs = #{ zone => Zone, + client_id => ClientId, + client_pid => ClientPid, + clean_start => true, + username => undefined, + conn_props => undefined + }, + {ok, SessPid} = emqx_sm:open_session(Attrs), + {reply, {ok, SessPid}, State#state{ + clean_start = true, + client_id = ClientId, + client_pid = ClientPid + }}; handle_call(stop, _From, State) -> {stop, normal, ok, State};