Skip to content

Commit

Permalink
Tests: resolve HTTP Proxy unit-test TODOs
Browse files Browse the repository at this point in the history
  • Loading branch information
coneiric committed Mar 19, 2018
1 parent dee8b7a commit 19f755f
Showing 1 changed file with 63 additions and 34 deletions.
97 changes: 63 additions & 34 deletions tests/unit_tests/client/proxy/http.cc
Original file line number Diff line number Diff line change
Expand Up @@ -40,55 +40,81 @@ struct HTTPProxyRequestFixture
class HTTPMessage
{
public:
HTTPMessage() : m_Request("") {};

explicit HTTPMessage(const std::string& request) : m_Request(request)
{
m_Request.append("GET " + request + " HTTP/1.1\r\n\r\n");
// TODO(unassigned): message class should have private handlers. This would be useful within its ctor.
if (!m_Message.HandleData(m_Request))
throw std::runtime_error("HTTPMessage: invalid request");
HandleData();
}

bool HandleData(const std::string& request)
{
return m_Message.HandleData(request);
}

bool ExtractIncomingRequest()
{
return m_Message.ExtractIncomingRequest();
}

bool HandleJumpService()
{
return m_Message.HandleJumpService();
}

// TODO(unassigned): message API needs a proper interface
kovri::client::HTTPMessage& get()
bool CreateHTTPRequest()
{
return m_Message;
return m_Message.CreateHTTPRequest();
}

private:
void HandleData()
{
if (!m_Message.HandleData(m_Request))
throw std::runtime_error("HTTPMessage: invalid request");
}

std::string m_Request;
// TODO(unassigned): message API needs a proper ctor
// TODO(oneiric): message API needs a proper ctor
kovri::client::HTTPMessage m_Message;
};

// Valid web-safe destination
std::string const valid_dest = "0UVPqAA4xUSfPYPBca24h8fdokhwcJZ-5OsBYvK7byXtXT~fOV2pExi8vrkgarGTNDfJbB2KCsdVS3V7qwtTvoCGYyklcDBlJsWMj7H763hEz5rt9SzLkcpwhOjXL1UB-QW8KxM30t-ZOfPc6OiJ1QpnE6Bo5OUm6jPurQGXdWCAPio5Z-YnRL46n0IHWOQPYYSSt-S75rMIKbZbEMDraRvSzYAphUaHfvtWr2rCSPkKh3EbrOiBYiAP2oWvAQCsjouPgVBbiAezHedM2gXzkgIyCV2kGOOcHhiihd~7fWwJOloH-gO78QkmCuY-3kp3633v3MB-XNKWnATZOuf2syWVBZbTnOXsWf41tu6a33HOuNsMxAOUrwbu7Q-EITwNlKN6~yZm4RKsJUsBGfVtKl8PBMak3flQAg95oV0OBDGuizIQ9vREOWvPGlQCAXZzEg~cUNbfBQAEAAcAAA%3D%3D";
std::string const valid_dest = "3VzGaQQXwzN1iAwaPI17RK~gUqKqMH6fI2dkkGBwdayAPAdiZMyk1KGoTq~q1~HBraPZnz9mZJlzf6WVGCkUmUV3SBjBEbrdL9ud0fArq3P1~Ui9ViR9B7m5EG8smAnFvKZdqS-cnmHploUfIOefoQe0ecM7YYHErZsn3kL-WtvlfoDiSth-edIBpWxeHfmXSKoHSGSJ2snl5p9hxh30KmKj9AB0d4En-jcD83Ep3jsSvtPoQl7tSsh575~q0JJLsqGqm2sR9w4nZr7O58cg-21A2tlZeldM287uoTMb9eHWnYuozUGzzWOXvqg0UxPQSTfwh7YEhx0aRTXT2OFpr84XPoH2M6xIXfEMkFtJEJ-XlM-ILUZkg3kuBEFN7n4mBK~8L0Ht1QCq8L3~y7YnN61sxC0E9ZdyEOoC~nFJxndri9s9NzgZPo5eo6DsZXweOrTAIVQgKFUozL7WXKMlgqBZ5Nl3ijD6MGCIy0fWYHGLJ4jDBY7wrcfynVXFGm4EBQAEAAcAAA%3D%3D";
};

BOOST_AUTO_TEST_SUITE(HTTPMessageHeader)
BOOST_FIXTURE_TEST_SUITE(HTTPMessageHeader, HTTPProxyRequestFixture)

BOOST_AUTO_TEST_CASE(Short)
{
kovri::client::HTTPMessage tmp;
BOOST_CHECK(!tmp.HandleData("GET kovri.i2p HTTP/1.1"));
HTTPMessage message;
BOOST_CHECK(!message.HandleData("GET kovri.i2p HTTP/1.1"));
}

BOOST_AUTO_TEST_CASE(MissingRequest)
{
kovri::client::HTTPMessage tmp;
BOOST_CHECK(!tmp.HandleData("GET HTTP/1.1"));
HTTPMessage message;
BOOST_CHECK(!message.HandleData("GET HTTP/1.1"));
}

BOOST_AUTO_TEST_CASE(MissingHeaders)
{
kovri::client::HTTPMessage tmp;
BOOST_CHECK(!tmp.HandleData("\r\n"));
HTTPMessage message;
BOOST_CHECK(!message.HandleData("\r\n"));
}

BOOST_AUTO_TEST_CASE(Valid)
{
kovri::client::HTTPMessage tmp;
BOOST_CHECK(
tmp.HandleData("GET kovri.i2p HTTP/1.1\r\nUser-Agent: dummy\r\n\r\n"));
HTTPMessage message;
BOOST_CHECK(message.HandleData("GET kovri.i2p HTTP/1.1\r\nUser-Agent: dummy\r\n\r\n"));
}

