summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2016-12-23 15:19:25 +0000
committerDan Goodliffe <dan@randomdan.homeip.net>2016-12-27 17:16:14 +0000
commitd124dec32e1b02e4e936272e00babfaf860443d4 (patch)
tree92d98b35162f1c63ecfa6dd6977cbd52a33c97bd
parentBe explicit about -z,lazy as default linking is -z,now when hardened profile ... (diff)
downloadicespider-d124dec32e1b02e4e936272e00babfaf860443d4.tar.bz2
icespider-d124dec32e1b02e4e936272e00babfaf860443d4.tar.xz
icespider-d124dec32e1b02e4e936272e00babfaf860443d4.zip
Refactor to make available some classes for testing
-rw-r--r--icespider/Jamfile.jam2
-rw-r--r--icespider/core/core.cpp54
-rw-r--r--icespider/core/core.h15
-rw-r--r--icespider/fcgi/cgiCore.cpp51
-rw-r--r--icespider/fcgi/cgiCore.h21
-rw-r--r--icespider/fcgi/main.cpp4
-rw-r--r--icespider/testing/Jamfile.jam8
-rw-r--r--icespider/testing/testRequest.cpp95
-rw-r--r--icespider/testing/testRequest.h43
-rw-r--r--icespider/unittests/Jamfile.jam4
-rw-r--r--icespider/unittests/testApp.cpp159
-rw-r--r--icespider/unittests/testFcgi.cpp4
-rw-r--r--icespider/unittests/testFileSessions.cpp4
13 files changed, 250 insertions, 214 deletions
diff --git a/icespider/Jamfile.jam b/icespider/Jamfile.jam
index 30efa98..02644a2 100644
--- a/icespider/Jamfile.jam
+++ b/icespider/Jamfile.jam
@@ -6,6 +6,7 @@ build-project unittests ;
build-project fcgi ;
build-project xslt ;
build-project fileSessions ;
+build-project testing ;
lib Ice ;
lib IceUtil ;
@@ -19,6 +20,7 @@ package.install install : :
fcgi//icespider-fcgi
xslt//icespider-xslt
fileSessions//icespider-filesessions
+ testing//icespider-testing
:
[ glob-tree *.h : fcgi unittests compile ]
;
diff --git a/icespider/core/core.cpp b/icespider/core/core.cpp
index 117c869..9d187c9 100644
--- a/icespider/core/core.cpp
+++ b/icespider/core/core.cpp
@@ -76,12 +76,6 @@ namespace IceSpider {
}
}
- const IceSpider::IRouteHandler *
- Core::findRoute(const IceSpider::IHttpRequest *) const
- {
- throw Http404_NotFound();
- }
-
Ice::ObjectPrx
Core::getProxy(const char * type) const
{
@@ -102,5 +96,53 @@ namespace IceSpider {
free(buf);
return i;
}
+
+ static
+ bool
+ operator/=(const PathElements & pathparts, const IRouteHandler * r)
+ {
+ auto rpi = r->parts.begin();
+ for (auto ppi = pathparts.begin(); ppi != pathparts.end(); ++ppi, ++rpi) {
+ if (!(*rpi)->matches(*ppi)) return false;
+ }
+ return true;
+ }
+
+ CoreWithDefaultRouter::CoreWithDefaultRouter(const Ice::StringSeq & opts) :
+ Core(opts)
+ {
+ for (const auto & r : allRoutes) {
+ if (routes.size() <= r->pathElementCount()) {
+ routes.resize(r->pathElementCount() + 1);
+ }
+ auto & lroutes = routes[r->pathElementCount()];
+ lroutes.push_back(r);
+ }
+ }
+
+ const IceSpider::IRouteHandler *
+ CoreWithDefaultRouter::findRoute(const IceSpider::IHttpRequest * request) const
+ {
+ const auto & pathparts = request->getRequestPath();
+ const auto method = request->getRequestMethod();
+ if (pathparts.size() >= routes.size()) {
+ throw Http404_NotFound();
+ }
+ const auto & routeSet = routes[pathparts.size()];
+ bool match = false;
+ for (const auto & r : routeSet) {
+ if (pathparts /= r) {
+ if (r->method == method) {
+ return r;
+ }
+ match = true;
+ }
+ }
+ if (!match) {
+ throw Http404_NotFound();
+ }
+ throw Http405_MethodNotAllowed();
+ }
+
}
diff --git a/icespider/core/core.h b/icespider/core/core.h
index d6aa173..b1ea594 100644
--- a/icespider/core/core.h
+++ b/icespider/core/core.h
@@ -16,7 +16,7 @@ namespace IceSpider {
Core(const Ice::StringSeq & = {});
~Core();
- virtual const IRouteHandler * findRoute(const IHttpRequest *) const;
+ virtual const IRouteHandler * findRoute(const IHttpRequest *) const = 0;
void process(IHttpRequest *, const IRouteHandler * = nullptr) const;
Ice::ObjectPrx getProxy(const char * type) const;
@@ -33,6 +33,19 @@ namespace IceSpider {
static const boost::filesystem::path defaultConfig;
};
+
+ class DLL_PUBLIC CoreWithDefaultRouter : public Core {
+ public:
+ typedef std::vector<const IRouteHandler *> LengthRoutes;
+ typedef std::vector<LengthRoutes> Routes;
+
+ CoreWithDefaultRouter(const Ice::StringSeq & = {});
+
+ const IRouteHandler * findRoute(const IHttpRequest *) const override;
+
+ Routes routes;
+ };
+
class DLL_PUBLIC Plugin : public virtual Ice::Object {
};
typedef AdHoc::Factory<Plugin, Ice::CommunicatorPtr, Ice::PropertiesPtr> PluginFactory;
diff --git a/icespider/fcgi/cgiCore.cpp b/icespider/fcgi/cgiCore.cpp
deleted file mode 100644
index 0adefab..0000000
--- a/icespider/fcgi/cgiCore.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-#include "cgiCore.h"
-
-namespace IceSpider {
- static
- bool
- operator/=(const PathElements & pathparts, const IRouteHandler * r)
- {
- auto rpi = r->parts.begin();
- for (auto ppi = pathparts.begin(); ppi != pathparts.end(); ++ppi, ++rpi) {
- if (!(*rpi)->matches(*ppi)) return false;
- }
- return true;
- }
-
- CgiCore::CgiCore(const Ice::StringSeq & opts) :
- Core(opts)
- {
- for (const auto & r : allRoutes) {
- if (routes.size() <= r->pathElementCount()) {
- routes.resize(r->pathElementCount() + 1);
- }
- auto & lroutes = routes[r->pathElementCount()];
- lroutes.push_back(r);
- }
- }
-
- const IRouteHandler *
- CgiCore::findRoute(const IHttpRequest * request) const
- {
- const auto & pathparts = request->getRequestPath();
- const auto method = request->getRequestMethod();
- if (pathparts.size() >= routes.size()) {
- throw Http404_NotFound();
- }
- const auto & routeSet = routes[pathparts.size()];
- bool match = false;
- for (const auto & r : routeSet) {
- if (pathparts /= r) {
- if (r->method == method) {
- return r;
- }
- match = true;
- }
- }
- if (!match) {
- throw Http404_NotFound();
- }
- throw Http405_MethodNotAllowed();
- }
-}
-
diff --git a/icespider/fcgi/cgiCore.h b/icespider/fcgi/cgiCore.h
deleted file mode 100644
index 1915a4d..0000000
--- a/icespider/fcgi/cgiCore.h
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef ICESPIDER_CGI_CGICORE_H
-#define ICESPIDER_CGI_CGICORE_H
-
-#include <core.h>
-
-namespace IceSpider {
- class CgiCore : public Core {
- public:
- typedef std::vector<const IRouteHandler *> LengthRoutes;
- typedef std::vector<LengthRoutes> Routes;
-
- CgiCore(const Ice::StringSeq & = {});
-
- const IRouteHandler * findRoute(const IHttpRequest *) const override;
-
- Routes routes;
- };
-}
-
-#endif
-
diff --git a/icespider/fcgi/main.cpp b/icespider/fcgi/main.cpp
index 4149cb2..7191310 100644
--- a/icespider/fcgi/main.cpp
+++ b/icespider/fcgi/main.cpp
@@ -1,7 +1,7 @@
#include <visibility.h>
#include "fcgiRequest.h"
#include "cgiRequest.h"
-#include "cgiCore.h"
+#include "core.h"
using namespace IceSpider;
@@ -9,7 +9,7 @@ DLL_PUBLIC
int
main(int argc, char ** argv, char ** env)
{
- CgiCore core;
+ CoreWithDefaultRouter core;
if (!FCGX_IsCGI()) {
FCGX_Request request;
diff --git a/icespider/testing/Jamfile.jam b/icespider/testing/Jamfile.jam
new file mode 100644
index 0000000..19d1df2
--- /dev/null
+++ b/icespider/testing/Jamfile.jam
@@ -0,0 +1,8 @@
+lib icespider-testing :
+ [ glob-tree *.cpp : bin ]
+ :
+ <library>..//core
+ : :
+ <library>..//core
+ <include>.
+ ;
diff --git a/icespider/testing/testRequest.cpp b/icespider/testing/testRequest.cpp
new file mode 100644
index 0000000..1645445
--- /dev/null
+++ b/icespider/testing/testRequest.cpp
@@ -0,0 +1,95 @@
+#include "testRequest.h"
+#include <boost/algorithm/string/split.hpp>
+#include <boost/algorithm/string/classification.hpp>
+
+namespace IceSpider {
+ TestRequest::TestRequest(const Core * c, HttpMethod m, const std::string & p) :
+ IHttpRequest(c),
+ method(m)
+ {
+ namespace ba = boost::algorithm;
+ auto path = p.substr(1);
+ if (!path.empty()) {
+ ba::split(url, path, ba::is_any_of("/"), ba::token_compress_off);
+ }
+ }
+
+ const std::vector<std::string> &
+ TestRequest::getRequestPath() const
+ {
+ return url;
+ }
+
+ HttpMethod
+ TestRequest::getRequestMethod() const
+ {
+ return method;
+ }
+
+ IceUtil::Optional<std::string>
+ TestRequest::getEnv(const std::string & key) const
+ {
+ return env.find(key) == env.end() ? IceUtil::Optional<std::string>() : env.find(key)->second;
+ }
+
+ IceUtil::Optional<std::string>
+ TestRequest::getQueryStringParam(const std::string & key) const
+ {
+ return qs.find(key) == qs.end() ? IceUtil::Optional<std::string>() : qs.find(key)->second;
+ }
+
+ IceUtil::Optional<std::string>
+ TestRequest::getCookieParam(const std::string & key) const
+ {
+ return cookies.find(key) == cookies.end() ? IceUtil::Optional<std::string>() : cookies.find(key)->second;
+ }
+
+ IceUtil::Optional<std::string>
+ TestRequest::getHeaderParam(const std::string & key) const
+ {
+ return hdr.find(key) == hdr.end() ? IceUtil::Optional<std::string>() : hdr.find(key)->second;
+ }
+
+ std::istream &
+ TestRequest::getInputStream() const
+ {
+ return input;
+ }
+
+ std::ostream &
+ TestRequest::getOutputStream() const
+ {
+ return output;
+ }
+
+ void
+ TestRequest::response(short statusCode, const std::string & statusMsg) const
+ {
+ getOutputStream()
+ << "Status: " << statusCode << " " << statusMsg << "\r\n"
+ << "\r\n";
+ }
+
+ void
+ TestRequest::setHeader(const std::string & header, const std::string & value) const
+ {
+ getOutputStream() << header << ": " << value << "\r\n";
+ }
+
+ const TestRequest::MapVars &
+ TestRequest::getResponseHeaders()
+ {
+ if (responseHeaders.empty()) {
+ while (true) {
+ char buf[BUFSIZ], n[BUFSIZ], v[BUFSIZ];
+ output.getline(buf, BUFSIZ);
+ if (sscanf(buf, "%[^:]: %[^\r]", n, v) != 2) {
+ break;
+ }
+ responseHeaders[n] = v;
+ }
+ }
+ return responseHeaders;
+ }
+}
+
diff --git a/icespider/testing/testRequest.h b/icespider/testing/testRequest.h
new file mode 100644
index 0000000..3fd40f0
--- /dev/null
+++ b/icespider/testing/testRequest.h
@@ -0,0 +1,43 @@
+#ifndef ICESPIDER_TESTING_TESTREQUEST_H
+#define ICESPIDER_TESTING_TESTREQUEST_H
+
+#include <ihttpRequest.h>
+#include <visibility.h>
+
+namespace IceSpider {
+ class DLL_PUBLIC TestRequest : public IHttpRequest {
+ public:
+ typedef std::map<std::string, std::string> MapVars;
+ typedef std::vector<std::string> UrlVars;
+
+ TestRequest(const Core * c, HttpMethod m, const std::string & p);
+
+ const std::vector<std::string> & getRequestPath() const override;
+ HttpMethod getRequestMethod() const override;
+ IceUtil::Optional<std::string> getEnv(const std::string & key) const override;
+ IceUtil::Optional<std::string> getQueryStringParam(const std::string & key) const override;
+ IceUtil::Optional<std::string> getCookieParam(const std::string & key) const override;
+ IceUtil::Optional<std::string> getHeaderParam(const std::string & key) const override;
+ std::istream & getInputStream() const override;
+ std::ostream & getOutputStream() const override;
+ void response(short statusCode, const std::string & statusMsg) const override;
+ void setHeader(const std::string & header, const std::string & value) const override;
+
+ const MapVars & getResponseHeaders();
+
+ UrlVars url;
+ MapVars qs;
+ MapVars cookies;
+ MapVars hdr;
+ MapVars env;
+ mutable std::stringstream input;
+ mutable std::stringstream output;
+ const HttpMethod method;
+
+ private:
+ MapVars responseHeaders;
+ };
+}
+
+#endif
+
diff --git a/icespider/unittests/Jamfile.jam b/icespider/unittests/Jamfile.jam
index ddc1e4a..2c24e7d 100644
--- a/icespider/unittests/Jamfile.jam
+++ b/icespider/unittests/Jamfile.jam
@@ -64,7 +64,6 @@ run
testApp.cpp
base2.cpp
testRoutes.json
- ../fcgi/cgiCore.cpp
: :
config/ice.properties
xslt/transform.xslt
@@ -80,18 +79,17 @@ run
<library>../common//icespider-common
<library>../core//icespider-core
<library>../xslt//icespider-xslt
+ <library>../testing//icespider-testing
<implicit-dependency>../common//icespider-common
<implicit-dependency>test-api
<dependency>../compile
<include>.
- <include>../fcgi
: testApp ;
run
testFcgi.cpp
test-fcgi.ice
../fcgi/cgiRequestBase.cpp
- ../fcgi/cgiCore.cpp
: : :
<slicer>yes
<define>BOOST_TEST_DYN_LINK
diff --git a/icespider/unittests/testApp.cpp b/icespider/unittests/testApp.cpp
index e42a5aa..a95bca5 100644
--- a/icespider/unittests/testApp.cpp
+++ b/icespider/unittests/testApp.cpp
@@ -3,7 +3,7 @@
#include <safeMapFind.h>
#include <irouteHandler.h>
-#include <cgiCore.h>
+#include <core.h>
#include <exceptions.h>
#include <test-api.h>
#include <Ice/ObjectAdapter.h>
@@ -17,6 +17,7 @@
#include <json/serializer.h>
#include <libxml++/parsers/domparser.h>
#include <factory.impl.h>
+#include <testRequest.h>
using namespace IceSpider;
@@ -31,88 +32,10 @@ BOOST_AUTO_TEST_CASE( testLoadConfiguration )
BOOST_REQUIRE_EQUAL(12, AdHoc::PluginManager::getDefault()->getAll<IceSpider::RouteHandlerFactory>().size());
}
-class TestRequest : public IHttpRequest {
- public:
- TestRequest(const Core * c, HttpMethod m, const std::string & p) :
- IHttpRequest(c),
- method(m)
- {
- namespace ba = boost::algorithm;
- auto path = p.substr(1);
- if (!path.empty()) {
- ba::split(url, path, ba::is_any_of("/"), ba::token_compress_off);
- }
- }
-
- const std::vector<std::string> & getRequestPath() const override
- {
- return url;
- }
-
- HttpMethod getRequestMethod() const override
- {
- return method;
- }
-
- IceUtil::Optional<std::string> getEnv(const std::string & key) const override
- {
- return env.find(key) == env.end() ? IceUtil::Optional<std::string>() : env.find(key)->second;
- }
-
- IceUtil::Optional<std::string> getQueryStringParam(const std::string & key) const override
- {
- return qs.find(key) == qs.end() ? IceUtil::Optional<std::string>() : qs.find(key)->second;
- }
-
- IceUtil::Optional<std::string> getCookieParam(const std::string & key) const override
- {
- return cookies.find(key) == cookies.end() ? IceUtil::Optional<std::string>() : cookies.find(key)->second;
- }
-
- IceUtil::Optional<std::string> getHeaderParam(const std::string & key) const override
- {
- return hdr.find(key) == hdr.end() ? IceUtil::Optional<std::string>() : hdr.find(key)->second;
- }
-
- std::istream & getInputStream() const override
- {
- return input;
- }
-
- std::ostream & getOutputStream() const override
- {
- return output;
- }
-
- void response(short statusCode, const std::string & statusMsg) const override
- {
- getOutputStream()
- << "Status: " << statusCode << " " << statusMsg << "\r\n"
- << "\r\n";
- }
-
- void setHeader(const std::string & header, const std::string & value) const override
- {
- getOutputStream() << header << ": " << value << "\r\n";
- }
-
- typedef std::map<std::string, std::string> MapVars;
- typedef std::vector<std::string> UrlVars;
- UrlVars url;
- MapVars qs;
- MapVars cookies;
- MapVars hdr;
- MapVars env;
- mutable std::stringstream input;
- mutable std::stringstream output;
-
- const HttpMethod method;
-};
-
-class CoreWithProps : public CgiCore {
+class CoreWithProps : public CoreWithDefaultRouter {
public:
CoreWithProps() :
- CgiCore({
+ CoreWithDefaultRouter({
"--Custom.Prop=value"
})
{
@@ -131,10 +54,10 @@ BOOST_AUTO_TEST_CASE( properties )
BOOST_AUTO_TEST_SUITE_END();
-class CoreWithFileProps : public CgiCore {
+class CoreWithFileProps : public CoreWithDefaultRouter {
public:
CoreWithFileProps() :
- CgiCore({
+ CoreWithDefaultRouter({
"--IceSpider.Config=config/custom.properties",
"--Custom.Prop=value"
})
@@ -156,7 +79,7 @@ BOOST_AUTO_TEST_CASE( properties )
BOOST_AUTO_TEST_SUITE_END();
-BOOST_FIXTURE_TEST_SUITE(defaultProps, CgiCore);
+BOOST_FIXTURE_TEST_SUITE(defaultProps, CoreWithDefaultRouter);
BOOST_AUTO_TEST_CASE( testCoreSettings )
{
@@ -240,7 +163,7 @@ class TestSerice : public TestIceSpider::TestApi {
}
};
-class TestApp : public CgiCore {
+class TestApp : public CoreWithDefaultRouter {
public:
TestApp() :
adp(communicator->createObjectAdapterWithEndpoints("test", "default"))
@@ -264,22 +187,6 @@ class Dummy : public IceSpider::Plugin, TestIceSpider::DummyPlugin {
};
NAMEDFACTORY("DummyPlugin", Dummy, IceSpider::PluginFactory);
-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( plugins )
@@ -293,7 +200,7 @@ BOOST_AUTO_TEST_CASE( testCallIndex )
{
TestRequest requestGetIndex(this, HttpMethod::GET, "/");
process(&requestGetIndex);
- auto h = parseHeaders(requestGetIndex.output);
+ auto h = requestGetIndex.getResponseHeaders();
BOOST_REQUIRE_EQUAL(h["Status"], "200 OK");
BOOST_REQUIRE_EQUAL(h["Content-Type"], "application/json");
auto v = Slicer::DeserializeAny<Slicer::JsonStreamDeserializer, TestIceSpider::SomeModelPtr>(requestGetIndex.output);
@@ -304,7 +211,7 @@ BOOST_AUTO_TEST_CASE( testCallMashS )
{
TestRequest requestGetMashS(this, HttpMethod::GET, "/mashS/something/something/1234");
process(&requestGetMashS);
- auto h = parseHeaders(requestGetMashS.output);
+ auto h = requestGetMashS.getResponseHeaders();
BOOST_REQUIRE_EQUAL(h["Status"], "200 OK");
BOOST_REQUIRE_EQUAL(h["Content-Type"], "application/json");
auto v = Slicer::DeserializeAny<Slicer::JsonStreamDeserializer, TestIceSpider::Mash1>(requestGetMashS.output);
@@ -316,7 +223,7 @@ BOOST_AUTO_TEST_CASE( testCallMashC )
{
TestRequest requestGetMashC(this, HttpMethod::GET, "/mashC/something/something/1234");
process(&requestGetMashC);
- auto h = parseHeaders(requestGetMashC.output);
+ auto h = requestGetMashC.getResponseHeaders();
BOOST_REQUIRE_EQUAL(h["Status"], "200 OK");
BOOST_REQUIRE_EQUAL(h["Content-Type"], "application/json");
auto v = Slicer::DeserializeAny<Slicer::JsonStreamDeserializer, TestIceSpider::Mash2Ptr>(requestGetMashC.output);
@@ -328,7 +235,7 @@ BOOST_AUTO_TEST_CASE( testCallViewSomething1234 )
{
TestRequest requestGetItem(this, HttpMethod::GET, "/view/something/1234");
process(&requestGetItem);
- auto h = parseHeaders(requestGetItem.output);
+ auto h = requestGetItem.getResponseHeaders();
BOOST_REQUIRE_EQUAL(h["Status"], "200 OK");
BOOST_REQUIRE_EQUAL(h["Content-Type"], "application/json");
auto v = Slicer::DeserializeAny<Slicer::JsonStreamDeserializer, TestIceSpider::SomeModelPtr>(requestGetItem.output);
@@ -339,7 +246,7 @@ BOOST_AUTO_TEST_CASE( testCallViewSomething1234_ )
{
TestRequest requestGetItemGiven(this, HttpMethod::GET, "/item/something/1234");
process(&requestGetItemGiven);
- auto h = parseHeaders(requestGetItemGiven.output);
+ auto h = requestGetItemGiven.getResponseHeaders();
BOOST_REQUIRE_EQUAL(h["Status"], "200 OK");
BOOST_REQUIRE_EQUAL(h["Content-Type"], "application/json");
auto v = Slicer::DeserializeAny<Slicer::JsonStreamDeserializer, TestIceSpider::SomeModelPtr>(requestGetItemGiven.output);
@@ -350,7 +257,7 @@ BOOST_AUTO_TEST_CASE( testCallViewSomething )
{
TestRequest requestGetItemDefault(this, HttpMethod::GET, "/item/something");
process(&requestGetItemDefault);
- auto h = parseHeaders(requestGetItemDefault.output);
+ auto h = requestGetItemDefault.getResponseHeaders();
BOOST_REQUIRE_EQUAL(h["Status"], "200 OK");
BOOST_REQUIRE_EQUAL(h["Content-Type"], "application/json");
auto v = Slicer::DeserializeAny<Slicer::JsonStreamDeserializer, TestIceSpider::SomeModelPtr>(requestGetItemDefault.output);
@@ -361,7 +268,7 @@ BOOST_AUTO_TEST_CASE( testCallDeleteSomeValue )
{
TestRequest requestDeleteItem(this, HttpMethod::DELETE, "/some value");
process(&requestDeleteItem);
- auto h = parseHeaders(requestDeleteItem.output);
+ auto h = requestDeleteItem.getResponseHeaders();
BOOST_REQUIRE_EQUAL(h["Status"], "200 OK");
requestDeleteItem.output.get();
BOOST_REQUIRE(requestDeleteItem.output.eof());
@@ -373,7 +280,7 @@ BOOST_AUTO_TEST_CASE( testCallPost1234 )
requestUpdateItem.env["CONTENT_TYPE"] = "application/json";
requestUpdateItem.input << "{\"value\": \"some value\"}";
process(&requestUpdateItem);
- auto h = parseHeaders(requestUpdateItem.output);
+ auto h = requestUpdateItem.getResponseHeaders();
BOOST_REQUIRE_EQUAL(h["Status"], "200 OK");
requestUpdateItem.output.get();
BOOST_REQUIRE(requestUpdateItem.output.eof());
@@ -384,7 +291,7 @@ BOOST_AUTO_TEST_CASE( testCallPost1234NoContentType )
TestRequest requestUpdateItem(this, HttpMethod::POST, "/1234");
requestUpdateItem.input << "{\"value\": \"some value\"}";
process(&requestUpdateItem);
- auto h = parseHeaders(requestUpdateItem.output);
+ auto h = requestUpdateItem.getResponseHeaders();
BOOST_REQUIRE_EQUAL(h["Status"], "400 Bad Request");
requestUpdateItem.output.get();
BOOST_REQUIRE(requestUpdateItem.output.eof());
@@ -396,7 +303,7 @@ BOOST_AUTO_TEST_CASE( testCallPost1234UnsupportedMediaType )
requestUpdateItem.env["CONTENT_TYPE"] = "application/notathing";
requestUpdateItem.input << "value=\"some value\"";
process(&requestUpdateItem);
- auto h = parseHeaders(requestUpdateItem.output);
+ auto h = requestUpdateItem.getResponseHeaders();
BOOST_REQUIRE_EQUAL(h["Status"], "415 Unsupported Media Type");
requestUpdateItem.output.get();
BOOST_REQUIRE(requestUpdateItem.output.eof());
@@ -407,7 +314,7 @@ BOOST_AUTO_TEST_CASE( testCallIndexAcceptJson )
TestRequest requestJson(this, HttpMethod::GET, "/");
requestJson.hdr["Accept"] = "application/json";
process(&requestJson);
- auto h = parseHeaders(requestJson.output);
+ auto h = requestJson.getResponseHeaders();
BOOST_REQUIRE_EQUAL(h["Status"], "200 OK");
BOOST_REQUIRE_EQUAL(h["Content-Type"], "application/json");
auto v = Slicer::DeserializeAny<Slicer::JsonStreamDeserializer, TestIceSpider::SomeModelPtr>(requestJson.output);
@@ -419,7 +326,7 @@ BOOST_AUTO_TEST_CASE( testCallIndexAcceptAny )
TestRequest requestAnyAny(this, HttpMethod::GET, "/");
requestAnyAny.hdr["Accept"] = "*/*";
process(&requestAnyAny);
- auto h = parseHeaders(requestAnyAny.output);
+ auto h = requestAnyAny.getResponseHeaders();
BOOST_REQUIRE_EQUAL(h["Status"], "200 OK");
auto v = Slicer::DeserializeAny<Slicer::JsonStreamDeserializer, TestIceSpider::SomeModelPtr>(requestAnyAny.output);
BOOST_REQUIRE_EQUAL(v->value, "index");
@@ -430,7 +337,7 @@ BOOST_AUTO_TEST_CASE( testCallIndexAcceptApplicationAny )
TestRequest requestApplicationAny(this, HttpMethod::GET, "/");
requestApplicationAny.hdr["Accept"] = "application/*";
process(&requestApplicationAny);
- auto h = parseHeaders(requestApplicationAny.output);
+ auto h = requestApplicationAny.getResponseHeaders();
BOOST_REQUIRE_EQUAL(h["Status"], "200 OK");
BOOST_REQUIRE(boost::algorithm::starts_with(h["Content-Type"], "application/"));
auto v = Slicer::DeserializeAny<Slicer::JsonStreamDeserializer, TestIceSpider::SomeModelPtr>(requestApplicationAny.output);
@@ -442,7 +349,7 @@ BOOST_AUTO_TEST_CASE( testCallIndexAcceptXml )
TestRequest requestXml(this, HttpMethod::GET, "/");
requestXml.hdr["Accept"] = "application/xml";
process(&requestXml);
- auto h = parseHeaders(requestXml.output);
+ auto h = requestXml.getResponseHeaders();
BOOST_REQUIRE_EQUAL(h["Status"], "200 OK");
BOOST_REQUIRE_EQUAL(h["Content-Type"], "application/xml");
auto v = Slicer::DeserializeAny<Slicer::XmlStreamDeserializer, TestIceSpider::SomeModelPtr>(requestXml.output);
@@ -454,7 +361,7 @@ BOOST_AUTO_TEST_CASE( testCallIndexAcceptTextHtml )
TestRequest requestHtml(this, HttpMethod::GET, "/");
requestHtml.hdr["Accept"] = "text/html";
process(&requestHtml);
- auto h = parseHeaders(requestHtml.output);
+ auto h = requestHtml.getResponseHeaders();
BOOST_REQUIRE_EQUAL(h["Status"], "200 OK");
BOOST_REQUIRE_EQUAL(h["Content-Type"], "text/html");
xmlpp::DomParser d;
@@ -467,7 +374,7 @@ BOOST_AUTO_TEST_CASE( testCallViewSomethingAcceptHtml )
TestRequest requestHtml(this, HttpMethod::GET, "/view/something/1234");
requestHtml.hdr["Accept"] = "text/html";
process(&requestHtml);
- auto h = parseHeaders(requestHtml.output);
+ auto h = requestHtml.getResponseHeaders();
BOOST_REQUIRE_EQUAL(h["Status"], "406 Not Acceptable");
requestHtml.output.get();
BOOST_REQUIRE(requestHtml.output.eof());
@@ -478,7 +385,7 @@ BOOST_AUTO_TEST_CASE( testCallIndexAcceptNotSupported )
TestRequest requestBadAccept(this, HttpMethod::GET, "/");
requestBadAccept.hdr["Accept"] = "not/supported";
process(&requestBadAccept);
- auto h = parseHeaders(requestBadAccept.output);
+ auto h = requestBadAccept.getResponseHeaders();
BOOST_REQUIRE_EQUAL(h["Status"], "406 Not Acceptable");
requestBadAccept.output.get();
BOOST_REQUIRE(requestBadAccept.output.eof());
@@ -489,7 +396,7 @@ 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);
- auto h = parseHeaders(requestChoice.output);
+ auto h = requestChoice.getResponseHeaders();
BOOST_REQUIRE_EQUAL(h["Status"], "200 OK");
BOOST_REQUIRE_EQUAL(h["Content-Type"], "application/xml");
auto v = Slicer::DeserializeAny<Slicer::XmlStreamDeserializer, TestIceSpider::SomeModelPtr>(requestChoice.output);
@@ -500,7 +407,7 @@ BOOST_AUTO_TEST_CASE( testCall404 )
{
TestRequest requestGetIndex(this, HttpMethod::GET, "/this/404");
process(&requestGetIndex);
- auto h = parseHeaders(requestGetIndex.output);
+ auto h = requestGetIndex.getResponseHeaders();
BOOST_REQUIRE_EQUAL(h["Status"], "404 Not found");
requestGetIndex.output.get();
BOOST_REQUIRE(requestGetIndex.output.eof());
@@ -510,7 +417,7 @@ BOOST_AUTO_TEST_CASE( testCall405 )
{
TestRequest requestGetIndex(this, HttpMethod::GET, "/405");
process(&requestGetIndex);
- auto h = parseHeaders(requestGetIndex.output);
+ auto h = requestGetIndex.getResponseHeaders();
BOOST_REQUIRE_EQUAL(h["Status"], "405 Method Not Allowed");
requestGetIndex.output.get();
BOOST_REQUIRE(requestGetIndex.output.eof());
@@ -522,7 +429,7 @@ BOOST_AUTO_TEST_CASE( testCallSearch )
request.qs["s"] = "something";
request.qs["i"] = "1234";
process(&request);
- auto h = parseHeaders(request.output);
+ auto h = request.getResponseHeaders();
BOOST_REQUIRE_EQUAL(h["Status"], "200 OK");
Slicer::DeserializeAny<Slicer::JsonStreamDeserializer, TestIceSpider::SomeModelPtr>(request.output);
}
@@ -533,7 +440,7 @@ BOOST_AUTO_TEST_CASE( testCallSearchBadLexicalCast )
request.qs["s"] = "something";
request.qs["i"] = "bar";
process(&request);
- auto h = parseHeaders(request.output);
+ auto h = request.getResponseHeaders();
BOOST_REQUIRE_EQUAL(h["Status"], "400 Bad Request");
request.output.get();
BOOST_REQUIRE(request.output.eof());
@@ -544,7 +451,7 @@ BOOST_AUTO_TEST_CASE( testCallSearchMissingS )
TestRequest request(this, HttpMethod::GET, "/search");
request.qs["i"] = "1234";
process(&request);
- auto h = parseHeaders(request.output);
+ auto h = request.getResponseHeaders();
BOOST_REQUIRE_EQUAL(h["Status"], "400 Bad Request");
request.output.get();
BOOST_REQUIRE(request.output.eof());
@@ -555,7 +462,7 @@ BOOST_AUTO_TEST_CASE( testCallSearchMissingI )
TestRequest request(this, HttpMethod::GET, "/search");
request.qs["s"] = "something";
process(&request);
- auto h = parseHeaders(request.output);
+ auto h = request.getResponseHeaders();
BOOST_REQUIRE_EQUAL(h["Status"], "400 Bad Request");
request.output.get();
BOOST_REQUIRE(request.output.eof());
@@ -567,7 +474,7 @@ BOOST_AUTO_TEST_CASE( testCookies )
request.cookies["mycookievar"] = "something";
request.qs["i"] = "1234";
process(&request);
- auto h = parseHeaders(request.output);
+ auto h = request.getResponseHeaders();
BOOST_REQUIRE_EQUAL(h["Status"], "200 OK");
}
diff --git a/icespider/unittests/testFcgi.cpp b/icespider/unittests/testFcgi.cpp
index 2db9bcf..ae4f1cf 100644
--- a/icespider/unittests/testFcgi.cpp
+++ b/icespider/unittests/testFcgi.cpp
@@ -1,7 +1,7 @@
#define BOOST_TEST_MODULE TestApp
#include <boost/test/unit_test.hpp>
-#include <cgiCore.h>
+#include <core.h>
#include <definedDirs.h>
#include <cgiRequestBase.h>
#include <test-fcgi.h>
@@ -87,7 +87,7 @@ namespace std {
// LCOV_EXCL_STOP
}
-BOOST_FIXTURE_TEST_SUITE( CgiRequestBase, IceSpider::CgiCore );
+BOOST_FIXTURE_TEST_SUITE( CgiRequestBase, IceSpider::CoreWithDefaultRouter );
BOOST_AUTO_TEST_CASE( NoEnvironment )
{
diff --git a/icespider/unittests/testFileSessions.cpp b/icespider/unittests/testFileSessions.cpp
index 37e6587..c632a34 100644
--- a/icespider/unittests/testFileSessions.cpp
+++ b/icespider/unittests/testFileSessions.cpp
@@ -9,10 +9,10 @@
BOOST_TEST_DONT_PRINT_LOG_VALUE(IceSpider::StringMap);
-class TestCore : public IceSpider::Core {
+class TestCore : public IceSpider::CoreWithDefaultRouter {
public:
TestCore() :
- IceSpider::Core({
+ IceSpider::CoreWithDefaultRouter({
"--IceSpider.SessionManager=IceSpider-FileSessions",
"--IceSpider.FileSessions.Path=" + (binDir / "test-sessions").string(),
"--IceSpider.FileSessions.Duration=0"