WebKernel has a terminate handler that is called after dispatching and sending a response
parent
43ccbf4a52
commit
0b85064f15
|
@ -67,4 +67,6 @@ void WebKernel::dispatchRequest()
|
|||
response.setHttpVersion(_request.getHttpVersion());
|
||||
_dispatcher.handle(_request, response);
|
||||
response.send(_client);
|
||||
if (_terminateHandler != nullptr)
|
||||
_terminateHandler(_request, response);
|
||||
}
|
||||
|
|
|
@ -41,6 +41,11 @@ class WebKernel
|
|||
_dispatcher.methodNotAllowedHandler = handler;
|
||||
}
|
||||
|
||||
void setTerminateHandler(void (*handler)(const HttpRequest&, const HttpResponse&))
|
||||
{
|
||||
_terminateHandler = handler;
|
||||
}
|
||||
|
||||
#ifdef _TEST_
|
||||
void mock_nextClient(const char * next) { _server._next = next; }
|
||||
WiFiClient& mock_currentClient() { return _client; }
|
||||
|
@ -59,4 +64,6 @@ class WebKernel
|
|||
|
||||
void dispatchRequest();
|
||||
|
||||
void (*_terminateHandler)(const HttpRequest&, const HttpResponse&);
|
||||
|
||||
};
|
||||
|
|
|
@ -9,6 +9,7 @@ char error_message[24] = {};
|
|||
|
||||
char response_buffer[100] = {};
|
||||
Buffer message((uint8_t*)response_buffer, 100);
|
||||
bool term = false;
|
||||
|
||||
void do_foo(HttpRequest& request, HttpResponse& response)
|
||||
{
|
||||
|
@ -40,6 +41,11 @@ void handle_methodNotAllowed(HttpRequest& request, HttpResponse& response)
|
|||
strcpy(error_message, "Method Not Allowed");
|
||||
}
|
||||
|
||||
void handle_terminate(const HttpRequest& request, const HttpResponse& response)
|
||||
{
|
||||
term = true;
|
||||
}
|
||||
|
||||
TEST_CASE("Test WebKernel", "[WebKernel]")
|
||||
{
|
||||
Route routes[] = {
|
||||
|
@ -120,3 +126,20 @@ TEST_CASE("Test WebKernel error handling", "[WebKernel]")
|
|||
{
|
||||
|
||||
}
|
||||
|
||||
TEST_CASE("WebKernel terminate handler", "[WebKernel]")
|
||||
{
|
||||
Route routes[] = {
|
||||
{ GET, "/foo", do_foo },
|
||||
{ GET, "/bar", do_bar }
|
||||
};
|
||||
WebKernel kernel(80, routes, 2);
|
||||
foo = bar = 0;
|
||||
term = false;
|
||||
|
||||
kernel.mock_nextClient("GET /foo HTTP/1.1\r\nHost: localhost\r\n\r\n");
|
||||
kernel.setTerminateHandler(handle_terminate);
|
||||
|
||||
kernel.handleClients();
|
||||
CHECK(term == true);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue