44#include < netinet/in.h>
55#include < string>
66
7- class HttpServerTest : public ::testing::Test {};
7+ class HttpServerTest : public ::testing::Test {
8+ public:
9+ static constexpr int port {8081 };
10+ };
811
912TEST (ServerTest, ConstructorDestructorTest) {
1013 HttpServer server {};
@@ -15,15 +18,15 @@ TEST(HttpServerTest, AcceptsHttpRequest) {
1518 server.get_mapping (" /" , [](const HttpServer::Request&, HttpServer::Response& res) {
1619 res.body = " test" ;
1720 });
18- server.start_listening (8081 );
21+ server.start_listening (HttpServerTest::port );
1922
20- std::this_thread::sleep_for (std::chrono::milliseconds (10 ));
23+ std::this_thread::sleep_for (std::chrono::milliseconds (1 ));
2124
2225 int sock = socket (AF_INET, SOCK_STREAM, 0 );
2326
2427 sockaddr_in addr{};
2528 addr.sin_family = AF_INET;
26- addr.sin_port = htons (8081 );
29+ addr.sin_port = htons (HttpServerTest::port );
2730 addr.sin_addr .s_addr = inet_addr (" 127.0.0.1" );
2831
2932 ASSERT_EQ (connect (sock, reinterpret_cast <sockaddr *>(&addr), sizeof (addr)), 0 );
@@ -48,15 +51,15 @@ TEST(HttpServerTest, AcceptGetRequest) {
4851 server.get_mapping (" /hello" , [](const HttpServer::Request&, HttpServer::Response& res){
4952 res.body = " hello, world" ;
5053 });
51- server.start_listening (8082 );
54+ server.start_listening (HttpServerTest::port );
5255
5356 std::this_thread::sleep_for (std::chrono::milliseconds (1 ));
5457
5558 int sock = socket (AF_INET, SOCK_STREAM, 0 );
5659
5760 sockaddr_in addr{};
5861 addr.sin_family = AF_INET;
59- addr.sin_port = htons (8082 );
62+ addr.sin_port = htons (HttpServerTest::port );
6063 addr.sin_addr .s_addr = inet_addr (" 127.0.0.1" );
6164
6265 ASSERT_EQ (connect (sock, reinterpret_cast <sockaddr *>(&addr), sizeof (addr)), 0 );
@@ -79,15 +82,15 @@ TEST(HttpServerTest, IgnoreGetReqBody) {
7982 server.get_mapping (" /hello" , [](const HttpServer::Request& req, HttpServer::Response& res){
8083 res.body = req.body ;
8184 });
82- server.start_listening (8083 );
85+ server.start_listening (HttpServerTest::port );
8386
8487 std::this_thread::sleep_for (std::chrono::milliseconds (1 ));
8588
8689 int sock = socket (AF_INET, SOCK_STREAM, 0 );
8790
8891 sockaddr_in addr{};
8992 addr.sin_family = AF_INET;
90- addr.sin_port = htons (8083 );
93+ addr.sin_port = htons (HttpServerTest::port );
9194 addr.sin_addr .s_addr = inet_addr (" 127.0.0.1" );
9295
9396 ASSERT_EQ (connect (sock, reinterpret_cast <sockaddr *>(&addr), sizeof (addr)), 0 );
@@ -108,36 +111,44 @@ TEST(HttpServerTest, IgnoreGetReqBody) {
108111}
109112
110113TEST (HttpServerTest, DoesntIgnorePostReqBody) {
111- HttpServer server {};
112- server.post_mapping (" /post-foo" , [](const HttpServer::Request& req, HttpServer::Response& res){
113- res.body = req.body ;
114- });
115- server.start_listening (8084 );
114+ try {
115+ HttpServer server {};
116+ server.post_mapping (" /foo" , [](const HttpServer::Request& req, HttpServer::Response& res){
117+ res.body = req.body ;
118+ });
119+ server.start_listening (HttpServerTest::port);
116120
117- std::this_thread::sleep_for (std::chrono::milliseconds (1 ));
121+ std::this_thread::sleep_for (std::chrono::milliseconds (1 ));
118122
119- int sock = socket (AF_INET, SOCK_STREAM, 0 );
123+ int sock = socket (AF_INET, SOCK_STREAM, 0 );
120124
121- sockaddr_in addr{};
122- addr.sin_family = AF_INET;
123- addr.sin_port = htons (8084 );
124- addr.sin_addr .s_addr = inet_addr (" 127.0.0.1" );
125+ sockaddr_in addr{};
126+ addr.sin_family = AF_INET;
127+ addr.sin_port = htons (HttpServerTest::port );
128+ addr.sin_addr .s_addr = inet_addr (" 127.0.0.1" );
125129
126- ASSERT_EQ (connect (sock, reinterpret_cast <sockaddr *>(&addr), sizeof (addr)), 0 );
130+ ASSERT_EQ (connect (sock, reinterpret_cast <sockaddr *>(&addr), sizeof (addr)), 0 );
127131
128- const char * request = " POST /post-foo HTTP/1.1\r\n\r\n hello, world" ;
129- send (sock, request, strlen (request), 0 );
132+ std::string request = " POST /foo HTTP/1.1\r\n "
133+ " Host: localhost\r\n "
134+ " Connection: keep-alive\r\n "
135+ " Content-Length: 5\r\n "
136+ " \r\n "
137+ " hello" ;
130138
131- char buffer[1024 ] {};
132- int bytes = recv (sock, buffer, sizeof (buffer), 0 );
133- std::string result = std::string (buffer);
139+ send (sock, request.c_str (), request.size (), 0 );
134140
135- EXPECT_GT (bytes, 0 );
141+ char buffer[1024 ] {};
142+ int bytes = recv (sock, buffer, sizeof (buffer), 0 );
143+ std::string result = std::string (buffer);
136144
137- // Should find "hello, world" as setting the request body
138- ASSERT_TRUE (result.find (" hello, world " ) != std::string::npos);
145+ EXPECT_GT (bytes, 0 );
146+ ASSERT_TRUE (result.find (" hello" ) != std::string::npos);
139147
140- close (sock);
148+ close (sock);
149+ } catch (const std::exception& e) {
150+ FAIL () << " Exception occurred: " << e.what ();
151+ }
141152}
142153
143154TEST (HttpServerTest, AllUniqueReqMethods) {
@@ -172,13 +183,13 @@ TEST(HttpServerTest, AllUniqueReqMethods) {
172183 res.body = " 8" ;
173184 });
174185
175- server.start_listening (8085 );
186+ server.start_listening (HttpServerTest::port );
176187
177188 std::this_thread::sleep_for (std::chrono::milliseconds (1 ));
178189
179190 sockaddr_in addr{};
180191 addr.sin_family = AF_INET;
181- addr.sin_port = htons (8085 );
192+ addr.sin_port = htons (HttpServerTest::port );
182193 addr.sin_addr .s_addr = inet_addr (" 127.0.0.1" );
183194
184195 const std::string methods[9 ] = { " GET" , " POST" , " PUT" , " PATCH" , " OPTIONS" , " HEAD" , " DELETE" , " CONNECT" , " TRACE" };
@@ -205,12 +216,12 @@ TEST(HttpServerTest, AllUniqueReqMethods) {
205216
206217TEST (HttpServerTest, HandleNonExistentGetRoute) {
207218 HttpServer server {};
208- server.start_listening (8086 );
219+ server.start_listening (HttpServerTest::port );
209220 std::this_thread::sleep_for (std::chrono::milliseconds (1 ));
210221
211222 sockaddr_in addr{};
212223 addr.sin_family = AF_INET;
213- addr.sin_port = htons (8086 );
224+ addr.sin_port = htons (HttpServerTest::port );
214225 addr.sin_addr .s_addr = inet_addr (" 127.0.0.1" );
215226
216227 std::string request = " GET /foo HTTP/1.1\r\n "
@@ -238,12 +249,12 @@ TEST(HttpServerTest, HandleNonExistentGetRoute) {
238249 */
239250TEST (HttpServerTest, HandleNonExistentPostRoute) {
240251 HttpServer server {};
241- server.start_listening (8087 );
252+ server.start_listening (HttpServerTest::port );
242253 std::this_thread::sleep_for (std::chrono::milliseconds (1 ));
243254
244255 sockaddr_in addr{};
245256 addr.sin_family = AF_INET;
246- addr.sin_port = htons (8087 );
257+ addr.sin_port = htons (HttpServerTest::port );
247258 addr.sin_addr .s_addr = inet_addr (" 127.0.0.1" );
248259
249260 std::string request = " POST /foo HTTP/1.1\r\n "
@@ -267,12 +278,12 @@ TEST(HttpServerTest, HandleNonExistentPostRoute) {
267278
268279TEST (HttpServerTest, HandleNonExistentHttpMethod) {
269280 HttpServer server {};
270- server.start_listening (8088 );
281+ server.start_listening (HttpServerTest::port );
271282 std::this_thread::sleep_for (std::chrono::milliseconds (1 ));
272283
273284 sockaddr_in addr{};
274285 addr.sin_family = AF_INET;
275- addr.sin_port = htons (8088 );
286+ addr.sin_port = htons (HttpServerTest::port );
276287 addr.sin_addr .s_addr = inet_addr (" 127.0.0.1" );
277288
278289 std::string request = " FOO /foo HTTP/1.1\r\n "
0 commit comments