1 /* $Id: test_filter_virt_db.cpp,v 1.11 2006-01-16 17:02:55 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_UNIT_TEST( test_filter_virt_db_1 )
33 yp2::filter::Virt_db vdb;
40 BOOST_AUTO_UNIT_TEST( 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)
56 Z_APDU *apdu = zget_APDU(odr, Z_APDU_initRequest);
60 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
87 Z_APDU *apdu = zget_APDU(odr, Z_APDU_initRequest);
93 pack.request() = apdu;
96 pack.router(router).move();
98 // Inspect that we got Z39.50 init response
99 yazpp_1::GDU *gdu = &pack.response();
101 BOOST_CHECK(!pack.session().is_closed());
103 Z_GDU *z_gdu = gdu->get();
107 BOOST_CHECK_EQUAL(z_gdu->which, Z_GDU_Z3950);
108 BOOST_CHECK_EQUAL(z_gdu->u.z3950->which, Z_APDU_initResponse);
111 static void search(yp2::Package &pack, yp2::Router &router,
112 const std::string &query, const char *db,
115 // Create package with Z39.50 search request in it
118 Z_APDU *apdu = zget_APDU(odr, Z_APDU_searchRequest);
120 yp2::util::pqf(odr, apdu, query);
122 apdu->u.searchRequest->resultSetName = odr_strdup(odr, setname);
124 apdu->u.searchRequest->num_databaseNames = 1;
125 apdu->u.searchRequest->databaseNames = (char**)
126 odr_malloc(odr, sizeof(char *));
127 apdu->u.searchRequest->databaseNames[0] = odr_strdup(odr, db);
133 pack.request() = apdu;
135 Z_GDU *gdu_test = pack.request().get();
136 BOOST_CHECK(gdu_test);
139 pack.router(router).move();
141 // Inspect that we got Z39.50 search response
142 yazpp_1::GDU *gdu = &pack.response();
144 BOOST_CHECK(!pack.session().is_closed());
146 Z_GDU *z_gdu = gdu->get();
150 BOOST_CHECK_EQUAL(z_gdu->which, Z_GDU_Z3950);
151 BOOST_CHECK_EQUAL(z_gdu->u.z3950->which, Z_APDU_searchResponse);
154 static void present(yp2::Package &pack, yp2::Router &router,
155 int start, int number,
158 // Create package with Z39.50 present request in it
161 Z_APDU *apdu = zget_APDU(odr, Z_APDU_presentRequest);
163 apdu->u.presentRequest->resultSetId = odr_strdup(odr, setname);
164 *apdu->u.presentRequest->resultSetStartPoint = start;
165 *apdu->u.presentRequest->numberOfRecordsRequested = number;
171 pack.request() = apdu;
173 Z_GDU *gdu_test = pack.request().get();
174 BOOST_CHECK(gdu_test);
177 pack.router(router).move();
179 // Inspect that we got Z39.50 present response
180 yazpp_1::GDU *gdu = &pack.response();
182 BOOST_CHECK(!pack.session().is_closed());
184 Z_GDU *z_gdu = gdu->get();
188 BOOST_CHECK_EQUAL(z_gdu->which, Z_GDU_Z3950);
189 BOOST_CHECK_EQUAL(z_gdu->u.z3950->which, Z_APDU_presentResponse);
192 BOOST_AUTO_UNIT_TEST( test_filter_virt_db_3 )
196 yp2::RouterChain router;
198 yp2::filter::Log filter_log1("FRONT");
200 router.append(filter_log1);
203 yp2::filter::Virt_db vdb;
205 vdb.add_map_db2target("Default", "localhost:210", "");
206 yp2::filter::Log filter_log2("BACK");
208 router.append(filter_log2);
210 yp2::filter::Backend_test btest;
211 router.append(btest);
213 yp2::Session session1;
217 yp2::Package pack(session1, origin1);
221 // search for database for which there is no map
222 yp2::Package pack(session1, origin1);
223 search(pack, router, "computer", "bad_database", "default");
226 // search for database for which there a map
227 yp2::Package pack(session1, origin1);
228 search(pack, router, "other", "Default", "default");
231 // present from last search
232 yp2::Package pack(session1, origin1);
233 present(pack, router, 1, 2, "default");
245 * indent-tabs-mode: nil
246 * c-file-style: "stroustrup"
248 * vim: shiftwidth=4 tabstop=8 expandtab