BOOST_AUTO_TEST_CASE(InvalidHTTP)
{
HTTPMessage message;
BOOST_CHECK(message.HandleData("GET kovri.i2p HTTP/1.9\r\n\r\n"));
BOOST_CHECK(!message.ExtractIncomingRequest());
}

BOOST_AUTO_TEST_SUITE_END()
Expand All @@ -107,7 +133,7 @@ BOOST_AUTO_TEST_CASE(Valid)
BOOST_CHECK_NO_THROW(HTTPMessage message(request));

HTTPMessage message(request);
BOOST_CHECK(message.get().HandleJumpService());
BOOST_CHECK(message.HandleJumpService());
}

BOOST_AUTO_TEST_CASE(WithURIQuery)
Expand All @@ -117,7 +143,9 @@ BOOST_AUTO_TEST_CASE(WithURIQuery)
BOOST_CHECK_NO_THROW(HTTPMessage message(request));

HTTPMessage message(request);
BOOST_CHECK(message.get().HandleJumpService());
// Jump service only supports one query parameter
BOOST_CHECK(!message.HandleJumpService());
BOOST_CHECK(message.CreateHTTPRequest());
}

BOOST_AUTO_TEST_CASE(InvalidDest)
Expand All @@ -128,8 +156,7 @@ BOOST_AUTO_TEST_CASE(InvalidDest)
BOOST_CHECK_NO_THROW(HTTPMessage message(request));

HTTPMessage message(request);
// TODO(unassigned): if this is an invalid test-case, then check false
BOOST_CHECK(message.get().HandleJumpService());
BOOST_CHECK(!message.HandleJumpService());
}

BOOST_AUTO_TEST_CASE(InvalidDestWithURIQuery)
Expand All @@ -140,8 +167,7 @@ BOOST_AUTO_TEST_CASE(InvalidDestWithURIQuery)
BOOST_CHECK_NO_THROW(HTTPMessage message(request));

HTTPMessage message(request);
// TODO(unassigned): if this is an invalid test-case, then check false
BOOST_CHECK(message.get().HandleJumpService());
BOOST_CHECK(!message.HandleJumpService());
}

BOOST_AUTO_TEST_CASE(InvalidHelper)
Expand All @@ -150,7 +176,7 @@ BOOST_AUTO_TEST_CASE(InvalidHelper)
BOOST_CHECK_NO_THROW(HTTPMessage message(request));

HTTPMessage message(request);
BOOST_CHECK(!message.get().HandleJumpService());
BOOST_CHECK(!message.HandleJumpService());
}

BOOST_AUTO_TEST_CASE(InvalidHelperWithURIQuery)
Expand All @@ -159,7 +185,7 @@ BOOST_AUTO_TEST_CASE(InvalidHelperWithURIQuery)
BOOST_CHECK_NO_THROW(HTTPMessage message(request));

HTTPMessage message(request);
BOOST_CHECK(!message.get().HandleJumpService());
BOOST_CHECK(!message.HandleJumpService());
}

BOOST_AUTO_TEST_CASE(NoHelper)
Expand All @@ -168,7 +194,7 @@ BOOST_AUTO_TEST_CASE(NoHelper)
BOOST_CHECK_NO_THROW(HTTPMessage message(request));

HTTPMessage message(request);
BOOST_CHECK(!message.get().HandleJumpService());
BOOST_CHECK(!message.HandleJumpService());
}

BOOST_AUTO_TEST_CASE(NoDest)
Expand All @@ -177,7 +203,7 @@ BOOST_AUTO_TEST_CASE(NoDest)
BOOST_CHECK_NO_THROW(HTTPMessage message(request));

HTTPMessage message(request);
BOOST_CHECK(!message.get().HandleJumpService());
BOOST_CHECK(!message.HandleJumpService());
}

BOOST_AUTO_TEST_SUITE_END()
Expand All @@ -196,17 +222,20 @@ BOOST_AUTO_TEST_CASE(ValidHelper)
BOOST_CHECK_NO_THROW(HTTPMessage message(request));

HTTPMessage message(request);
BOOST_CHECK(message.get().CreateHTTPRequest(false));
BOOST_CHECK(message.CreateHTTPRequest());
}

BOOST_AUTO_TEST_CASE(InvalidHelper)
BOOST_AUTO_TEST_CASE(ValidRequestNoJumpService)
{
std::string const request("stats.i2p?invalid=" + valid_dest);
std::string const request("stats.i2p");
BOOST_CHECK_NO_THROW(HTTPMessage message(request));

// Request is not a valid jump service request
HTTPMessage message(request);
// TODO(unassigned): if this is an invalid test-case, then check false
BOOST_CHECK(message.get().CreateHTTPRequest(false));
BOOST_CHECK(!message.HandleJumpService());

// Request is still a valid HTTP proxy request
BOOST_CHECK(message.CreateHTTPRequest());
}

BOOST_AUTO_TEST_CASE(NoDest)
Expand All @@ -215,7 +244,7 @@ BOOST_AUTO_TEST_CASE(NoDest)
BOOST_CHECK_NO_THROW(HTTPMessage message(request));

HTTPMessage message(request);
BOOST_CHECK(!message.get().CreateHTTPRequest(false));
BOOST_CHECK(!message.HandleJumpService());
}

BOOST_AUTO_TEST_SUITE_END()

0 comments on commit 19f755f

Please sign in to comment.