diff options
| -rw-r--r-- | icespider/core/core.cpp | 12 | ||||
| -rw-r--r-- | icespider/core/core.h | 3 | ||||
| -rw-r--r-- | icespider/unittests/testApp.cpp | 8 | 
3 files changed, 19 insertions, 4 deletions
diff --git a/icespider/core/core.cpp b/icespider/core/core.cpp index a822366..d63464e 100644 --- a/icespider/core/core.cpp +++ b/icespider/core/core.cpp @@ -102,7 +102,17 @@ namespace IceSpider {  				std::cerr << "Error handler failed" << std::endl;  			}  		} -		request->response(500, exception.what()); +		defaultErrorReport(request, exception); +	} + +	void +	Core::defaultErrorReport(IHttpRequest * request, const std::exception & exception) const +	{ +		char * buf = __cxxabiv1::__cxa_demangle(typeid(exception).name(), NULL, NULL, NULL); +		request->setHeader("Content-Type", "text/plain"); +		request->response(500, buf); +		free(buf); +		request->getOutputStream() << exception.what();  		request->dump(std::cerr);  	} diff --git a/icespider/core/core.h b/icespider/core/core.h index 4aac640..f358009 100644 --- a/icespider/core/core.h +++ b/icespider/core/core.h @@ -33,6 +33,9 @@ namespace IceSpider {  			Ice::ObjectAdapterPtr pluginAdapter;  			static const boost::filesystem::path defaultConfig; + +		private: +			void defaultErrorReport(IHttpRequest * request, const std::exception & ex) const;  	};  	class DLL_PUBLIC CoreWithDefaultRouter : public Core { diff --git a/icespider/unittests/testApp.cpp b/icespider/unittests/testApp.cpp index 90e7737..5832595 100644 --- a/icespider/unittests/testApp.cpp +++ b/icespider/unittests/testApp.cpp @@ -523,9 +523,11 @@ BOOST_AUTO_TEST_CASE( testErrorHandler_Unhandled )  	TestRequest requestDeleteItem(this, HttpMethod::DELETE, "/error");  	process(&requestDeleteItem);  	auto h = requestDeleteItem.getResponseHeaders(); -	BOOST_REQUIRE_EQUAL(h["Status"], "500 test error"); -	requestDeleteItem.output.get(); -	BOOST_REQUIRE(requestDeleteItem.output.eof()); +	BOOST_REQUIRE_EQUAL(h["Status"], "500 TestIceSpider::Ex"); +	BOOST_REQUIRE_EQUAL(h["Content-Type"], "text/plain"); +	auto & o = requestDeleteItem.output; +	auto b = o.str().substr(o.tellg()); +	BOOST_REQUIRE_EQUAL(b, "test error");  }  BOOST_AUTO_TEST_CASE( testErrorHandler_Handled1 )  | 
