Updated footer comment
[metaproxy-moved-to-github.git] / src / test_filter_bounce.cpp
1 /* This file is part of Metaproxy.
2    Copyright (C) 2005-2008 Index Data
3
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
7 version.
8
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
12 for more details.
13
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
17 */
18
19 #include "config.hpp"
20 #include "filter_bounce.hpp"
21 #include "util.hpp"
22 #include "gduutil.hpp"
23 //#include "sru_util.hpp"
24 #include "router_chain.hpp"
25 #include "session.hpp"
26 #include "package.hpp"
27
28 #include <iostream>
29 #include <stdexcept>
30
31 #define BOOST_AUTO_TEST_MAIN
32 #define BOOST_TEST_DYN_LINK
33 #include <boost/test/auto_unit_test.hpp>
34
35
36
37
38 using namespace boost::unit_test;
39
40 namespace mp = metaproxy_1;
41 using namespace mp::util;
42
43 void check_bounce_z3950(mp::RouterChain &router, int request, int response)
44 {
45
46     bool print = false;
47     if (print)
48         std::cout << "check_bounce_z3950\n";
49
50     // Create package with Z39.50 init request in it
51     mp::Package pack;
52         
53     mp::odr odr;
54     Z_APDU *apdu = zget_APDU(odr, request);
55
56     pack.request() = apdu;
57
58     // Put it in router
59     pack.router(router).move(); 
60     
61     // Inspect bounced back request
62     yazpp_1::GDU *gdu_req = &pack.request();
63     yazpp_1::GDU *gdu_res = &pack.response();
64     
65     Z_GDU *z_gdu_req = gdu_req->get();
66     Z_GDU *z_gdu_res = gdu_res->get();
67
68     BOOST_CHECK(z_gdu_req);
69     if (z_gdu_req) {
70         if (print)
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);
74     }
75
76     BOOST_CHECK(z_gdu_res);
77     if (z_gdu_res) {
78         if (print)
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);
82     }
83 }
84
85 void check_bounce_http(mp::RouterChain &router)
86 {
87
88     bool print = false;
89     if (print)
90         std::cout << "check_bounce_http\n";
91
92     // Create package with Z39.50 init request in it
93     mp::Package pack;
94         
95     mp::odr odr;
96     Z_GDU *gdu = z_get_HTTP_Request(odr);
97     //z_get_HTTP_Request_host_path(odr, host, path);
98     pack.request() = gdu;
99
100     // Put it in router
101     pack.router(router).move(); 
102     
103     // Inspect bounced back request
104     yazpp_1::GDU *gdu_req = &pack.request();
105     yazpp_1::GDU *gdu_res = &pack.response();
106     
107     Z_GDU *z_gdu_req = gdu_req->get();
108     Z_GDU *z_gdu_res = gdu_res->get();
109
110     BOOST_CHECK(z_gdu_req);
111     if (z_gdu_req) {
112         if (print)
113             std::cout << "Z_GDU " << *(z_gdu_req) << "\n";
114         BOOST_CHECK_EQUAL(z_gdu_req->which, Z_GDU_HTTP_Request);
115     }
116
117     BOOST_CHECK(z_gdu_res);
118     if (z_gdu_res) {
119         if (print)
120             std::cout << "Z_GDU " << *(z_gdu_res) << "\n";
121         BOOST_CHECK_EQUAL(z_gdu_res->which,  Z_GDU_HTTP_Response);
122     }
123 }
124
125 BOOST_AUTO_TEST_CASE( test_filter_bounce_1 )
126 {
127     try 
128     {
129         mp::filter::Bounce f_bounce;
130     }
131     catch ( ... ) {
132         BOOST_CHECK (false);
133     }
134 }
135
136 BOOST_AUTO_TEST_CASE( test_filter_bounce_2 )
137 {
138     try 
139     {
140         mp::RouterChain router;        
141         mp::filter::Bounce f_bounce;
142         router.append(f_bounce);
143
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);
172
173
174     }
175     catch ( ... ) {
176         BOOST_CHECK (false);
177     }
178 }
179
180 BOOST_AUTO_TEST_CASE( test_filter_bounce_3 )
181 {
182     try 
183     {
184         mp::RouterChain router;        
185         mp::filter::Bounce f_bounce;
186         router.append(f_bounce);
187
188         check_bounce_http(router);
189
190     }
191     catch ( ... ) {
192         BOOST_CHECK (false);
193     }
194 }
195
196 /*
197  * Local variables:
198  * c-basic-offset: 4
199  * c-file-style: "Stroustrup"
200  * indent-tabs-mode: nil
201  * End:
202  * vim: shiftwidth=4 tabstop=8 expandtab
203  */
204