Skip to content
Snippets Groups Projects
Commit 7c77c76f authored by Oz Linden's avatar Oz Linden
Browse files

merge fixes for http tests

parents d96d3d52 ce563795
No related branches found
No related tags found
No related merge requests found
......@@ -254,6 +254,14 @@ if (LL_TESTS)
"${CMAKE_CURRENT_SOURCE_DIR}/tests/test_llsdmessage_peer.py"
)
LL_ADD_INTEGRATION_TEST(
llhttpclient
"llhttpclient.cpp"
"${test_libs}"
${PYTHON_EXECUTABLE}
"${CMAKE_CURRENT_SOURCE_DIR}/tests/test_llsdmessage_peer.py"
)
LL_ADD_INTEGRATION_TEST(llavatarnamecache "" "${test_libs}")
LL_ADD_INTEGRATION_TEST(llhost "" "${test_libs}")
LL_ADD_INTEGRATION_TEST(llpartdata "" "${test_libs}")
......
/**
* @file llhttpclient_tut.cpp
* @file llhttpclient_test.cpp
* @brief Testing the HTTP client classes.
*
* $LicenseInfo:firstyear=2006&license=viewerlgpl$
......@@ -33,9 +33,6 @@
#include <tut/tut.hpp>
#include "linden_common.h"
// These are too slow on Windows to actually include in the build. JC
#if !LL_WINDOWS
#include "lltut.h"
#include "llhttpclient.h"
#include "llformat.h"
......@@ -46,6 +43,7 @@
#include "llsdhttpserver.h"
#include "lliohttpserver.h"
#include "lliosocket.h"
#include "stringize.h"
namespace tut
{
......@@ -83,7 +81,8 @@ namespace tut
struct HTTPClientTestData
{
public:
HTTPClientTestData()
HTTPClientTestData():
local_server(STRINGIZE("http://127.0.0.1:" << getenv("PORT") << "/"))
{
apr_pool_create(&mPool, NULL);
LLCurl::initClass(false);
......@@ -134,13 +133,14 @@ namespace tut
delete mServerPump;
mServerPump = NULL;
}
const std::string local_server;
private:
apr_pool_t* mPool;
LLPumpIO* mServerPump;
LLPumpIO* mClientPump;
protected:
void ensureStatusOK()
{
......@@ -257,7 +257,7 @@ namespace tut
template<> template<>
void HTTPClientTestObject::test<1>()
{
LLHTTPClient::get("http://www.google.com/", newResult());
LLHTTPClient::get(local_server, newResult());
runThePump();
ensureStatusOK();
ensure("result object wasn't destroyed", mResultDeleted);
......@@ -266,8 +266,8 @@ namespace tut
template<> template<>
void HTTPClientTestObject::test<2>()
{
skip("error test depends on dev's local ISP not supplying \"helpful\" search page");
LLHTTPClient::get("http://www.invalid", newResult());
// Please nobody listen on this particular port...
LLHTTPClient::get("http://127.0.0.1:7950", newResult());
runThePump();
ensureStatusError();
}
......@@ -344,18 +344,13 @@ namespace tut
// won't ever let it run. Instead get from a known LLSD
// source and compare results with the non-blocking get which
// is tested against the mini server earlier.
skip("secondlife.com is not reliable enough for unit tests.");
LLSD expected;
LLHTTPClient::get("http://secondlife.com/xmlhttp/homepage.php", newResult());
LLHTTPClient::get(local_server, newResult());
runThePump();
ensureStatusOK();
expected = getResult();
LLSD expected = getResult();
LLSD result;
result = LLHTTPClient::blockingGet("http://secondlife.com/xmlhttp/homepage.php");
result = LLHTTPClient::blockingGet(local_server);
LLSD body = result["body"];
ensure_equals("echoed result matches", body.size(), expected.size());
}
......@@ -364,20 +359,18 @@ namespace tut
{
// This is testing for the presence of the Header in the returned results
// from an HTTP::get call.
LLHTTPClient::get("http://www.google.com/", newResult());
LLHTTPClient::get(local_server, newResult());
runThePump();
ensureStatusOK();
LLSD header = getHeader();
ensure_equals("got a header", header.emptyMap().asBoolean(), FALSE);
ensure("got a header", ! header.emptyMap().asBoolean());
}
template<> template<>
void HTTPClientTestObject::test<9>()
{
LLHTTPClient::head("http://www.google.com/", newResult());
LLHTTPClient::head(local_server, newResult());
runThePump();
ensureStatusOK();
ensure("result object wasn't destroyed", mResultDeleted);
}
}
#endif // !LL_WINDOWS
......@@ -143,7 +143,7 @@ namespace tut
httpPump.post(request);
ensure("got response", netio.pump());
ensure("success response", success);
ensure_equals(result.asString(), "success");
ensure_equals(result["reply"].asString(), "success");
body["status"] = 499;
body["reason"] = "custom error message";
......
......@@ -78,25 +78,32 @@ def read_xml(self):
## debug("root node tag %s", tree.getroot().tag)
## return llsd.to_python(tree.getroot())
def do_GET(self):
def do_HEAD(self):
self.do_GET(withdata=False)
def do_GET(self, withdata=True):
# Of course, don't attempt to read data.
self.answer(dict(reply="success", status=500,
reason="Your GET operation requested failure"))
data = dict(reply="success", body="avatar", random=17)
self.answer(data, withdata=withdata)
def do_POST(self):
# Read the provided POST data.
self.answer(self.read_xml())
def answer(self, data):
def answer(self, data, withdata=True):
debug("%s.answer(%s): self.path = %r", self.__class__.__name__, data, self.path)
if "fail" not in self.path:
response = llsd.format_xml(data.get("reply", llsd.LLSD("success")))
data = data.copy() # we're going to modify
# Ensure there's a "reply" key in data, even if there wasn't before
data["reply"] = data.get("reply", llsd.LLSD("success"))
response = llsd.format_xml(data)
debug("success: %s", response)
self.send_response(200)
self.send_header("Content-type", "application/llsd+xml")
self.send_header("Content-Length", str(len(response)))
self.end_headers()
self.wfile.write(response)
if withdata:
self.wfile.write(response)
else: # fail requested
status = data.get("status", 500)
# self.responses maps an int status to a (short, long) pair of
......
......@@ -156,7 +156,7 @@ namespace tut
regionPump.post(request);
ensure("got response", netio.pump());
ensure("success response", success);
ensure_equals(result.asString(), "success");
ensure_equals(result["reply"].asString(), "success");
body["status"] = 499;
body["reason"] = "custom error message";
......
......@@ -37,7 +37,6 @@ set(test_SOURCE_FILES
lldoubledispatch_tut.cpp
llevents_tut.cpp
llhttpdate_tut.cpp
llhttpclient_tut.cpp
llhttpnode_tut.cpp
lliohttpserver_tut.cpp
llmessageconfig_tut.cpp
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment