X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Ftest_filter2.cpp;h=fb3c0a3ccf4ebe447903aed66983e934c60b846d;hb=ed1d79c860c13fb92e5b7eea8de2cd608a6caa0e;hp=e2ee32216bd5e17f3add26f96e0b8ef02d0c6c95;hpb=283537fd130e56aa77410b47092dea16be47b108;p=metaproxy-moved-to-github.git diff --git a/src/test_filter2.cpp b/src/test_filter2.cpp index e2ee322..fb3c0a3 100644 --- a/src/test_filter2.cpp +++ b/src/test_filter2.cpp @@ -1,78 +1,142 @@ +/* This file is part of Metaproxy. + Copyright (C) Index Data +Metaproxy is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +Metaproxy is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ #include "config.hpp" -#include "filter.hpp" -#include "router.hpp" -#include "package.hpp" + +#include +#include + +#include +#include +#include #include #define BOOST_AUTO_TEST_MAIN +#define BOOST_TEST_DYN_LINK #include using namespace boost::unit_test; +namespace mp = metaproxy_1; -class FilterConstant: public yp2::Filter { +class FilterConstant: public mp::filter::Base { public: - yp2::Package & process(yp2::Package & package) const { - package.data() = 1234; - return package.move(); + FilterConstant() : m_constant(1234) { }; + void process(mp::Package & package) const { + package.move(); }; + void configure(const xmlNode* ptr, bool test_only, const char *path); + int get_constant() const { return m_constant; }; +private: + const xmlNode *m_ptr; + int m_constant; }; -class FilterDouble: public yp2::Filter { +void FilterConstant::configure(const xmlNode* ptr, bool test_only, + const char *path) +{ + m_ptr = ptr; + + BOOST_CHECK_EQUAL (ptr->type, XML_ELEMENT_NODE); + BOOST_CHECK_EQUAL(std::string((const char *) ptr->name), "filter"); + + const struct _xmlAttr *attr; + + for (attr = ptr->properties; attr; attr = attr->next) + { + BOOST_CHECK_EQUAL( std::string((const char *)attr->name), "type"); + const xmlNode *val = attr->children; + BOOST_CHECK_EQUAL(val->type, XML_TEXT_NODE); + BOOST_CHECK_EQUAL(std::string((const char *)val->content), "constant"); + } + const xmlNode *p = ptr->children; + for (; p; p = p->next) + { + if (p->type != XML_ELEMENT_NODE) + continue; + + BOOST_CHECK_EQUAL (p->type, XML_ELEMENT_NODE); + BOOST_CHECK_EQUAL(std::string((const char *) p->name), "value"); + + const xmlNode *val = p->children; + BOOST_CHECK(val); + if (!val) + continue; + + BOOST_CHECK_EQUAL(val->type, XML_TEXT_NODE); + BOOST_CHECK_EQUAL(std::string((const char *)val->content), "2"); + + m_constant = atoi((const char *) val->content); + } +} + +// This filter dose not have a configure function + +class FilterDouble: public mp::filter::Base { public: - yp2::Package & process(yp2::Package & package) const { - package.data() = package.data() * 2; - return package.move(); + void process(mp::Package & package) const { + package.move(); }; + void configure(const xmlNode * ptr, bool test_only, + const char *path) { }; }; - - -BOOST_AUTO_TEST_CASE( testfilter2 ) + + +BOOST_AUTO_TEST_CASE( testfilter2_1 ) { try { FilterConstant fc; - fc.name() = "FilterConstant"; FilterDouble fd; - fd.name() = "FilterDouble"; { - yp2::RouterChain router1; - + mp::RouterChain router1; + // test filter set/get/exception - router1.rule(fc); - - router1.rule(fd); - - yp2::Session session; - yp2::Origin origin; - yp2::Package pack_in(session, origin); - - yp2::Package pack_out = pack_in.router(router1).move(); - - BOOST_CHECK (pack_out.data() == 2468); - + router1.append(fc); + + router1.append(fd); + + mp::Session session; + mp::Origin origin; + mp::Package pack(session, origin); + + pack.router(router1).move(); + + //BOOST_CHECK_EQUAL(pack.data(), 2468); + } - + { - yp2::RouterChain router2; - - router2.rule(fd); - router2.rule(fc); - - yp2::Session session; - yp2::Origin origin; - yp2::Package pack_in(session, origin); - - yp2::Package pack_out(session, origin); - - pack_out = pack_in.router(router2).move(); - - BOOST_CHECK (pack_out.data() == 1234); - + mp::RouterChain router2; + + router2.append(fd); + router2.append(fc); + + mp::Session session; + mp::Origin origin; + mp::Package pack(session, origin); + + pack.router(router2).move(); + + //BOOST_CHECK_EQUAL(pack.data(), 1234); + } } @@ -86,10 +150,52 @@ BOOST_AUTO_TEST_CASE( testfilter2 ) } +BOOST_AUTO_TEST_CASE( testfilter2_2 ) +{ + try { + FilterConstant fc; + BOOST_CHECK_EQUAL(fc.get_constant(), 1234); + + mp::filter::Base *base = &fc; + + std::string some_xml = "\n" + "\n" + " 2\n" + ""; + + // std::cout << some_xml << std::endl; + + xmlDocPtr doc = xmlParseMemory(some_xml.c_str(), some_xml.size()); + + BOOST_CHECK(doc); + + if (doc) + { + xmlNodePtr root_element = xmlDocGetRootElement(doc); + + base->configure(root_element, true, 0); + + xmlFreeDoc(doc); + } + + BOOST_CHECK_EQUAL(fc.get_constant(), 2); + } + catch (std::exception &e) { + std::cout << e.what() << "\n"; + BOOST_CHECK (false); + } + catch ( ...) { + BOOST_CHECK (false); + } + +} + /* * Local variables: * c-basic-offset: 4 + * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ +