From 3131fa0db3000fb5c944e3822361de6fe7bb1b82 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Tue, 6 Mar 2018 19:43:22 +0000 Subject: Add basic site setup --- Jamroot.jam | 1 + site/Jamfile.jam | 73 +++++++++++++++++++++++++++++++++++++ site/custom.cpp | 38 ++++++++++++++++++++ site/search.json | 13 +++++++ site/test.cpp | 107 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 232 insertions(+) create mode 100644 site/Jamfile.jam create mode 100644 site/custom.cpp create mode 100644 site/search.json create mode 100644 site/test.cpp diff --git a/Jamroot.jam b/Jamroot.jam index f035381..bd9f1d7 100644 --- a/Jamroot.jam +++ b/Jamroot.jam @@ -17,6 +17,7 @@ project ; build-project service ; +build-project site ; # Some useful aliases diff --git a/site/Jamfile.jam b/site/Jamfile.jam new file mode 100644 index 0000000..9f9f9fc --- /dev/null +++ b/site/Jamfile.jam @@ -0,0 +1,73 @@ +import icespider ; +import testing ; + +lib icespider-core ; +lib icespider-common ; +lib icespider-fcgi ; +lib icespider-testing ; +lib adhocutil ; +lib Ice ; +lib IceUtil ; +lib pthread ; +lib boost_system ; +lib boost_filesystem ; +lib slicer ; +lib slicer-json ; +lib slicer-db ; +lib boost_unit_test_framework ; +lib icespider : : + icespider-core + : : + /usr/include/icespider + /usr/include/slicer + /usr/include/adhocutil + /usr/share/icespider/ice + icespider-common + adhocutil + Ice + IceUtil + pthread + slicer + boost_system + yes + ; + +alias mirrorsearchsite : + [ glob *.cpp *.ice *.json : test.cpp ] + : + yes + : : + ../service//mirrorsearch + ../service//mirrorsearch + icespider + slicer-json + . + ; + +exe mirrorsearch-cgi : + mirrorsearchsite + : + yes + icespider-fcgi + ; + +path-constant me : . ; +obj test : + test.cpp + : + BOOST_TEST_DYN_LINK + ROOT=\"$(me)\" + icespider-testing + mirrorsearchsite + ; + +run + test + mirrorsearchsite + : : : + yes + boost_filesystem + icespider-testing + boost_unit_test_framework + : testmirrorsearchsite ; + diff --git a/site/custom.cpp b/site/custom.cpp new file mode 100644 index 0000000..35d0d40 --- /dev/null +++ b/site/custom.cpp @@ -0,0 +1,38 @@ +#include "icespider-routes-search.h" + +namespace MirrorSearch { + // Implementation classes. + + // Route name: download + // path: /download/{filename} + class download : public IceSpider::IRouteHandler { + public: + download(const IceSpider::Core * core) : + IceSpider::IRouteHandler(IceSpider::HttpMethod::GET, "/download/{filename}"), + prx0(core->getProxy()), + _pi_filename(1) + { + } + + void execute(IceSpider::IHttpRequest * request) const + { + auto _p_filename(request->getURLParam<::std::string>(_pi_filename)); + auto _responseModel = prx0->feelingLucky(_p_filename, request->getContext()); + if (_responseModel) { + request->responseRedirect(*_responseModel, "Mirror found"); + } + request->response(404, "No mirror found"); + } + + private: + const MirrorSearch::SearchPrx prx0; + const unsigned int _pi_filename; + }; + +} // namespace MirrorSearch + +// Register route handlers. +FACTORY(MirrorSearch::download, IceSpider::RouteHandlerFactory); + +// End generated code. + diff --git a/site/search.json b/site/search.json new file mode 100644 index 0000000..ca1041d --- /dev/null +++ b/site/search.json @@ -0,0 +1,13 @@ +{ + "name": "MirrorSearch", + "routes": { + "list": { + "path": "/list/{filename}", + "operation": "MirrorSearch.Search.getMatches" + } + }, + "slices": [ + "models.ice", + "api.ice" + ] +} diff --git a/site/test.cpp b/site/test.cpp new file mode 100644 index 0000000..7fcc2ae --- /dev/null +++ b/site/test.cpp @@ -0,0 +1,107 @@ +#define BOOST_TEST_MODULE mirrorsearchsite +#include + +#include +#include +#include + +#include + +using namespace IceSpider; +using namespace MirrorSearch; + +class TestSerice : public Search { + public: + virtual SearchServices getServices(const ::Ice::Current& = ::Ice::Current()) override + { + return {}; + } + virtual SearchHits getMatches(const ::std::string & fn, const ::Ice::Current& = ::Ice::Current()) override + { + BOOST_TEST_INFO(fn); + if (fn == "good.txt") { + return { + new SearchHit(1, 1, "file:///some/file/path"), + new SearchHit(1, 1, "file:///some/other/path") + }; + } + return {}; + } + virtual ::IceUtil::Optional<::std::string> feelingLucky(const ::std::string & fn, const ::Ice::Current & c = ::Ice::Current()) override + { + auto ms = getMatches(fn, c); + if (ms.empty()) { + return IceUtil::None; + + } + return ms.front()->url; + } +}; + +class TestApp : public CoreWithDefaultRouter { + public: + TestApp() : + CoreWithDefaultRouter({ + "--MirrorSearch.Search=Search" + }), + adp(communicator->createObjectAdapterWithEndpoints("test", "default")) + { + adp->activate(); + adp->add(new TestSerice(), communicator->stringToIdentity("Search")); + } + + ~TestApp() + { + adp->deactivate(); + adp->destroy(); + } + + Ice::ObjectAdapterPtr adp; +}; + +BOOST_FIXTURE_TEST_SUITE(ta, TestApp); + +BOOST_AUTO_TEST_CASE( testCallIndexNoFile ) +{ + TestRequest requestGetIndex(this, HttpMethod::GET, "/list"); + process(&requestGetIndex); + auto h = requestGetIndex.getResponseHeaders(); + BOOST_CHECK_EQUAL(h["Status"], "404 Not found"); +} + +BOOST_AUTO_TEST_CASE( testCallIndex ) +{ + TestRequest requestGetIndex(this, HttpMethod::GET, "/list/somefile.txt"); + process(&requestGetIndex); + auto h = requestGetIndex.getResponseHeaders(); + BOOST_CHECK_EQUAL(h["Status"], "200 OK"); + BOOST_CHECK_EQUAL(h["Content-Type"], "application/json"); +} + +BOOST_AUTO_TEST_CASE( testCallDownloadNotFile ) +{ + TestRequest requestGetIndex(this, HttpMethod::GET, "/download"); + process(&requestGetIndex); + auto h = requestGetIndex.getResponseHeaders(); + BOOST_CHECK_EQUAL(h["Status"], "404 Not found"); +} + +BOOST_AUTO_TEST_CASE( testCallDownloadBad ) +{ + TestRequest requestGetIndex(this, HttpMethod::GET, "/download/bad.txt"); + process(&requestGetIndex); + auto h = requestGetIndex.getResponseHeaders(); + BOOST_CHECK_EQUAL(h["Status"], "404 No mirror found"); +} + +BOOST_AUTO_TEST_CASE( testCallDownloadGood ) +{ + TestRequest requestGetIndex(this, HttpMethod::GET, "/download/good.txt"); + process(&requestGetIndex); + auto h = requestGetIndex.getResponseHeaders(); + BOOST_CHECK_EQUAL(h["Status"], "303 Mirror found"); + BOOST_CHECK_EQUAL(h["Location"], "file:///some/file/path"); +} + +BOOST_AUTO_TEST_SUITE_END(); + -- cgit v1.2.3