X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=ztest%2Fztest.c;h=83078339b7bc1500b5d6c654def7cab79338478b;hp=7241d5f6df14819289c96d3eb982d1bce5e238a1;hb=c519e4716646be3b24f7d4d3de99e06e423da865;hpb=069977745832f79608e732d7f1f433eade791f31 diff --git a/ztest/ztest.c b/ztest/ztest.c index 7241d5f..8307833 100644 --- a/ztest/ztest.c +++ b/ztest/ztest.c @@ -1,8 +1,8 @@ /* - * Copyright (c) 1995-2002, Index Data. + * Copyright (C) 1995-2005, Index Data ApS * See the file LICENSE for details. * - * $Id: ztest.c,v 1.53 2002-07-31 14:06:29 adam Exp $ + * $Id: ztest.c,v 1.72 2005-02-01 14:46:48 adam Exp $ */ /* @@ -13,29 +13,40 @@ #include #include +#include #include -#include - #include +static int log_level=0; +static int log_level_set=0; + Z_GenericRecord *dummy_grs_record (int num, ODR o); char *dummy_marc_record (int num, ODR odr); char *dummy_xml_record (int num, ODR odr); -int ztest_search (void *handle, bend_search_rr *rr); -int ztest_sort (void *handle, bend_sort_rr *rr); -int ztest_present (void *handle, bend_present_rr *rr); -int ztest_esrequest (void *handle, bend_esrequest_rr *rr); -int ztest_delete (void *handle, bend_delete_rr *rr); +int ztest_search(void *handle, bend_search_rr *rr); +int ztest_sort(void *handle, bend_sort_rr *rr); +int ztest_present(void *handle, bend_present_rr *rr); +int ztest_esrequest(void *handle, bend_esrequest_rr *rr); +int ztest_delete(void *handle, bend_delete_rr *rr); -int ztest_search (void *handle, bend_search_rr *rr) +int ztest_search(void *handle, bend_search_rr *rr) { if (rr->num_bases != 1) { rr->errcode = 23; return 0; } - if (strcmp (rr->basenames[0], "Default")) +#if NMEM_DEBUG + /* if database is stop, stop this process.. For debugging only. */ + if (!yaz_matchstr (rr->basenames[0], "stop")) + { + nmem_print_list_l(YLOG_LOG); + exit(0); + } +#endif + /* Throw Database unavailable if other than Default */ + if (yaz_matchstr (rr->basenames[0], "Default")) { rr->errcode = 109; rr->errstring = rr->basenames[0]; @@ -52,25 +63,25 @@ int ztest_esrequest (void *handle, bend_esrequest_rr *rr) /* user-defined handle - created in bend_init */ int *counter = (int*) handle; - yaz_log(LOG_LOG, "ESRequest no %d", *counter); + yaz_log(log_level, "ESRequest no %d", *counter); (*counter)++; if (rr->esr->packageName) - yaz_log(LOG_LOG, "packagename: %s", rr->esr->packageName); - yaz_log(LOG_LOG, "Waitaction: %d", *rr->esr->waitAction); + yaz_log(log_level, "packagename: %s", rr->esr->packageName); + yaz_log(log_level, "Waitaction: %d", *rr->esr->waitAction); - yaz_log(LOG_LOG, "function: %d", *rr->esr->function); + yaz_log(log_level, "function: %d", *rr->esr->function); if (!rr->esr->taskSpecificParameters) { - yaz_log (LOG_WARN, "No task specific parameters"); + yaz_log (log_level, "No task specific parameters"); } else if (rr->esr->taskSpecificParameters->which == Z_External_itemOrder) { Z_ItemOrder *it = rr->esr->taskSpecificParameters->u.itemOrder; - yaz_log (LOG_LOG, "Received ItemOrder"); + yaz_log (log_level, "Received ItemOrder"); if (it->which == Z_IOItemOrder_esRequest) { Z_IORequest *ir = it->u.esRequest; @@ -80,22 +91,22 @@ int ztest_esrequest (void *handle, bend_esrequest_rr *rr) if (k && k->contact) { if (k->contact->name) - yaz_log(LOG_LOG, "contact name %s", k->contact->name); + yaz_log(log_level, "contact name %s", k->contact->name); if (k->contact->phone) - yaz_log(LOG_LOG, "contact phone %s", k->contact->phone); + yaz_log(log_level, "contact phone %s", k->contact->phone); if (k->contact->email) - yaz_log(LOG_LOG, "contact email %s", k->contact->email); + yaz_log(log_level, "contact email %s", k->contact->email); } if (k->addlBilling) { - yaz_log(LOG_LOG, "Billing info (not shown)"); + yaz_log(log_level, "Billing info (not shown)"); } if (n->resultSetItem) { - yaz_log(LOG_LOG, "resultsetItem"); - yaz_log(LOG_LOG, "setId: %s", n->resultSetItem->resultSetId); - yaz_log(LOG_LOG, "item: %d", *n->resultSetItem->item); + yaz_log(log_level, "resultsetItem"); + yaz_log(log_level, "setId: %s", n->resultSetItem->resultSetId); + yaz_log(log_level, "item: %d", *n->resultSetItem->item); } if (n->itemRequest) { @@ -106,17 +117,17 @@ int ztest_esrequest (void *handle, bend_esrequest_rr *rr) { oident *ent = oid_getentbyoid(r->direct_reference); if (ent) - yaz_log(LOG_LOG, "OID %s", ent->desc); + yaz_log(log_level, "OID %s", ent->desc); if (ent && ent->value == VAL_TEXT_XML) { - yaz_log (LOG_LOG, "ILL XML request"); + yaz_log (log_level, "ILL XML request"); if (r->which == Z_External_octet) - yaz_log (LOG_LOG, "%.*s", r->u.octet_aligned->len, + yaz_log (log_level, "%.*s", r->u.octet_aligned->len, r->u.octet_aligned->buf); } if (ent && ent->value == VAL_ISO_ILL_1) { - yaz_log (LOG_LOG, "Decode ItemRequest begin"); + yaz_log (log_level, "Decode ItemRequest begin"); if (r->which == ODR_EXTERNAL_single) { odr_setbuf(rr->decode, @@ -125,13 +136,13 @@ int ztest_esrequest (void *handle, bend_esrequest_rr *rr) if (!ill_ItemRequest (rr->decode, &item_req, 0, 0)) { - yaz_log (LOG_LOG, + yaz_log (log_level, "Couldn't decode ItemRequest %s near %d", odr_errmsg(odr_geterror(rr->decode)), odr_offset(rr->decode)); } else - yaz_log(LOG_LOG, "Decode ItemRequest OK"); + yaz_log(log_level, "Decode ItemRequest OK"); if (rr->print) { ill_ItemRequest (rr->print, &item_req, 0, @@ -141,24 +152,24 @@ int ztest_esrequest (void *handle, bend_esrequest_rr *rr) } if (!item_req && r->which == ODR_EXTERNAL_single) { - yaz_log (LOG_LOG, "Decode ILL APDU begin"); + yaz_log (log_level, "Decode ILL APDU begin"); odr_setbuf(rr->decode, (char*) r->u.single_ASN1_type->buf, r->u.single_ASN1_type->len, 0); if (!ill_APDU (rr->decode, &ill_apdu, 0, 0)) { - yaz_log (LOG_LOG, + yaz_log (log_level, "Couldn't decode ILL APDU %s near %d", odr_errmsg(odr_geterror(rr->decode)), odr_offset(rr->decode)); - yaz_log(LOG_LOG, "PDU dump:"); + yaz_log(log_level, "PDU dump:"); odr_dumpBER(yaz_log_file(), (char *) r->u.single_ASN1_type->buf, r->u.single_ASN1_type->len); } else - yaz_log(LOG_LOG, "Decode ILL APDU OK"); + yaz_log(log_level, "Decode ILL APDU OK"); if (rr->print) { ill_APDU (rr->print, &ill_apdu, 0, @@ -170,7 +181,7 @@ int ztest_esrequest (void *handle, bend_esrequest_rr *rr) } if (item_req) { - yaz_log (LOG_LOG, "ILL protocol version = %d", + yaz_log (log_level, "ILL protocol version = %d", *item_req->protocol_version_num); } } @@ -227,40 +238,40 @@ int ztest_esrequest (void *handle, bend_esrequest_rr *rr) else if (rr->esr->taskSpecificParameters->which == Z_External_update) { Z_IUUpdate *up = rr->esr->taskSpecificParameters->u.update; - yaz_log (LOG_LOG, "Received DB Update"); + yaz_log (log_level, "Received DB Update"); if (up->which == Z_IUUpdate_esRequest) { Z_IUUpdateEsRequest *esRequest = up->u.esRequest; Z_IUOriginPartToKeep *toKeep = esRequest->toKeep; Z_IUSuppliedRecords *notToKeep = esRequest->notToKeep; - yaz_log (LOG_LOG, "action"); + yaz_log (log_level, "action"); if (toKeep->action) { switch (*toKeep->action) { case Z_IUOriginPartToKeep_recordInsert: - yaz_log (LOG_LOG, " recordInsert"); + yaz_log (log_level, " recordInsert"); break; case Z_IUOriginPartToKeep_recordReplace: - yaz_log (LOG_LOG, " recordReplace"); + yaz_log (log_level, " recordReplace"); break; case Z_IUOriginPartToKeep_recordDelete: - yaz_log (LOG_LOG, " recordDelete"); + yaz_log (log_level, " recordDelete"); break; case Z_IUOriginPartToKeep_elementUpdate: - yaz_log (LOG_LOG, " elementUpdate"); + yaz_log (log_level, " elementUpdate"); break; case Z_IUOriginPartToKeep_specialUpdate: - yaz_log (LOG_LOG, " specialUpdate"); + yaz_log (log_level, " specialUpdate"); break; default: - yaz_log (LOG_LOG, " unknown (%d)", *toKeep->action); + yaz_log (log_level, " unknown (%d)", *toKeep->action); } } if (toKeep->databaseName) { - yaz_log (LOG_LOG, "database: %s", toKeep->databaseName); + yaz_log (log_level, "database: %s", toKeep->databaseName); if (!strcmp(toKeep->databaseName, "fault")) { rr->errcode = 109; @@ -358,28 +369,28 @@ int ztest_esrequest (void *handle, bend_esrequest_rr *rr) struct oident *oident; oident = oid_getentbyoid(rec->direct_reference); if (oident) - yaz_log (LOG_LOG, "record %d type %s", i, + yaz_log (log_level, "record %d type %s", i, oident->desc); } switch (rec->which) { case Z_External_sutrs: if (rec->u.octet_aligned->len > 170) - yaz_log (LOG_LOG, "%d bytes:\n%.168s ...", + yaz_log (log_level, "%d bytes:\n%.168s ...", rec->u.sutrs->len, rec->u.sutrs->buf); else - yaz_log (LOG_LOG, "%d bytes:\n%s", + yaz_log (log_level, "%d bytes:\n%s", rec->u.sutrs->len, rec->u.sutrs->buf); break; case Z_External_octet : if (rec->u.octet_aligned->len > 170) - yaz_log (LOG_LOG, "%d bytes:\n%.168s ...", + yaz_log (log_level, "%d bytes:\n%.168s ...", rec->u.octet_aligned->len, rec->u.octet_aligned->buf); else - yaz_log (LOG_LOG, "%d bytes\n%s", + yaz_log (log_level, "%d bytes\n%s", rec->u.octet_aligned->len, rec->u.octet_aligned->buf); } @@ -387,9 +398,13 @@ int ztest_esrequest (void *handle, bend_esrequest_rr *rr) } } } + else if (rr->esr->taskSpecificParameters->which == Z_External_update0) + { + yaz_log(log_level, "Received DB Update (version 0)"); + } else { - yaz_log (LOG_WARN, "Unknown Extended Service(%d)", + yaz_log (YLOG_WARN, "Unknown Extended Service(%d)", rr->esr->taskSpecificParameters->which); } @@ -410,7 +425,7 @@ int ztest_delete (void *handle, bend_delete_rr *rr) int ztest_sort (void *handle, bend_sort_rr *rr) { rr->errcode = 0; - rr->sort_status = Z_SortStatus_success; + rr->sort_status = Z_SortResponse_success; return 0; } @@ -425,7 +440,7 @@ int ztest_present (void *handle, bend_present_rr *rr) int ztest_fetch(void *handle, bend_fetch_rr *r) { char *cp; - r->errstring = 0; + r->last_in_set = 0; r->basename = "Default"; r->output_format = r->request_format; @@ -477,12 +492,20 @@ int ztest_fetch(void *handle, bend_fetch_rr *r) fread (r->record, size, 1, f); fclose (f); } - else if (r->request_format == VAL_TEXT_XML && - (cp = dummy_xml_record (r->number, r->stream))) + else if (r->request_format == VAL_TEXT_XML) { - r->len = strlen(cp); - r->record = cp; - r->output_format = VAL_TEXT_XML; + if ((cp = dummy_xml_record (r->number, r->stream))) + { + r->len = strlen(cp); + r->record = cp; + r->output_format = VAL_TEXT_XML; + } + else + { + r->errcode = 14; + r->surrogate_flag = 1; + return 0; + } } else if ((cp = dummy_marc_record(r->number, r->stream))) { @@ -513,6 +536,13 @@ int ztest_scan(void *handle, bend_scan_rr *q) int term_position_req = q->term_position; int num_entries_req = q->num_entries; + if (yaz_matchstr (q->basenames[0], "Default")) + { + q->errcode = 109; + q->errstring = q->basenames[0]; + return 0; + } + q->errcode = 0; q->errstring = 0; q->entries = list; @@ -522,30 +552,40 @@ int ztest_scan(void *handle, bend_scan_rr *q) perror("dummy-words"); exit(1); } - if (q->term->term->which != Z_Term_general) - { - q->errcode = 229; /* unsupported term type */ - return 0; - } - if (*q->step_size != 0) + if (q->num_entries > 200) { - q->errcode = 205; /*Only zero step size supported for Scan */ + q->errcode = 31; return 0; } - if (q->term->term->u.general->len >= 80) + if (q->term) { - q->errcode = 11; /* term too long */ - return 0; + int len; + if (q->term->term->which != Z_Term_general) + { + q->errcode = 229; /* unsupported term type */ + return 0; + } + if (*q->step_size != 0) + { + q->errcode = 205; /*Only zero step size supported for Scan */ + return 0; + } + len = q->term->term->u.general->len; + if (len >= sizeof(term)) + len = sizeof(term)-1; + memcpy(term, q->term->term->u.general->buf, len); + term[len] = '\0'; } - if (q->num_entries > 200) + else if (q->scanClause) { - q->errcode = 31; - return 0; + strncpy(term, q->scanClause, sizeof(term)-1); + term[sizeof(term)-1] = '\0'; } - memcpy(term, q->term->term->u.general->buf, q->term->term->u.general->len); - term[q->term->term->u.general->len] = '\0'; + else + strcpy(term, "0"); + for (p = term; *p; p++) - if (islower(*p)) + if (islower(*(unsigned char *) p)) *p = toupper(*p); fseek(f, 0, SEEK_SET); @@ -597,11 +637,32 @@ int ztest_scan(void *handle, bend_scan_rr *q) return 0; } +static int ztest_explain(void *handle, bend_explain_rr *rr) +{ + if (rr->database && !strcmp(rr->database, "Default")) + { + rr->explain_buf = "\n" + "\t\n" + "\t\tlocalhost\n" + "\t\t210\n" + "\t\n" + "\n"; + } + return 0; +} + bend_initresult *bend_init(bend_initrequest *q) { - bend_initresult *r = (bend_initresult *) odr_malloc (q->stream, sizeof(*r)); + bend_initresult *r = (bend_initresult *) + odr_malloc (q->stream, sizeof(*r)); int *counter = (int *) xmalloc (sizeof(int)); + if (!log_level_set) + { + log_level=yaz_log_module_level("ztest"); + log_level_set=1; + } + *counter = 0; r->errcode = 0; r->errstring = 0; @@ -613,11 +674,20 @@ bend_initresult *bend_init(bend_initrequest *q) q->bend_delete = ztest_delete; q->bend_fetch = ztest_fetch; q->bend_scan = ztest_scan; + q->bend_explain = ztest_explain; + q->bend_srw_scan = ztest_scan; + + yaz_log(YLOG_LOG, "ztest_init handle=%p control=%p", + counter, statserv_getcontrol()); + return r; } void bend_close(void *handle) { + yaz_log(YLOG_LOG, "ztest_close handle=%p control=%p", + handle, statserv_getcontrol()); + xfree (handle); /* release our user-defined handle */ return; }