diff options
| -rw-r--r-- | icespider/unittests/testApp.cpp | 96 | 
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(); | 
