| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- %%--------------------------------------------------------------------
- %% A Simple HTTP Server based cowboy
- %%
- %% It will deliver the http-request params to initialer process
- %%--------------------------------------------------------------------
- %%
- %% Author:wwhai
- %%
- -module(http_server).
- -behaviour(gen_server).
- -export([start_link/0]).
- -export([get_received_data/0]).
- -export([stop/1]).
- -export([code_change/3, handle_call/3, handle_cast/2, handle_info/2, init/1, terminate/2]).
- -define(HTTP_PORT, 9999).
- -define(HTTPS_PORT, 8888).
- -record(state, {}).
- %%--------------------------------------------------------------------
- %% APIs
- %%--------------------------------------------------------------------
- start_link() ->
- gen_server:start_link(?MODULE, [], []).
- init([]) ->
- EtsOptions = [named_table, public, set, {write_concurrency, true},
- {read_concurrency, true}],
- emqx_web_hook_http_test = ets:new(emqx_web_hook_http_test, EtsOptions),
- ok = start_http(?HTTP_PORT),
- ok = start_https(?HTTPS_PORT),
- {ok, #state{}}.
- handle_call(_Request, _From, State) ->
- {reply, ignored, State}.
- handle_cast(_Msg, State) ->
- {noreply, State}.
- handle_info(_Info, State) ->
- {noreply, State}.
- terminate(_Reason, _State) ->
- stop_http(),
- stop_https().
- code_change(_OldVsn, State, _Extra) ->
- {ok, State}.
- get_received_data() ->
- ets:tab2list(emqx_web_hook_http_test).
- stop(Pid) ->
- ok = gen_server:stop(Pid).
- %%--------------------------------------------------------------------
- %% Callbacks
- %%--------------------------------------------------------------------
- start_http(Port) ->
- {ok, _Pid1} = cowboy:start_clear(http, [{port, Port}], #{
- env => #{dispatch => compile_router()}
- }),
- io:format(standard_error, "[TEST LOG] Start http server on 9999 successfully!~n", []).
- start_https(Port) ->
- Path = emqx_ct_helpers:deps_path(emqx_web_hook, "test/emqx_web_hook_SUITE_data/"),
- SslOpts = [{keyfile, Path ++ "/server-key.pem"},
- {cacertfile, Path ++ "/ca.pem"},
- {certfile, Path ++ "/server-cert.pem"}],
- {ok, _Pid2} = cowboy:start_tls(https, [{port, Port}] ++ SslOpts,
- #{env => #{dispatch => compile_router()}}),
- io:format(standard_error, "[TEST LOG] Start https server on 8888 successfully!~n", []).
- stop_http() ->
- ok = cowboy:stop_listener(http),
- io:format("[TEST LOG] Stopped http server on 9999").
- stop_https() ->
- ok = cowboy:stop_listener(https),
- io:format("[TEST LOG] Stopped https server on 8888").
- compile_router() ->
- {ok, _} = application:ensure_all_started(cowboy),
- cowboy_router:compile([
- {'_', [{"/", ?MODULE, #{}}]}
- ]).
- init(Req, State) ->
- Method = cowboy_req:method(Req),
- Headers = cowboy_req:headers(Req),
- [Params] = case Method of
- <<"GET">> -> cowboy_req:parse_qs(Req);
- <<"POST">> ->
- {ok, PostVals, _} = cowboy_req:read_urlencoded_body(Req),
- PostVals
- end,
- ets:insert(emqx_web_hook_http_test, {Params, Headers}),
- {ok, reply(Req, ok), State}.
- reply(Req, ok) ->
- cowboy_req:reply(200, #{<<"content-type">> => <<"text/plain">>}, <<"ok">>, Req);
- reply(Req, error) ->
- cowboy_req:reply(404, #{<<"content-type">> => <<"text/plain">>}, <<"deny">>, Req).
|