1 /* $Id: test_filter_virt_db.cpp,v 1.13 2006-06-10 14:29:12 adam Exp $
2 Copyright (c) 2005-2006, Index Data.
4 See the LICENSE file for details
12 #include "filter_virt_db.hpp"
13 #include "filter_backend_test.hpp"
14 #include "filter_log.hpp"
16 #include "router_chain.hpp"
17 #include "session.hpp"
18 #include "package.hpp"
20 #define BOOST_AUTO_TEST_MAIN
21 #include <boost/test/auto_unit_test.hpp>
24 #include <yaz/pquery.h>
25 #include <yaz/otherinfo.h>
26 using namespace boost::unit_test;
28 namespace mp = metaproxy_1;
30 BOOST_AUTO_UNIT_TEST( test_filter_virt_db_1 )
34 mp::filter::Virt_db vdb;
41 BOOST_AUTO_UNIT_TEST( test_filter_virt_db_2 )
45 mp::RouterChain router;
47 mp::filter::Virt_db vdb;
51 // Create package with Z39.50 init request in it
52 // Since there is not vhost given, the virt will make its
53 // own init response (regardless of backend)
57 Z_APDU *apdu = zget_APDU(odr, Z_APDU_initRequest);
61 pack.request() = apdu;
64 pack.router(router).move();
66 // Inspect that we got Z39.50 init Response OK.
67 yazpp_1::GDU *gdu = &pack.response();
69 BOOST_CHECK(!pack.session().is_closed());
71 Z_GDU *z_gdu = gdu->get();
74 BOOST_CHECK_EQUAL(z_gdu->which, Z_GDU_Z3950);
75 BOOST_CHECK_EQUAL(z_gdu->u.z3950->which, Z_APDU_initResponse);
84 static void init(mp::Package &pack, mp::Router &router)
86 // Create package with Z39.50 init request in it
88 Z_APDU *apdu = zget_APDU(odr, Z_APDU_initRequest);
94 pack.request() = apdu;
97 pack.router(router).move();
99 // Inspect that we got Z39.50 init response
100 yazpp_1::GDU *gdu = &pack.response();
102 BOOST_CHECK(!pack.session().is_closed());
104 Z_GDU *z_gdu = gdu->get();
108 BOOST_CHECK_EQUAL(z_gdu->which, Z_GDU_Z3950);
109 BOOST_CHECK_EQUAL(z_gdu->u.z3950->which, Z_APDU_initResponse);
112 static void search(mp::Package &pack, mp::Router &router,
113 const std::string &query, const char *db,
116 // Create package with Z39.50 search request in it
119 Z_APDU *apdu = zget_APDU(odr, Z_APDU_searchRequest);
121 mp::util::pqf(odr, apdu, query);
123 apdu->u.searchRequest->resultSetName = odr_strdup(odr, setname);
125 apdu->u.searchRequest->num_databaseNames = 1;
126 apdu->u.searchRequest->databaseNames = (char**)
127 odr_malloc(odr, sizeof(char *));
128 apdu->u.searchRequest->databaseNames[0] = odr_strdup(odr, db);
134 pack.request() = apdu;
136 Z_GDU *gdu_test = pack.request().get();
137 BOOST_CHECK(gdu_test);
140 pack.router(router).move();
142 // Inspect that we got Z39.50 search response
143 yazpp_1::GDU *gdu = &pack.response();
145 BOOST_CHECK(!pack.session().is_closed());
147 Z_GDU *z_gdu = gdu->get();
151 BOOST_CHECK_EQUAL(z_gdu->which, Z_GDU_Z3950);
152 BOOST_CHECK_EQUAL(z_gdu->u.z3950->which, Z_APDU_searchResponse);
155 static void present(mp::Package &pack, mp::Router &router,
156 int start, int number,
159 // Create package with Z39.50 present request in it
162 Z_APDU *apdu = zget_APDU(odr, Z_APDU_presentRequest);
164 apdu->u.presentRequest->resultSetId = odr_strdup(odr, setname);
165 *apdu->u.presentRequest->resultSetStartPoint = start;
166 *apdu->u.presentRequest->numberOfRecordsRequested = number;
172 pack.request() = apdu;
174 Z_GDU *gdu_test = pack.request().get();
175 BOOST_CHECK(gdu_test);
178 pack.router(router).move();
180 // Inspect that we got Z39.50 present response
181 yazpp_1::GDU *gdu = &pack.response();
183 BOOST_CHECK(!pack.session().is_closed());
185 Z_GDU *z_gdu = gdu->get();
189 BOOST_CHECK_EQUAL(z_gdu->which, Z_GDU_Z3950);
190 BOOST_CHECK_EQUAL(z_gdu->u.z3950->which, Z_APDU_presentResponse);
193 BOOST_AUTO_UNIT_TEST( test_filter_virt_db_3 )
197 mp::RouterChain router;
199 mp::filter::Log filter_log1("FRONT");
201 router.append(filter_log1);
204 mp::filter::Virt_db vdb;
206 vdb.add_map_db2target("Default", "localhost:210", "");
207 mp::filter::Log filter_log2("BACK");
209 router.append(filter_log2);
211 mp::filter::Backend_test btest;
212 router.append(btest);
214 mp::Session session1;
218 mp::Package pack(session1, origin1);
222 // search for database for which there is no map
223 mp::Package pack(session1, origin1);
224 search(pack, router, "computer", "bad_database", "default");
227 // search for database for which there a map
228 mp::Package pack(session1, origin1);
229 search(pack, router, "other", "Default", "default");
232 // present from last search
233 mp::Package pack(session1, origin1);
234 present(pack, router, 1, 2, "default");
246 * indent-tabs-mode: nil
247 * c-file-style: "stroustrup"
249 * vim: shiftwidth=4 tabstop=8 expandtab