X-Git-Url: http://sru.miketaylor.org.uk/?a=blobdiff_plain;f=src%2Ftest_filter_rewrite.cpp;h=00065a4fda955c1fadad978f1a6769c183721c57;hb=b8c30d9591850c3c0c1f9f8b7e15e76ea5517375;hp=b16768f11f9bd832145772db7801cda08792984e;hpb=917e40f8768670e2c6da49e9d44ca92f01ea52ac;p=metaproxy-moved-to-github.git
diff --git a/src/test_filter_rewrite.cpp b/src/test_filter_rewrite.cpp
index b16768f..00065a4 100644
--- a/src/test_filter_rewrite.cpp
+++ b/src/test_filter_rewrite.cpp
@@ -38,23 +38,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
using namespace boost::unit_test;
namespace mp = metaproxy_1;
-/*
- * The global testconfig is commented out, as it won't even compile
- * on old Centos5 machines
-struct TestConfig {
- TestConfig()
- {
- std::cout << "global setup\n";
- yaz_log_init_level(YLOG_ALL);
- }
- ~TestConfig()
- {
- std::cout << "global teardown\n";
- }
-};
-
-BOOST_GLOBAL_FIXTURE( TestConfig );
-*/
BOOST_AUTO_TEST_CASE( test_filter_rewrite_1 )
{
@@ -63,30 +46,47 @@ BOOST_AUTO_TEST_CASE( test_filter_rewrite_1 )
std::cout << "Running non-xml config test case" << std::endl;
mp::RouterChain router;
mp::filter::HttpRewrite fhr;
-
+
std::string xmlconf =
"\n"
"\n"
- " \n"
- " \n"
+ " \n"
+ " \n"
+ " \n"
" \n"
" \n"
- " \n"
- " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
" \n"
- " \n"
- " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
" \n"
+ " to='${proto}${pxhost}/${pxpath}/${host}/${path}' />\n"
" \n"
- " \n"
- " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
" \n"
"\n"
;
@@ -99,14 +99,14 @@ BOOST_AUTO_TEST_CASE( test_filter_rewrite_1 )
xmlNode *root_element = xmlDocGetRootElement(doc);
fhr.configure(root_element, true, "");
xmlFreeDoc(doc);
-
+
router.append(fhr);
// create an http request
mp::Package pack;
mp::odr odr;
- Z_GDU *gdu_req = z_get_HTTP_Request_uri(odr,
+ Z_GDU *gdu_req = z_get_HTTP_Request_uri(odr,
"http://proxyhost/proxypath/targetsite/page1.html", 0, 1);
pack.request() = gdu_req;
@@ -127,20 +127,24 @@ BOOST_AUTO_TEST_CASE( test_filter_rewrite_1 )
"}"
""
""
- ""
+ ""
"
"
"Welcome to our website. It doesn't make it easy to get pro"
"xified"
""
" An absolute link"
- ""
" An absolute link"
- "\n"
+ "\n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ " \n"
+ "\n"
+ ;
+
+ std::cout << xmlconf;
+
+ // reading and parsing XML conf
+ xmlDocPtr doc = xmlParseMemory(xmlconf.c_str(), xmlconf.size());
+ BOOST_CHECK(doc);
+ xmlNode *root_element = xmlDocGetRootElement(doc);
+ fhr.configure(root_element, true, "");
+ xmlFreeDoc(doc);
+
+ router.append(fhr);
+
+ // create an http request
+ mp::Package pack;
+
+ mp::odr odr;
+ Z_GDU *gdu_req = z_get_HTTP_Request_uri(odr,
+ "http://proxyhost/proxypath/targetsite/page1.html", 0, 1);
+
+ pack.request() = gdu_req;
- //compare buffers
- std::cout << "Expected result:\n" << resp_expected << std::endl;
+ //create the http response
+
+ const char *resp_buf =
+ "HTTP/1.1 200 OK\r\n"
+ "Content-Length: 140\r\n"
+ "Content-Type: application/javascript\r\n"
+ "Link: ; rel=absolute\r\n"
+ "Link: ; rel=relative\r\n"
+ "\r\n"
+ "// \"\n"
+ "my.location = 'http://targetsite/images/bg.png';\n"
+ "my.other = \"http://targetsite/images/fg.png\";\n"
+ "my.thrd = \"other\";\n"
+ "// \"http://targetsite/images/bg.png\n";
- ODR enc = odr_createmem(ODR_ENCODE);
- z_GDU(enc, &gdu_res_rew, 0, 0);
- char *resp_result;
- int resp_result_len;
- resp_result = odr_getbuf(enc, &resp_result_len, 0);
-
- BOOST_CHECK(resp_result);
- BOOST_CHECK_EQUAL((size_t) resp_result_len, strlen(resp_expected));
+ const char *resp_expected =
+ "HTTP/1.1 200 OK\r\n"
+ "Content-Length: 195\r\n"
+ "Content-Type: application/javascript\r\n"
+ "Link: ; rel=absolute\r\n"
+ "Link: ; rel=relative\r\n"
+ "\r\n"
+ "// \"\n"
+ "my.location = 'http://proxyhost/proxypath/targetsite/images/bg.png';\n"
+ "my.other = \"http://proxyhost/proxypath/targetsite/images/fg.png\";\n"
+ "my.thrd = \"other\";\n"
+ "// \"http://targetsite/images/bg.png\n";
- std::cout << "Rewritten result:\n" << std::endl;
- fwrite(resp_result, 1, resp_result_len, stdout);
- std::cout << "\nRewritten result buf len: " << resp_result_len
- << std::endl;
+ Z_GDU *gdu_res;
+ mp::odr dec(ODR_DECODE);
+ mp::odr enc(ODR_ENCODE);
+ odr_setbuf(dec, (char *) resp_buf, strlen(resp_buf), 0);
+ int r = z_GDU(dec, &gdu_res, 0, 0);
- BOOST_CHECK(memcmp(resp_result, resp_expected, resp_result_len) == 0);
+ BOOST_CHECK(r);
+ if (r)
+ {
+ BOOST_CHECK_EQUAL(gdu_res->which, Z_GDU_HTTP_Response);
- odr_destroy(dec);
- odr_destroy(enc);
+ pack.response() = gdu_res;
+
+ //feed to the router
+ pack.router(router).move();
+
+ //analyze the response
+ Z_GDU *gdu_res_rew = pack.response().get();
+ BOOST_CHECK(gdu_res_rew);
+ BOOST_CHECK_EQUAL(gdu_res_rew->which, Z_GDU_HTTP_Response);
+
+ Z_HTTP_Response *hres = gdu_res_rew->u.HTTP_Response;
+ BOOST_CHECK(hres);
+
+ z_GDU(enc, &gdu_res_rew, 0, 0);
+ char *resp_result;
+ int resp_result_len;
+ resp_result = odr_getbuf(enc, &resp_result_len, 0);
+
+ int equal = ((size_t) resp_result_len == strlen(resp_expected))
+ && !memcmp(resp_result, resp_expected, resp_result_len);
+ BOOST_CHECK(equal);
+
+ if (!equal)
+ {
+ //compare buffers
+ std::cout << "Expected result:\n" << resp_expected << "\n";
+ std::cout << "Got result:\n" << "\n";
+ fflush(stdout);
+ fwrite(resp_result, 1, resp_result_len, stdout);
+ fflush(stdout);
+ std::cout << "\nGot result buf len: " << resp_result_len
+ << "\n";
+ }
+ }
}
catch (std::exception & e) {
std::cout << e.what();
@@ -217,7 +378,6 @@ BOOST_AUTO_TEST_CASE( test_filter_rewrite_1 )
}
}
-
/*
* Local variables:
* c-basic-offset: 4