51d3d186f78983cf5d2dc5bc774b9b3731a15a1e
[metaproxy-moved-to-github.git] / src / test_filter_bounce.cpp
1 /* $Id: test_filter_bounce.cpp,v 1.1 2006-09-28 10:33:04 marc Exp $
2    Copyright (c) 2005-2006, Index Data.
3
4    See the LICENSE file for details
5  */
6
7 #include "config.hpp"
8 #include "filter_bounce.hpp"
9 #include "util.hpp"
10 #include "gduutil.hpp"
11 //#include "sru_util.hpp"
12 #include "router_chain.hpp"
13 #include "session.hpp"
14 #include "package.hpp"
15
16 #include <iostream>
17 #include <stdexcept>
18
19 #define BOOST_AUTO_TEST_MAIN
20 #include <boost/test/auto_unit_test.hpp>
21
22
23
24
25 using namespace boost::unit_test;
26
27 namespace mp = metaproxy_1;
28 using namespace mp::util;
29
30 void check_bounce_z3950(mp::RouterChain &router, int request, int response)
31 {
32
33     bool print = false;
34     if (print)
35         std::cout << "check_bounce_z3950\n";
36
37     // Create package with Z39.50 init request in it
38     mp::Package pack;
39         
40     mp::odr odr;
41     Z_APDU *apdu = zget_APDU(odr, request);
42
43     pack.request() = apdu;
44
45     // Put it in router
46     pack.router(router).move(); 
47     
48     // Inspect bounced back request
49     yazpp_1::GDU *gdu_req = &pack.request();
50     yazpp_1::GDU *gdu_res = &pack.response();
51     
52     Z_GDU *z_gdu_req = gdu_req->get();
53     Z_GDU *z_gdu_res = gdu_res->get();
54
55     BOOST_CHECK(z_gdu_req);
56     if (z_gdu_req) {
57         if (print)
58             std::cout << "Z_GDU " << *(z_gdu_req) << "\n";
59         BOOST_CHECK_EQUAL(z_gdu_req->which, Z_GDU_Z3950);
60         BOOST_CHECK_EQUAL(z_gdu_req->u.z3950->which, request);
61     }
62
63     BOOST_CHECK(z_gdu_res);
64     if (z_gdu_res) {
65         if (print)
66             std::cout << "Z_GDU " << *(z_gdu_res) << "\n";
67         BOOST_CHECK_EQUAL(z_gdu_res->which, Z_GDU_Z3950);
68         BOOST_CHECK_EQUAL(z_gdu_res->u.z3950->which, response);
69     }
70 }
71
72 void check_bounce_http(mp::RouterChain &router)
73 {
74
75     bool print = false;
76     if (print)
77         std::cout << "check_bounce_http\n";
78
79     // Create package with Z39.50 init request in it
80     mp::Package pack;
81         
82     mp::odr odr;
83     Z_GDU *gdu = z_get_HTTP_Request(odr);
84     //z_get_HTTP_Request_host_path(odr, host, path);
85     pack.request() = gdu;
86
87     // Put it in router
88     pack.router(router).move(); 
89     
90     // Inspect bounced back request
91     yazpp_1::GDU *gdu_req = &pack.request();
92     yazpp_1::GDU *gdu_res = &pack.response();
93     
94     Z_GDU *z_gdu_req = gdu_req->get();
95     Z_GDU *z_gdu_res = gdu_res->get();
96
97     BOOST_CHECK(z_gdu_req);
98     if (z_gdu_req) {
99         if (print)
100             std::cout << "Z_GDU " << *(z_gdu_req) << "\n";
101         BOOST_CHECK_EQUAL(z_gdu_req->which, Z_GDU_HTTP_Request);
102     }
103
104     BOOST_CHECK(z_gdu_res);
105     if (z_gdu_res) {
106         if (print)
107             std::cout << "Z_GDU " << *(z_gdu_res) << "\n";
108         BOOST_CHECK_EQUAL(z_gdu_res->which,  Z_GDU_HTTP_Response);
109     }
110 }
111
112 BOOST_AUTO_UNIT_TEST( test_filter_bounce_1 )
113 {
114     try 
115     {
116         mp::filter::Bounce f_bounce;
117     }
118     catch ( ... ) {
119         BOOST_CHECK (false);
120     }
121 }
122
123 BOOST_AUTO_UNIT_TEST( test_filter_bounce_2 )
124 {
125     try 
126     {
127         mp::RouterChain router;        
128         mp::filter::Bounce f_bounce;
129         router.append(f_bounce);
130
131         check_bounce_z3950(router, 
132                            Z_APDU_initRequest, Z_APDU_close);
133         //check_bounce_z3950(router, 
134         //                   Z_APDU_searchRequest, Z_APDU_close);
135         check_bounce_z3950(router, 
136                            Z_APDU_presentRequest, Z_APDU_close);
137         check_bounce_z3950(router, 
138                            Z_APDU_deleteResultSetRequest, Z_APDU_close);
139         //check_bounce_z3950(router, 
140         //                   Z_APDU_accessControlRequest, Z_APDU_close);
141         check_bounce_z3950(router, 
142                            Z_APDU_resourceControlRequest, Z_APDU_close);
143         check_bounce_z3950(router, 
144                            Z_APDU_triggerResourceControlRequest, Z_APDU_close);
145         check_bounce_z3950(router, 
146                            Z_APDU_resourceReportRequest, Z_APDU_close);
147         //check_bounce_z3950(router, 
148         //                   Z_APDU_scanRequest, Z_APDU_close);
149         //check_bounce_z3950(router, 
150         //                   Z_APDU_sortRequest, Z_APDU_close);
151         check_bounce_z3950(router, 
152                            Z_APDU_segmentRequest, Z_APDU_close);
153         //check_bounce_z3950(router, 
154         //                   Z_APDU_extendedServicesRequest, Z_APDU_close);
155         check_bounce_z3950(router, 
156                            Z_APDU_close , Z_APDU_close);
157         //check_bounce_z3950(router, 
158         //                   Z_APDU_duplicateDetectionRequest, Z_APDU_close);
159
160
161     }
162     catch ( ... ) {
163         BOOST_CHECK (false);
164     }
165 }
166
167 BOOST_AUTO_UNIT_TEST( test_filter_bounce_3 )
168 {
169     try 
170     {
171         mp::RouterChain router;        
172         mp::filter::Bounce f_bounce;
173         router.append(f_bounce);
174
175         check_bounce_http(router);
176
177     }
178     catch ( ... ) {
179         BOOST_CHECK (false);
180     }
181 }
182
183 /*
184  * Local variables:
185  * c-basic-offset: 4
186  * indent-tabs-mode: nil
187  * c-file-style: "stroustrup"
188  * End:
189  * vim: shiftwidth=4 tabstop=8 expandtab
190  */