From 9821f7796f67b7f6f1c4ea8b0d3383cbc24ca2e2 Mon Sep 17 00:00:00 2001 From: Alexey Nikitin Date: Mon, 11 Jun 2018 15:40:36 +0300 Subject: [PATCH] Introduce bookish_spork:receive_request We do not need custom tags anymore --- src/bookish_spork.erl | 24 +++++++++++++++--------- src/bookish_spork_request.erl | 10 +++++----- src/bookish_spork_server.erl | 6 ++---- src/bookish_spork_settings.erl | 15 --------------- test/bookish_spork_SUITE.erl | 15 ++------------- 5 files changed, 24 insertions(+), 46 deletions(-) diff --git a/src/bookish_spork.erl b/src/bookish_spork.erl index a296582..9523980 100644 --- a/src/bookish_spork.erl +++ b/src/bookish_spork.erl @@ -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(). @@ -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) -> diff --git a/src/bookish_spork_request.erl b/src/bookish_spork_request.erl index 7a7574c..22012c4 100644 --- a/src/bookish_spork_request.erl +++ b/src/bookish_spork_request.erl @@ -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{}. diff --git a/src/bookish_spork_server.erl b/src/bookish_spork_server.erl index 2533b1a..9e74320 100644 --- a/src/bookish_spork_server.erl +++ b/src/bookish_spork_server.erl @@ -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) -> diff --git a/src/bookish_spork_settings.erl b/src/bookish_spork_settings.erl index 23ad72a..a0a603d 100644 --- a/src/bookish_spork_settings.erl +++ b/src/bookish_spork_settings.erl @@ -1,8 +1,6 @@ -module(bookish_spork_settings). -export([ - tag/0, - tag/1, status/0, status/1, headers/0, @@ -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(), diff --git a/test/bookish_spork_SUITE.erl b/test/bookish_spork_SUITE.erl index 67fb607..19bcd4a 100644 --- a/test/bookish_spork_SUITE.erl +++ b/test/bookish_spork_SUITE.erl @@ -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)), @@ -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">>), @@ -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)),