Skip to content

Commit 54bf474

Browse files
committed
Implements comparison operator between HTTP requests + test showcasing how to build a http request in different phases
Overall I am happy with the design, only drawback is that when we do `.execute()` we still have to re-build the same request despite being 're-used'. Will look into this eventually
1 parent d7db4cb commit 54bf474

3 files changed

Lines changed: 26 additions & 1 deletion

File tree

src/s3cpp/httpclient.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
HttpResponse HttpRequest::execute() { return client_.execute(*this); }
99

10+
1011
HttpResponse HttpClient::execute(HttpRequest &request) {
1112
if (!curl_handle) {
1213
throw std::runtime_error(

src/s3cpp/httpclient.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ class HttpResponse {
2222
bool is_client_error() const { return code_ >= 400 && code_ < 500; }
2323
bool is_server_error() const { return code_ >= 500 && code_ < 600; }
2424

25+
bool operator==(const HttpResponse &other) const {
26+
return (code_ == other.code_ && body_ == other.body_);
27+
}
28+
2529
private:
2630
int code_;
2731
std::string body_;
@@ -45,7 +49,7 @@ class HttpRequest {
4549

4650
HttpResponse execute();
4751

48-
const std::string& getURL() const { return URL_; }
52+
const std::string &getURL() const { return URL_; }
4953
const int getTimeout() const { return timeout_; }
5054

5155
private:

test/httpclient_test.cpp

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,24 @@ TEST(HTTP, HTTPHandleTimeout) {
6666
}
6767
}
6868

69+
TEST(HTTP, HTTPRequestInDifferentPhases) {
70+
HttpClient client{};
71+
HttpRequest req = client.get("https://postman-echo.com/get").timeout(1);
72+
auto responses = std::vector<HttpResponse>{};
73+
try {
74+
HttpResponse resp1 = client.execute(req);
75+
responses.push_back(resp1);
76+
} catch (const std::exception &e) {
77+
SUCCEED(); // libcurl error for request: Timeout was reached
78+
}
79+
try {
80+
HttpResponse resp2 = client.execute(req);
81+
responses.push_back(resp2);
82+
} catch (const std::exception &e) {
83+
SUCCEED(); // libcurl error for request: Timeout was reached
84+
}
85+
ASSERT_EQ(responses.size(), 2);
86+
ASSERT_EQ(responses[0], responses[1]);
87+
}
88+
6989
// TODO(cristian): Headers extensive tests

0 commit comments

Comments
 (0)