Skip to content

Commit

Permalink
Introduce bookish_spork:receive_request
Browse files Browse the repository at this point in the history
We do not need custom tags anymore
  • Loading branch information
Alexey Nikitin committed Jun 11, 2018
1 parent 3afe4a3 commit 9821f77
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 46 deletions.
24 changes: 15 additions & 9 deletions src/bookish_spork.erl
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,22 @@
-export([
start_server/0,
start_server/1,
stop_server/1
stop_server/1,
receive_request/0
]).

-export([
tag/1,
status/1,
header/2,
content/1
]).

-define(DEFAUT_PORT, 5432).
-define(RECEIVE_REQUEST_TIMEOUT_MILLIS, 1000).

-type settings() :: #{
port => non_neg_integer(),
capture => pid()
port => non_neg_integer(),
receiver => pid()
}.

-spec start_server() -> bookish_spork_server:server().
Expand All @@ -27,16 +28,21 @@ start_server() ->
-spec start_server(Settings :: settings()) -> bookish_spork_server:server().
start_server(Settings) ->
Port = maps:get(port, Settings, ?DEFAUT_PORT),
RequestCapture = maps:get(capture, Settings, self()),
bookish_spork_server:start(Port, RequestCapture).
Receiver = maps:get(receiver, Settings, self()),
bookish_spork_server:start(Port, Receiver).

-spec stop_server(Server :: bookish_spork_server:server()) -> ok.
stop_server(Server) ->
bookish_spork_server:stop(Server).

-spec tag(Tag :: atom()) -> true.
tag(Tag) ->
bookish_spork_settings:tag(Tag).
-spec receive_request() -> bookish_spork_request:bookish_spork_request().
receive_request() ->
receive
{bookish_spork, Request} ->
{ok, Request}
after ?RECEIVE_REQUEST_TIMEOUT_MILLIS ->
timeout
end.

-spec status(Status :: non_neg_integer()) -> true.
status(Status) ->
Expand Down
10 changes: 5 additions & 5 deletions src/bookish_spork_request.erl
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@
}.

-record(request, {
method :: atom(),
uri :: string(),
version :: http_version(),
headers = #{} :: map(),
body :: binary()
method :: atom(),
uri :: string(),
version :: http_version(),
headers = #{} :: map(),
body :: binary()
}).

-opaque request() :: #request{}.
Expand Down
6 changes: 2 additions & 4 deletions src/bookish_spork_server.erl
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,10 @@ accept_connection_loop(ListenSocket, Receiver) ->
case gen_tcp:accept(ListenSocket) of
{ok, Socket} ->
Request = accept(Socket),
Tag = bookish_spork_settings:tag(),
Receiver ! {Tag, Request},
Receiver ! {bookish_spork, Request},
accept_connection_loop(ListenSocket, Receiver);
{error, closed} ->
Tag = bookish_spork_settings:tag(),
Receiver ! {Tag, socket_closed}
Receiver ! {bookish_spork, socket_closed}
end.

accept(Socket) ->
Expand Down
15 changes: 0 additions & 15 deletions src/bookish_spork_settings.erl
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
-module(bookish_spork_settings).

-export([
tag/0,
tag/1,
status/0,
status/1,
headers/0,
Expand All @@ -26,19 +24,6 @@ init() ->
true
end.

-spec tag() -> Tag :: atom().
tag() ->
init(),
case ets:lookup(?TAB, tag) of
[{ tag, Tag }] -> Tag;
_ -> ?DEFAULT_TAG
end.

-spec tag(Tag :: atom()) -> true.
tag(Tag) when is_atom(Tag) ->
init(),
ets:insert(?TAB, { tag, Tag }).

-spec status() -> non_neg_integer().
status() ->
init(),
Expand Down
15 changes: 2 additions & 13 deletions test/bookish_spork_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,7 @@ base_integration_test(_Config) ->
{ok, {{"HTTP/1.1", 204, "No Content"}, _ResponseHeaders, _Body}} =
httpc:request(get, {"http://localhost:5432/o/lo/lo?q=kjk", RequestHeaders}, [], []),

{ok, Request} = receive
{bookish_spork, Req} ->
{ok, Req}
after 2000 ->
timeout
end,
{ok, Request} = ?T:receive_request(),
?assertEqual('GET', bookish_spork_request:method(Request)),
?assertEqual("/o/lo/lo?q=kjk", bookish_spork_request:uri(Request)),
?assertEqual({1, 1}, bookish_spork_request:version(Request)),
Expand All @@ -50,7 +45,6 @@ base_integration_test(_Config) ->
customized_response_test(_Config) ->
Server = ?T:start_server(#{port => 9871}),

?T:tag(custom_tag),
?T:status(200),
?T:header(<<"X-Custom-Response-Header">>, <<"test">>),
?T:content(<<"Hello, Test">>),
Expand All @@ -67,12 +61,7 @@ customized_response_test(_Config) ->
proplists:lookup("x-custom-response-header", ResponseHeaders)),
?assertEqual(<<"Hello, Test">>, string:chomp(Body)),

{ok, Request} = receive
{custom_tag, Req} ->
{ok, Req}
after 2000 ->
timeout
end,
{ok, Request} = ?T:receive_request(),
?assertEqual('POST', bookish_spork_request:method(Request)),
?assertEqual("/api/v1/users", bookish_spork_request:uri(Request)),
?assertEqual({1, 1}, bookish_spork_request:version(Request)),
Expand Down

0 comments on commit 9821f77

Please sign in to comment.