1 /* This file is part of Metaproxy.
2 Copyright (C) 2005-2009 Index Data
4 Metaproxy is free software; you can redistribute it and/or modify it under
5 the terms of the GNU General Public License as published by the Free
6 Software Foundation; either version 2, or (at your option) any later
9 Metaproxy is distributed in the hope that it will be useful, but WITHOUT ANY
10 WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20 #include "filter_bounce.hpp"
22 #include "gduutil.hpp"
23 //#include "sru_util.hpp"
24 #include "router_chain.hpp"
25 #include "session.hpp"
26 #include "package.hpp"
31 #define BOOST_AUTO_TEST_MAIN
32 #define BOOST_TEST_DYN_LINK
33 #include <boost/test/auto_unit_test.hpp>
38 using namespace boost::unit_test;
40 namespace mp = metaproxy_1;
41 using namespace mp::util;
43 void check_bounce_z3950(mp::RouterChain &router, int request, int response)
48 std::cout << "check_bounce_z3950\n";
50 // Create package with Z39.50 init request in it
54 Z_APDU *apdu = zget_APDU(odr, request);
56 pack.request() = apdu;
59 pack.router(router).move();
61 // Inspect bounced back request
62 yazpp_1::GDU *gdu_req = &pack.request();
63 yazpp_1::GDU *gdu_res = &pack.response();
65 Z_GDU *z_gdu_req = gdu_req->get();
66 Z_GDU *z_gdu_res = gdu_res->get();
68 BOOST_CHECK(z_gdu_req);
71 std::cout << "Z_GDU " << *(z_gdu_req) << "\n";
72 BOOST_CHECK_EQUAL(z_gdu_req->which, Z_GDU_Z3950);
73 BOOST_CHECK_EQUAL(z_gdu_req->u.z3950->which, request);
76 BOOST_CHECK(z_gdu_res);
79 std::cout << "Z_GDU " << *(z_gdu_res) << "\n";
80 BOOST_CHECK_EQUAL(z_gdu_res->which, Z_GDU_Z3950);
81 BOOST_CHECK_EQUAL(z_gdu_res->u.z3950->which, response);
85 void check_bounce_http(mp::RouterChain &router)
90 std::cout << "check_bounce_http\n";
92 // Create package with Z39.50 init request in it
96 Z_GDU *gdu = z_get_HTTP_Request(odr);
97 //z_get_HTTP_Request_host_path(odr, host, path);
101 pack.router(router).move();
103 // Inspect bounced back request
104 yazpp_1::GDU *gdu_req = &pack.request();
105 yazpp_1::GDU *gdu_res = &pack.response();
107 Z_GDU *z_gdu_req = gdu_req->get();
108 Z_GDU *z_gdu_res = gdu_res->get();
110 BOOST_CHECK(z_gdu_req);
113 std::cout << "Z_GDU " << *(z_gdu_req) << "\n";
114 BOOST_CHECK_EQUAL(z_gdu_req->which, Z_GDU_HTTP_Request);
117 BOOST_CHECK(z_gdu_res);
120 std::cout << "Z_GDU " << *(z_gdu_res) << "\n";
121 BOOST_CHECK_EQUAL(z_gdu_res->which, Z_GDU_HTTP_Response);
125 BOOST_AUTO_TEST_CASE( test_filter_bounce_1 )
129 mp::filter::Bounce f_bounce;
136 BOOST_AUTO_TEST_CASE( test_filter_bounce_2 )
140 mp::RouterChain router;
141 mp::filter::Bounce f_bounce;
142 router.append(f_bounce);
144 check_bounce_z3950(router,
145 Z_APDU_initRequest, Z_APDU_close);
146 //check_bounce_z3950(router,
147 // Z_APDU_searchRequest, Z_APDU_close);
148 check_bounce_z3950(router,
149 Z_APDU_presentRequest, Z_APDU_close);
150 check_bounce_z3950(router,
151 Z_APDU_deleteResultSetRequest, Z_APDU_close);
152 //check_bounce_z3950(router,
153 // Z_APDU_accessControlRequest, Z_APDU_close);
154 check_bounce_z3950(router,
155 Z_APDU_resourceControlRequest, Z_APDU_close);
156 check_bounce_z3950(router,
157 Z_APDU_triggerResourceControlRequest, Z_APDU_close);
158 check_bounce_z3950(router,
159 Z_APDU_resourceReportRequest, Z_APDU_close);
160 //check_bounce_z3950(router,
161 // Z_APDU_scanRequest, Z_APDU_close);
162 //check_bounce_z3950(router,
163 // Z_APDU_sortRequest, Z_APDU_close);
164 check_bounce_z3950(router,
165 Z_APDU_segmentRequest, Z_APDU_close);
166 //check_bounce_z3950(router,
167 // Z_APDU_extendedServicesRequest, Z_APDU_close);
168 check_bounce_z3950(router,
169 Z_APDU_close , Z_APDU_close);
170 //check_bounce_z3950(router,
171 // Z_APDU_duplicateDetectionRequest, Z_APDU_close);
180 BOOST_AUTO_TEST_CASE( test_filter_bounce_3 )
184 mp::RouterChain router;
185 mp::filter::Bounce f_bounce;
186 router.append(f_bounce);
188 check_bounce_http(router);
199 * c-file-style: "Stroustrup"
200 * indent-tabs-mode: nil
202 * vim: shiftwidth=4 tabstop=8 expandtab