summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--icespider/unittests/testApp.cpp96
1 files changed, 81 insertions, 15 deletions
diff --git a/icespider/unittests/testApp.cpp b/icespider/unittests/testApp.cpp
index fb79b0a..9b9155f 100644
--- a/icespider/unittests/testApp.cpp
+++ b/icespider/unittests/testApp.cpp
@@ -11,6 +11,10 @@
#include <boost/algorithm/string/classification.hpp>
#include <boost/filesystem/operations.hpp>
#include <definedDirs.h>
+#include <slicer/slicer.h>
+#include <xml/serializer.h>
+#include <json/serializer.h>
+#include <libxml++/parsers/domparser.h>
using namespace IceSpider;
@@ -183,41 +187,72 @@ class TestApp : public Core {
Ice::ObjectAdapterPtr adp;
};
+typedef std::map<std::string, std::string> Headers;
+Headers
+parseHeaders(std::istream & strm)
+{
+ Headers h;
+ while (true) {
+ char buf[BUFSIZ], n[BUFSIZ], v[BUFSIZ];
+ strm.getline(buf, BUFSIZ);
+ if (sscanf(buf, "%[^:]: %[^\r]", n, v) != 2) {
+ break;
+ }
+ h[n] = v;
+ }
+ return h;
+}
+
BOOST_FIXTURE_TEST_SUITE(ta, TestApp);
BOOST_AUTO_TEST_CASE( testCallIndex )
{
TestRequest requestGetIndex(this, HttpMethod::GET, "/");
process(&requestGetIndex);
- BOOST_REQUIRE_EQUAL(requestGetIndex.output.str(), "Status: 200 OK\r\n\r\n{\"value\":\"index\"}");
+ auto h = parseHeaders(requestGetIndex.output);
+ BOOST_REQUIRE_EQUAL(h["Status"], "200 OK");
+ auto v = Slicer::DeserializeAny<Slicer::JsonStreamDeserializer, TestIceSpider::SomeModelPtr>(requestGetIndex.output);
+ BOOST_REQUIRE_EQUAL(v->value, "index");
}
BOOST_AUTO_TEST_CASE( testCallViewSomething1234 )
{
TestRequest requestGetItem(this, HttpMethod::GET, "/view/something/1234");
process(&requestGetItem);
- BOOST_REQUIRE_EQUAL(requestGetItem.output.str(), "Status: 200 OK\r\n\r\n{\"value\":\"withParams\"}");
+ auto h = parseHeaders(requestGetItem.output);
+ BOOST_REQUIRE_EQUAL(h["Status"], "200 OK");
+ auto v = Slicer::DeserializeAny<Slicer::JsonStreamDeserializer, TestIceSpider::SomeModelPtr>(requestGetItem.output);
+ BOOST_REQUIRE_EQUAL(v->value, "withParams");
}
BOOST_AUTO_TEST_CASE( testCallViewSomething1234_ )
{
TestRequest requestGetItemGiven(this, HttpMethod::GET, "/item/something/1234");
process(&requestGetItemGiven);
- BOOST_REQUIRE_EQUAL(requestGetItemGiven.output.str(), "Status: 200 OK\r\n\r\n{\"value\":\"withParams\"}");
+ auto h = parseHeaders(requestGetItemGiven.output);
+ BOOST_REQUIRE_EQUAL(h["Status"], "200 OK");
+ auto v = Slicer::DeserializeAny<Slicer::JsonStreamDeserializer, TestIceSpider::SomeModelPtr>(requestGetItemGiven.output);
+ BOOST_REQUIRE_EQUAL(v->value, "withParams");
}
BOOST_AUTO_TEST_CASE( testCallViewSomething )
{
TestRequest requestGetItemDefault(this, HttpMethod::GET, "/item/something");
process(&requestGetItemDefault);
- BOOST_REQUIRE_EQUAL(requestGetItemDefault.output.str(), "Status: 200 OK\r\n\r\n{\"value\":\"withParams\"}");
+ auto h = parseHeaders(requestGetItemDefault.output);
+ BOOST_REQUIRE_EQUAL(h["Status"], "200 OK");
+ auto v = Slicer::DeserializeAny<Slicer::JsonStreamDeserializer, TestIceSpider::SomeModelPtr>(requestGetItemDefault.output);
+ BOOST_REQUIRE_EQUAL(v->value, "withParams");
}
BOOST_AUTO_TEST_CASE( testCallDeleteSomeValue )
{
TestRequest requestDeleteItem(this, HttpMethod::DELETE, "/some value");
process(&requestDeleteItem);
- BOOST_REQUIRE_EQUAL(requestDeleteItem.output.str(), "Status: 200 OK\r\n\r\n");
+ auto h = parseHeaders(requestDeleteItem.output);
+ BOOST_REQUIRE_EQUAL(h["Status"], "200 OK");
+ requestDeleteItem.output.get();
+ BOOST_REQUIRE(requestDeleteItem.output.eof());
}
BOOST_AUTO_TEST_CASE( testCallPost1234 )
@@ -226,7 +261,10 @@ BOOST_AUTO_TEST_CASE( testCallPost1234 )
requestUpdateItem.hdr["Content-Type"] = "application/json";
requestUpdateItem.input << "{\"value\": \"some value\"}";
process(&requestUpdateItem);
- BOOST_REQUIRE_EQUAL(requestUpdateItem.output.str(), "Status: 200 OK\r\n\r\n");
+ auto h = parseHeaders(requestUpdateItem.output);
+ BOOST_REQUIRE_EQUAL(h["Status"], "200 OK");
+ requestUpdateItem.output.get();
+ BOOST_REQUIRE(requestUpdateItem.output.eof());
}
BOOST_AUTO_TEST_CASE( testCallIndexAcceptJson )
@@ -234,7 +272,10 @@ BOOST_AUTO_TEST_CASE( testCallIndexAcceptJson )
TestRequest requestJson(this, HttpMethod::GET, "/");
requestJson.hdr["Accept"] = "application/json";
process(&requestJson);
- BOOST_REQUIRE_EQUAL(requestJson.output.str(), "Status: 200 OK\r\n\r\n{\"value\":\"index\"}");
+ auto h = parseHeaders(requestJson.output);
+ BOOST_REQUIRE_EQUAL(h["Status"], "200 OK");
+ auto v = Slicer::DeserializeAny<Slicer::JsonStreamDeserializer, TestIceSpider::SomeModelPtr>(requestJson.output);
+ BOOST_REQUIRE_EQUAL(v->value, "index");
}
BOOST_AUTO_TEST_CASE( testCallIndexAcceptAny )
@@ -242,7 +283,10 @@ BOOST_AUTO_TEST_CASE( testCallIndexAcceptAny )
TestRequest requestAnyAny(this, HttpMethod::GET, "/");
requestAnyAny.hdr["Accept"] = "*/*";
process(&requestAnyAny);
- BOOST_REQUIRE_EQUAL(requestAnyAny.output.str(), "Status: 200 OK\r\n\r\n{\"value\":\"index\"}");
+ auto h = parseHeaders(requestAnyAny.output);
+ BOOST_REQUIRE_EQUAL(h["Status"], "200 OK");
+ auto v = Slicer::DeserializeAny<Slicer::JsonStreamDeserializer, TestIceSpider::SomeModelPtr>(requestAnyAny.output);
+ BOOST_REQUIRE_EQUAL(v->value, "index");
}
BOOST_AUTO_TEST_CASE( testCallIndexAcceptApplicationAny )
@@ -250,7 +294,10 @@ BOOST_AUTO_TEST_CASE( testCallIndexAcceptApplicationAny )
TestRequest requestApplicationAny(this, HttpMethod::GET, "/");
requestApplicationAny.hdr["Accept"] = "application/*";
process(&requestApplicationAny);
- BOOST_REQUIRE_EQUAL(requestApplicationAny.output.str(), "Status: 200 OK\r\n\r\n{\"value\":\"index\"}");
+ auto h = parseHeaders(requestApplicationAny.output);
+ BOOST_REQUIRE_EQUAL(h["Status"], "200 OK");
+ auto v = Slicer::DeserializeAny<Slicer::JsonStreamDeserializer, TestIceSpider::SomeModelPtr>(requestApplicationAny.output);
+ BOOST_REQUIRE_EQUAL(v->value, "index");
}
BOOST_AUTO_TEST_CASE( testCallIndexAcceptXml )
@@ -258,7 +305,10 @@ BOOST_AUTO_TEST_CASE( testCallIndexAcceptXml )
TestRequest requestXml(this, HttpMethod::GET, "/");
requestXml.hdr["Accept"] = "application/xml";
process(&requestXml);
- BOOST_REQUIRE_EQUAL(requestXml.output.str(), "Status: 200 OK\r\n\r\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<SomeModel><value>index</value></SomeModel>\n");
+ auto h = parseHeaders(requestXml.output);
+ BOOST_REQUIRE_EQUAL(h["Status"], "200 OK");
+ auto v = Slicer::DeserializeAny<Slicer::XmlStreamDeserializer, TestIceSpider::SomeModelPtr>(requestXml.output);
+ BOOST_REQUIRE_EQUAL(v->value, "index");
}
BOOST_AUTO_TEST_CASE( testCallIndexAcceptTextHtml )
@@ -266,7 +316,11 @@ BOOST_AUTO_TEST_CASE( testCallIndexAcceptTextHtml )
TestRequest requestHtml(this, HttpMethod::GET, "/");
requestHtml.hdr["Accept"] = "text/html";
process(&requestHtml);
- BOOST_REQUIRE_EQUAL(requestHtml.output.str(), "Status: 200 OK\r\n\r\n<html><head><title>Some Model</title></head><body><p><b>value</b>: index</p></body></html>\n");
+ auto h = parseHeaders(requestHtml.output);
+ BOOST_REQUIRE_EQUAL(h["Status"], "200 OK");
+ xmlpp::DomParser d;
+ d.parse_stream(requestHtml.output);
+ BOOST_REQUIRE_EQUAL(d.get_document()->get_root_node()->get_name(), "html");
}
BOOST_AUTO_TEST_CASE( testCallViewSomethingAcceptHtml )
@@ -274,7 +328,10 @@ BOOST_AUTO_TEST_CASE( testCallViewSomethingAcceptHtml )
TestRequest requestHtml(this, HttpMethod::GET, "/view/something/1234");
requestHtml.hdr["Accept"] = "text/html";
process(&requestHtml);
- BOOST_REQUIRE_EQUAL(requestHtml.output.str(), "Status: 406 Unacceptable\r\n\r\n");
+ auto h = parseHeaders(requestHtml.output);
+ BOOST_REQUIRE_EQUAL(h["Status"], "406 Unacceptable");
+ requestHtml.output.get();
+ BOOST_REQUIRE(requestHtml.output.eof());
}
BOOST_AUTO_TEST_CASE( testCallIndexAcceptNotSupported )
@@ -282,7 +339,10 @@ BOOST_AUTO_TEST_CASE( testCallIndexAcceptNotSupported )
TestRequest requestBadAccept(this, HttpMethod::GET, "/");
requestBadAccept.hdr["Accept"] = "not/supported";
process(&requestBadAccept);
- BOOST_REQUIRE_EQUAL(requestBadAccept.output.str(), "Status: 406 Unacceptable\r\n\r\n");
+ auto h = parseHeaders(requestBadAccept.output);
+ BOOST_REQUIRE_EQUAL(h["Status"], "406 Unacceptable");
+ requestBadAccept.output.get();
+ BOOST_REQUIRE(requestBadAccept.output.eof());
}
BOOST_AUTO_TEST_CASE( testCallIndexComplexAccept )
@@ -290,14 +350,20 @@ BOOST_AUTO_TEST_CASE( testCallIndexComplexAccept )
TestRequest requestChoice(this, HttpMethod::GET, "/");
requestChoice.hdr["Accept"] = "something/special ; q = 20, application/json, application/xml;q=1.1";
process(&requestChoice);
- BOOST_REQUIRE_EQUAL(requestChoice.output.str(), "Status: 200 OK\r\n\r\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<SomeModel><value>index</value></SomeModel>\n");
+ auto h = parseHeaders(requestChoice.output);
+ BOOST_REQUIRE_EQUAL(h["Status"], "200 OK");
+ auto v = Slicer::DeserializeAny<Slicer::XmlStreamDeserializer, TestIceSpider::SomeModelPtr>(requestChoice.output);
+ BOOST_REQUIRE_EQUAL(v->value, "index");
}
BOOST_AUTO_TEST_CASE( testCall404 )
{
TestRequest requestGetIndex(this, HttpMethod::GET, "/404");
process(&requestGetIndex);
- BOOST_REQUIRE_EQUAL(requestGetIndex.output.str(), "Status: 404 Not found\r\n\r\n");
+ auto h = parseHeaders(requestGetIndex.output);
+ BOOST_REQUIRE_EQUAL(h["Status"], "404 Not found");
+ requestGetIndex.output.get();
+ BOOST_REQUIRE(requestGetIndex.output.eof());
}
BOOST_AUTO_TEST_SUITE_END();