Skip to content

Commit

Permalink
[WIP] Implement more tests
Browse files Browse the repository at this point in the history
Signed-off-by: Juan Cruz Viotti <[email protected]>
  • Loading branch information
jviotti committed Nov 21, 2023
1 parent 14889ae commit f5a95e0
Show file tree
Hide file tree
Showing 2 changed files with 97 additions and 16 deletions.
90 changes: 89 additions & 1 deletion test/http/request_1_1_test.cc
Original file line number Diff line number Diff line change
@@ -1,11 +1,99 @@
#include <algorithm>
#include <iterator>
#include <sstream>
#include <string>

#include <gtest/gtest.h>
#include <sourcemeta/hydra/http.h>

// TODO: Add more tests

TEST(HTTP_Request_1_1, XXX) {
// - Different methods
// - Different exit codes
// - Request header
// - Request body
// - Response body
// - Response header with capture
// - Response header without capture
// - Response header with partial intersection capture

static auto body(sourcemeta::hydra::http::Response &response) -> std::string {
std::ostringstream result;
std::copy(
std::istreambuf_iterator<std::ostringstream::char_type>(response.body()),
std::istreambuf_iterator<std::ostringstream::char_type>(),
std::ostreambuf_iterator<std::ostringstream::char_type>(result));
return result.str();
}

TEST(HTTP_Request_1_1, GET_root) {
sourcemeta::hydra::http::Request request{BASE_URL};
request.method(sourcemeta::hydra::http::Method::GET);
sourcemeta::hydra::http::Response response{request.send().get()};
EXPECT_EQ(response.status(), sourcemeta::hydra::http::Status::OK);
EXPECT_EQ(body(response), "RECEIVED GET /");
}

TEST(HTTP_Request_1_1, HEAD_root) {
sourcemeta::hydra::http::Request request{BASE_URL};
request.method(sourcemeta::hydra::http::Method::HEAD);
sourcemeta::hydra::http::Response response{request.send().get()};
EXPECT_EQ(response.status(), sourcemeta::hydra::http::Status::OK);
EXPECT_EQ(body(response), "RECEIVED HEAD /");
}

TEST(HTTP_Request_1_1, POST_root) {
sourcemeta::hydra::http::Request request{BASE_URL};
request.method(sourcemeta::hydra::http::Method::POST);
sourcemeta::hydra::http::Response response{request.send().get()};
EXPECT_EQ(response.status(), sourcemeta::hydra::http::Status::OK);
EXPECT_EQ(body(response), "RECEIVED POST /");
}

TEST(HTTP_Request_1_1, PUT_root) {
sourcemeta::hydra::http::Request request{BASE_URL};
request.method(sourcemeta::hydra::http::Method::PUT);
sourcemeta::hydra::http::Response response{request.send().get()};
EXPECT_EQ(response.status(), sourcemeta::hydra::http::Status::OK);
EXPECT_EQ(body(response), "RECEIVED PUT /");
}

TEST(HTTP_Request_1_1, DELETE_root) {
sourcemeta::hydra::http::Request request{BASE_URL};
request.method(sourcemeta::hydra::http::Method::DELETE);
sourcemeta::hydra::http::Response response{request.send().get()};
EXPECT_EQ(response.status(), sourcemeta::hydra::http::Status::OK);
EXPECT_EQ(body(response), "RECEIVED DELETE /");
}

TEST(HTTP_Request_1_1, CONNECT_root) {
sourcemeta::hydra::http::Request request{BASE_URL};
request.method(sourcemeta::hydra::http::Method::CONNECT);
sourcemeta::hydra::http::Response response{request.send().get()};
EXPECT_EQ(response.status(), sourcemeta::hydra::http::Status::OK);
EXPECT_EQ(body(response), "RECEIVED CONNECT /");
}

TEST(HTTP_Request_1_1, OPTIONS_root) {
sourcemeta::hydra::http::Request request{BASE_URL};
request.method(sourcemeta::hydra::http::Method::OPTIONS);
sourcemeta::hydra::http::Response response{request.send().get()};
EXPECT_EQ(response.status(), sourcemeta::hydra::http::Status::OK);
EXPECT_EQ(body(response), "RECEIVED OPTIONS /");
}

TEST(HTTP_Request_1_1, TRACE_root) {
sourcemeta::hydra::http::Request request{BASE_URL};
request.method(sourcemeta::hydra::http::Method::TRACE);
sourcemeta::hydra::http::Response response{request.send().get()};
EXPECT_EQ(response.status(), sourcemeta::hydra::http::Status::OK);
EXPECT_EQ(body(response), "RECEIVED TRACE /");
}

TEST(HTTP_Request_1_1, PATCH_root) {
sourcemeta::hydra::http::Request request{BASE_URL};
request.method(sourcemeta::hydra::http::Method::PATCH);
sourcemeta::hydra::http::Response response{request.send().get()};
EXPECT_EQ(response.status(), sourcemeta::hydra::http::Status::OK);
EXPECT_EQ(body(response), "RECEIVED PATCH /");
}
23 changes: 8 additions & 15 deletions test/http/stub.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,13 @@
const http = require('http');
const PORT = 9999;

const server = http.createServer((req, res) => {
// Set the response header to indicate JSON content
res.setHeader('Content-Type', 'application/json');

// Define a simple JSON response
const jsonResponse = {
message: 'Hello, JSON World!',
timestamp: new Date().toISOString(),
};
http.createServer((request, response) => {
for (const [key, value] of Object.entries(request.headers)) {
response.setHeader(`X-${key}`, value);
}

// Send the JSON response
res.end(JSON.stringify(jsonResponse));
});

const PORT = 9999;
server.listen(PORT, () => {
response.setHeader('Content-Type', 'text/plain');
response.end(`RECEIVED ${request.method} ${request.url}`);
}).listen(PORT, () => {
console.log(`Server is listening on port ${PORT}`);
});

0 comments on commit f5a95e0

Please sign in to comment.