1 /* $Id: test_filter_virt_db.cpp,v 1.2 2005-10-25 11:48:30 adam Exp $
2 Copyright (c) 2005, Index Data.
11 #include "filter_virt_db.hpp"
12 #include "filter_backend_test.hpp"
13 #include "filter_log.hpp"
16 #include "session.hpp"
17 #include "package.hpp"
19 #define BOOST_AUTO_TEST_MAIN
20 #include <boost/test/auto_unit_test.hpp>
23 #include <yaz/pquery.h>
24 #include <yaz/otherinfo.h>
25 using namespace boost::unit_test;
28 BOOST_AUTO_TEST_CASE( test_filter_virt_db_1 )
32 yp2::filter::Virt_db vdb;
39 BOOST_AUTO_TEST_CASE( test_filter_virt_db_2 )
43 yp2::RouterChain router;
45 yp2::filter::Virt_db vdb;
49 // Create package with Z39.50 init request in it
50 // Since there is not vhost given, the virt will make its
51 // own init response (regardless of backend)
54 ODR odr = odr_createmem(ODR_ENCODE);
55 Z_APDU *apdu = zget_APDU(odr, Z_APDU_initRequest);
59 pack.request() = apdu;
63 pack.router(router).move();
65 // Inspect that we got Z39.50 init Response OK.
66 yazpp_1::GDU *gdu = &pack.response();
68 BOOST_CHECK(!pack.session().is_closed());
70 Z_GDU *z_gdu = gdu->get();
73 BOOST_CHECK_EQUAL(z_gdu->which, Z_GDU_Z3950);
74 BOOST_CHECK_EQUAL(z_gdu->u.z3950->which, Z_APDU_initResponse);
83 static void init(yp2::Package &pack, yp2::Router &router)
85 // Create package with Z39.50 init request in it
86 ODR odr = odr_createmem(ODR_ENCODE);
87 Z_APDU *apdu = zget_APDU(odr, Z_APDU_initRequest);
93 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(yp2::Package &pack, yp2::Router &router,
113 const char *pqf_query, const char *db,
116 // Create package with Z39.50 search request in it
118 ODR odr = odr_createmem(ODR_ENCODE);
119 Z_APDU *apdu = zget_APDU(odr, Z_APDU_searchRequest);
121 YAZ_PQF_Parser pqf_parser = yaz_pqf_create();
123 Z_RPNQuery *rpn = yaz_pqf_parse(pqf_parser, odr, pqf_query);
128 query.which = Z_Query_type_1;
129 query.u.type_1 = rpn;
131 apdu->u.searchRequest->resultSetName = odr_strdup(odr, setname);
133 apdu->u.searchRequest->query = &query;
135 apdu->u.searchRequest->num_databaseNames = 1;
136 apdu->u.searchRequest->databaseNames = (char**)
137 odr_malloc(odr, sizeof(char *));
138 apdu->u.searchRequest->databaseNames[0] = odr_strdup(odr, db);
144 pack.request() = apdu;
148 Z_GDU *gdu_test = pack.request().get();
149 BOOST_CHECK(gdu_test);
152 pack.router(router).move();
154 // Inspect that we got Z39.50 search response
155 yazpp_1::GDU *gdu = &pack.response();
157 BOOST_CHECK(!pack.session().is_closed());
159 Z_GDU *z_gdu = gdu->get();
163 BOOST_CHECK_EQUAL(z_gdu->which, Z_GDU_Z3950);
164 BOOST_CHECK_EQUAL(z_gdu->u.z3950->which, Z_APDU_searchResponse);
167 static void present(yp2::Package &pack, yp2::Router &router,
168 int start, int number,
171 // Create package with Z39.50 present request in it
173 ODR odr = odr_createmem(ODR_ENCODE);
174 Z_APDU *apdu = zget_APDU(odr, Z_APDU_presentRequest);
176 apdu->u.presentRequest->resultSetId = odr_strdup(odr, setname);
177 *apdu->u.presentRequest->resultSetStartPoint = start;
178 *apdu->u.presentRequest->numberOfRecordsRequested = number;
184 pack.request() = apdu;
188 Z_GDU *gdu_test = pack.request().get();
189 BOOST_CHECK(gdu_test);
192 pack.router(router).move();
194 // Inspect that we got Z39.50 present response
195 yazpp_1::GDU *gdu = &pack.response();
197 BOOST_CHECK(!pack.session().is_closed());
199 Z_GDU *z_gdu = gdu->get();
203 BOOST_CHECK_EQUAL(z_gdu->which, Z_GDU_Z3950);
204 BOOST_CHECK_EQUAL(z_gdu->u.z3950->which, Z_APDU_presentResponse);
207 BOOST_AUTO_TEST_CASE( test_filter_virt_db_3 )
211 yp2::RouterChain router;
214 yp2::filter::Log filter_log1;
215 filter_log1.set_prefix("FRONT");
216 router.rule(filter_log1);
219 yp2::filter::Virt_db vdb;
221 vdb.add_map_db2vhost("Default", "localhost:210");
223 yp2::filter::Log filter_log2;
224 filter_log2.set_prefix("BACK");
225 router.rule(filter_log2);
227 yp2::filter::Backend_test btest;
230 yp2::Session session1;
234 yp2::Package pack(session1, origin1);
238 // search for database for which there is no map
239 yp2::Package pack(session1, origin1);
240 search(pack, router, "computer", "bad_database", "default");
243 // search for database for which there a map
244 yp2::Package pack(session1, origin1);
245 search(pack, router, "other", "Default", "default");
248 // present from last search
249 yp2::Package pack(session1, origin1);
250 present(pack, router, 1, 2, "default");
262 * indent-tabs-mode: nil
263 * c-file-style: "stroustrup"
265 * vim: shiftwidth=4 tabstop=8 expandtab