-/* $Id: router_flexml.cpp,v 1.4 2005-12-08 15:10:34 adam Exp $
+/* $Id: router_flexml.cpp,v 1.5 2005-12-08 15:34:08 adam Exp $
Copyright (c) 2005, Index Data.
%LICENSE%
typedef std::list<std::string> FilterIdList;
typedef std::map<std::string, FilterIdList > IdRouteMap ;
- std::string m_xmlconf;
bool m_xinclude;
- xmlDoc * m_xmlconf_doc;
IdFilterMap m_id_filter_map;
FilterIdList m_filter_id_list;
IdRouteMap m_id_route_map;
const xmlDoc * xmldoc,
std::string id = "");
- void parse_xml_config_dom();
+ void parse_xml_config_dom(xmlDocPtr doc);
const xmlNode* jump_to(const xmlNode* node, int xml_node_type);
return node;
}
-void yp2::RouterFleXML::Rep::parse_xml_config_dom()
+void yp2::RouterFleXML::Rep::parse_xml_config_dom(xmlDocPtr doc)
{
- if (!m_xmlconf_doc){
+ if (!doc)
+ {
std::cerr << "XML configuration DOM pointer empty" << std::endl;
+ return;
}
- const xmlNode* root = xmlDocGetRootElement(m_xmlconf_doc);
+ const xmlNode* root = xmlDocGetRootElement(doc);
if ((std::string((const char *) root->name) != "yp2")
|| (std::string((const char *)(root->ns->href))
<< std::endl;
}
-
yp2::RouterFleXML::Rep::Rep() :
- m_xmlconf(""), m_xinclude(false), m_xmlconf_doc(0)
+ m_xinclude(false)
{
}
{
LIBXML_TEST_VERSION;
- m_p->m_xmlconf = xmlconf;
-
- m_p->m_xmlconf_doc = xmlParseMemory(m_p->m_xmlconf.c_str(),
- m_p->m_xmlconf.size());
- m_p->parse_xml_config_dom();
+ xmlDocPtr doc = xmlParseMemory(xmlconf.c_str(),
+ xmlconf.size());
+ if (!doc)
+ throw XMLError("xmlParseMemory failed");
+ else
+ {
+ m_p->parse_xml_config_dom(doc);
+ xmlFreeDoc(doc);
+ }
}
yp2::RouterFleXML::~RouterFleXML()
{
- xmlFreeDoc(m_p->m_xmlconf_doc);
}
const yp2::filter::Base *
-/* $Id: router_flexml.hpp,v 1.6 2005-11-10 23:10:42 adam Exp $
+/* $Id: router_flexml.hpp,v 1.7 2005-12-08 15:34:08 adam Exp $
Copyright (c) 2005, Index Data.
%LICENSE%
virtual const filter::Base *move(const filter::Base *filter,
const Package *package) const;
+ class XMLError : public std::runtime_error {
+ public:
+ XMLError(const std::string msg) :
+ std::runtime_error("XMLError : " + msg) {} ;
+ };
private:
boost::scoped_ptr<Rep> m_p;
};
-/* $Id: test_router_flexml.cpp,v 1.5 2005-12-02 12:21:07 adam Exp $
+/* $Id: test_router_flexml.cpp,v 1.6 2005-12-08 15:34:08 adam Exp $
Copyright (c) 2005, Index Data.
%LICENSE%
BOOST_AUTO_UNIT_TEST( test_router_flexml_1 )
{
- try{
-
+ try
+ {
std::string xmlconf = "<?xml version=\"1.0\"?>\n"
"<yp2 xmlns=\"http://indexdata.dk/yp2/config/1\">\n"
"<start route=\"start\"/>\n"
"</yp2>\n";
yp2::RouterFleXML rflexml(xmlconf);
-
-
- BOOST_CHECK (true);
-
- //BOOST_CHECK_EQUAL(filter.name(), std::string("filter1"));
-
}
catch ( ... ) {
BOOST_CHECK (false);
}
}
+BOOST_AUTO_UNIT_TEST( test_router_flexml_2 )
+{
+ bool got_xml_error = false;
+ try
+ {
+ std::string xmlconf_invalid = "<?xml version=\"1.0\"?>\n"
+ "<yp2 xmlns=\"http://indexdata.dk/yp2/config/1\">\n"
+ "<start route=\"start\"/>\n"
+ "<filters>\n";
+
+ yp2::RouterFleXML rflexml(xmlconf_invalid);
+ }
+ catch ( yp2::RouterFleXML::XMLError &e) {
+ got_xml_error = true;
+ }
+ catch ( ... ) {
+ ;
+ }
+ BOOST_CHECK(got_xml_error);
+}
+
+BOOST_AUTO_UNIT_TEST( test_router_flexml_3 )
+{
+ try
+ {
+ std::string xmlconf = "<?xml version=\"1.0\"?>\n"
+ "<y:yp2 xmlns:y=\"http://indexdata.dk/yp2/config/1\">\n"
+ " <start route=\"start\"/>\n"
+ " <filters>\n"
+ " <filter id=\"front_default\" type=\"frontend-net\">\n"
+ " <port>210</port>\n"
+ " </filter>\n"
+ " <filter id=\"log_cout\" type=\"log\">\n"
+ " <logfile>mylog.log</logfile>\n"
+ " </filter>\n"
+ " </filters>\n"
+ " <routes>\n"
+ " <route id=\"start\">\n"
+ " <filter refid=\"front_default\"/>\n"
+ " <filter refid=\"log_cout\"/>\n"
+ " </route>\n"
+ " </routes>\n"
+ "</y:yp2>\n";
+
+ yp2::RouterFleXML rflexml(xmlconf);
+ }
+ catch ( ... ) {
+ BOOST_CHECK (false);
+ }
+}
+
+
+
/*
* Local variables:
* c-basic-offset: 4