You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

110 lines
3.3 KiB

#include <Catch/fakeit.hpp>
#include <fakeserver.hpp>
#include <session.hpp>
using namespace std;
class TestTorrent {};
class TestRequest {
std::stringstream content;
};
class TestResponse : public std::stringstream {
public:
std::string buffer;
auto string() {
buffer = str();
return buffer;
}
auto message() {
if (buffer.empty())
string();
auto msg = buffer.substr(13, buffer.find('\r') - 13);
return msg;
}
auto code() {
if (buffer.empty())
string();
return buffer.substr(9, 3);
}
};
class TestSessionSettings {
public:
const int download_rate_limit = 1;
const int upload_rate_limit = 2;
int get_int(int type) const {
return 0;
}
};
class TestTorrentSession {
public:
bool valid = false;
bool paused = false;
bool dht_running = true;
bool is_valid() {
return valid;
}
TestSessionSettings get_settings() {
return TestSessionSettings();
}
bool is_paused() {
return paused;
}
int listen_port() {
return 0;
}
int is_dht_running() {
return dht_running;
}
std::vector<TestTorrent> get_torrents() const {
return std::vector<TestTorrent>();
}
};
const std::string service_unavailable_json = "HTTP/1.1 503 Service Unavailable\r\nContent-Type: application/json\r\nContent-Length: 43\r\n\r\n{\"code\":503,\"status\":\"Service Unavailable\"}";
const std::string ok_json = "HTTP/1.1 200 OK\r\nContent-Type: application/json\r\nContent-Length: 82\r\n\r\n{\"dht_enabled\":1,\"down_limit\":0,\"paused\":false,\"port\":0,\"torrents\":0,\"up_limit\":0}";
const std::string ok_json_paused = "HTTP/1.1 200 OK\r\nContent-Type: application/json\r\nContent-Length: 81\r\n\r\n{\"dht_enabled\":1,\"down_limit\":0,\"paused\":true,\"port\":0,\"torrents\":0,\"up_limit\":0}";
SCENARIO("We recive a GET request to the /session resource") {
auto torrent_session = TestTorrentSession();
auto response = std::make_shared<TestResponse>();
GIVEN("the session is invalid") {
auto request = std::make_shared<TestResponse>();
tr::session::get(torrent_session, response, request);
THEN("the server should reply with service unavailable") {
REQUIRE(response->string() == service_unavailable_json);
REQUIRE(response->code() == "503");
REQUIRE(response->message() == "Service Unavailable");
}
}
GIVEN("the session is valid") {
auto request = std::make_shared<TestResponse>();
torrent_session.valid = true;
tr::session::get(torrent_session, response, request);
THEN("the server should reply with status 200 OK") {
REQUIRE(response->string() == ok_json);
REQUIRE(response->code() == "200");
REQUIRE(response->message() == "OK");
}
}
GIVEN("the session is paused") {
auto request = std::make_shared<TestResponse>();
torrent_session.valid = true;
torrent_session.paused = true;
tr::session::get(torrent_session, response, request);
THEN("the server should reply with service unavailable") {
REQUIRE(response->str() == ok_json);
}
}
GIVEN("the session is valid") {
auto request = std::make_shared<TestResponse>();
torrent_session.valid = true;
torrent_session.paused = true;
tr::session::get(torrent_session, response, request);
THEN("the server should reply with service unavailable") {
REQUIRE(response->str() == ok_json_paused);
}
}
}