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