1 /* $Id: test_filter_virt_db.cpp,v 1.7 2005-10-26 18:53:49 adam Exp $
2 Copyright (c) 2005, Index Data.
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;
29 BOOST_AUTO_TEST_CASE( test_filter_virt_db_1 )
33 yp2::filter::Virt_db vdb;
40 BOOST_AUTO_TEST_CASE( test_filter_virt_db_2 )
44 yp2::RouterChain router;
46 yp2::filter::Virt_db vdb;
50 // Create package with Z39.50 init request in it
51 // Since there is not vhost given, the virt will make its
52 // own init response (regardless of backend)
55 ODR odr = odr_createmem(ODR_ENCODE);
56 Z_APDU *apdu = zget_APDU(odr, Z_APDU_initRequest);
60 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(yp2::Package &pack, yp2::Router &router)
86 // Create package with Z39.50 init request in it
87 ODR odr = odr_createmem(ODR_ENCODE);
88 Z_APDU *apdu = zget_APDU(odr, Z_APDU_initRequest);
94 pack.request() = apdu;
98 pack.router(router).move();
100 // Inspect that we got Z39.50 init response
101 yazpp_1::GDU *gdu = &pack.response();
103 BOOST_CHECK(!pack.session().is_closed());
105 Z_GDU *z_gdu = gdu->get();
109 BOOST_CHECK_EQUAL(z_gdu->which, Z_GDU_Z3950);
110 BOOST_CHECK_EQUAL(z_gdu->u.z3950->which, Z_APDU_initResponse);
113 static void search(yp2::Package &pack, yp2::Router &router,
114 const std::string &query, const char *db,
117 // Create package with Z39.50 search request in it
119 ODR odr = odr_createmem(ODR_ENCODE);
120 Z_APDU *apdu = zget_APDU(odr, Z_APDU_searchRequest);
122 yp2::util::pqf(odr, apdu, query);
124 apdu->u.searchRequest->resultSetName = odr_strdup(odr, setname);
126 apdu->u.searchRequest->num_databaseNames = 1;
127 apdu->u.searchRequest->databaseNames = (char**)
128 odr_malloc(odr, sizeof(char *));
129 apdu->u.searchRequest->databaseNames[0] = odr_strdup(odr, db);
135 pack.request() = apdu;
139 Z_GDU *gdu_test = pack.request().get();
140 BOOST_CHECK(gdu_test);
143 pack.router(router).move();
145 // Inspect that we got Z39.50 search response
146 yazpp_1::GDU *gdu = &pack.response();
148 BOOST_CHECK(!pack.session().is_closed());
150 Z_GDU *z_gdu = gdu->get();
154 BOOST_CHECK_EQUAL(z_gdu->which, Z_GDU_Z3950);
155 BOOST_CHECK_EQUAL(z_gdu->u.z3950->which, Z_APDU_searchResponse);
158 static void present(yp2::Package &pack, yp2::Router &router,
159 int start, int number,
162 // Create package with Z39.50 present request in it
164 ODR odr = odr_createmem(ODR_ENCODE);
165 Z_APDU *apdu = zget_APDU(odr, Z_APDU_presentRequest);
167 apdu->u.presentRequest->resultSetId = odr_strdup(odr, setname);
168 *apdu->u.presentRequest->resultSetStartPoint = start;
169 *apdu->u.presentRequest->numberOfRecordsRequested = number;
175 pack.request() = apdu;
179 Z_GDU *gdu_test = pack.request().get();
180 BOOST_CHECK(gdu_test);
183 pack.router(router).move();
185 // Inspect that we got Z39.50 present response
186 yazpp_1::GDU *gdu = &pack.response();
188 BOOST_CHECK(!pack.session().is_closed());
190 Z_GDU *z_gdu = gdu->get();
194 BOOST_CHECK_EQUAL(z_gdu->which, Z_GDU_Z3950);
195 BOOST_CHECK_EQUAL(z_gdu->u.z3950->which, Z_APDU_presentResponse);
198 BOOST_AUTO_TEST_CASE( test_filter_virt_db_3 )
202 yp2::RouterChain router;
204 yp2::filter::Log filter_log1("FRONT");
206 router.append(filter_log1);
209 yp2::filter::Virt_db vdb;
211 vdb.add_map_db2vhost("Default", "localhost:210");
212 yp2::filter::Log filter_log2("BACK");
214 router.append(filter_log2);
216 yp2::filter::Backend_test btest;
217 router.append(btest);
219 yp2::Session session1;
223 yp2::Package pack(session1, origin1);
227 // search for database for which there is no map
228 yp2::Package pack(session1, origin1);
229 search(pack, router, "computer", "bad_database", "default");
232 // search for database for which there a map
233 yp2::Package pack(session1, origin1);
234 search(pack, router, "other", "Default", "default");
237 // present from last search
238 yp2::Package pack(session1, origin1);
239 present(pack, router, 1, 2, "default");
251 * indent-tabs-mode: nil
252 * c-file-style: "stroustrup"
254 * vim: shiftwidth=4 tabstop=8 expandtab