X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=test%2Fapi%2Ft4.c;h=de48f897b4aecc3985d99580b0107e7e5e90f900;hb=97a7adeb9e5059463f039495cc01cfa448463a27;hp=4d3da92772390303ba5439d742eff246f599ced2;hpb=d576d9f0ae1a45fef6fe3281cac1a24999fc8106;p=idzebra-moved-to-github.git diff --git a/test/api/t4.c b/test/api/t4.c index 4d3da92..de48f89 100644 --- a/test/api/t4.c +++ b/test/api/t4.c @@ -1,8 +1,5 @@ -/* $Id: t4.c,v 1.7 2004-06-14 23:43:32 adam Exp $ - Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004 - Index Data Aps - -This file is part of the Zebra server. +/* This file is part of the Zebra server. + Copyright (C) 1995-2008 Index Data Zebra is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free @@ -15,92 +12,125 @@ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with Zebra; see the file LICENSE.zebra. If not, write to the -Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA -02111-1307, USA. +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ -#include -#include -#include +/* t4 - insert a small pile of records, search and fetch them */ -/* read zebra.cfg from env var srcdir if it exists; otherwise current dir */ -static ZebraService start_service() -{ - char cfg[256]; - char *srcdir = getenv("srcdir"); - sprintf(cfg, "%.200s%szebra.cfg", srcdir ? srcdir : "", srcdir ? "/" : ""); - return zebra_start(cfg, 0, 0); -} +#include "testlib.h" + +const char *myrec[] = { + "\n" + " My title\n" + "\n", + 0}; -int main(int argc, char **argv) +#define NUMBER_TO_FETCH_MAX 1000 + +static void tst(int argc, char **argv) { int i; - ZebraService zs; - ZebraHandle zh; - const char *myrec = - "\n" - " My title\n" - "\n"; + int number_to_be_inserted = 5; + int number_to_fetch = 5; - yaz_log_init_file("t4.log"); + ZebraService zs = tl_start_up(0, argc, argv); + ZebraHandle zh = zebra_open(zs, 0); - nmem_init (); - - zs = start_service(); - zh = zebra_open (zs); - zebra_init(zh); - zebra_select_database(zh, "Default"); + YAZ_CHECK(tl_init_data(zh, myrec)); + + YAZ_CHECK(zebra_begin_trans (zh, 1) == ZEBRA_OK); + + for (i = 0; i< number_to_be_inserted-1; i++) + { /* -1 since already inserted one in init_data */ + zebra_add_record(zh, myrec[0], strlen(myrec[0])); + } + YAZ_CHECK(zebra_end_trans(zh) == ZEBRA_OK); - zebra_begin_trans (zh, 1); - for (i = 0; i<1200; i++) - zebra_add_record (zh, myrec, strlen(myrec)); - zebra_end_trans (zh); zebra_close(zh); zebra_stop(zs); - zs = start_service(); - zh = zebra_open (zs); - zebra_select_database(zh, "Default"); + zs = tl_zebra_start(""); + zh = zebra_open(zs, 0); + YAZ_CHECK(zebra_select_database(zh, "Default") == ZEBRA_OK); + zebra_set_resource(zh, "sortmax", "3"); /* make small sort boundary */ for (i = 0; i<2; i++) { - ZebraRetrievalRecord retrievalRecord[1001]; + ZEBRA_RES ret; + ZebraRetrievalRecord retrievalRecord[NUMBER_TO_FETCH_MAX]; char setname[20]; int j; - ODR odr_input = odr_createmem (ODR_DECODE); - ODR odr_output = odr_createmem (ODR_DECODE); + ODR odr_input = odr_createmem(ODR_DECODE); + ODR odr_output = odr_createmem(ODR_DECODE); YAZ_PQF_Parser parser = yaz_pqf_create(); - Z_RPNQuery *query = yaz_pqf_parse(parser, odr_input, - "@attr 1=4 my"); - int hits; + Z_RPNQuery *query = yaz_pqf_parse(parser, odr_input, "@attr 1=4 my"); + zint hits; sprintf(setname, "s%d", i+1); - zebra_search_RPN (zh, odr_input, query, setname, &hits); + ret = zebra_search_RPN(zh, odr_input, query, setname, &hits); + if (ret != ZEBRA_OK) + { + int code = zebra_errCode(zh); + yaz_log(YLOG_WARN, "Unexpected error code=%d", code); + exit(1); + } + if (hits != number_to_be_inserted) + { + yaz_log(YLOG_WARN, "Unexpected hit count " ZINT_FORMAT + "(should be %d)", hits, number_to_be_inserted); + exit(1); + } yaz_pqf_destroy(parser); - odr_destroy (odr_input); + odr_destroy(odr_input); - zebra_begin_trans (zh, 1); + YAZ_CHECK(zebra_begin_trans(zh, 1) == ZEBRA_OK); - for (j = 0; j<1001; j++) + for (j = 0; j < number_to_fetch; j++) retrievalRecord[j].position = j+1; - zebra_records_retrieve (zh, odr_output, setname, 0, - VAL_TEXT_XML, 1001, retrievalRecord); - - - odr_destroy (odr_output); + ret = zebra_records_retrieve(zh, odr_output, setname, 0, + yaz_oid_recsyn_xml, number_to_fetch, + retrievalRecord); + if (ret != ZEBRA_OK) + { + int code = zebra_errCode(zh); + yaz_log(YLOG_FATAL, "zebra_records_retrieve returned error %d", + code); + exit(1); + } + + for (j = 0; j < number_to_fetch; j++) + { + if (!retrievalRecord[j].buf) + { + yaz_log(YLOG_FATAL, "No record buf at position %d", j); + exit(1); + } + if (!retrievalRecord[j].len) + { + yaz_log(YLOG_FATAL, "No record len at position %d", j); + exit(1); + } + } + odr_destroy(odr_output); + + YAZ_CHECK(zebra_end_trans(zh) == ZEBRA_OK); + } + zebra_commit(zh); + YAZ_CHECK(tl_close_down(zh, zs)); +} - zebra_end_trans (zh); +TL_MAIN - } - zebra_commit (zh); - zebra_close (zh); - zebra_stop (zs); +/* + * Local variables: + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + * vim: shiftwidth=4 tabstop=8 expandtab + */ - nmem_exit (); - xmalloc_trav ("x"); - exit (0); -}