Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
YAZ-ZTEST(8)		   System management commands		    YAZ-ZTEST(8)

NAME
     yaz-ztest - Z39.50/SRU Test Server

SYNOPSIS
     application [-install] [-installa] [-remove] [-a file] [-v level] [-l file]
		 [-u uid]   [-c config]   [-f vconfig]	[-C fname]  [-t minutes]
		 [-k kilobytes] [-K] [-d daemon] [-w dir] [-p pidfile] [-r kilo-
		 bytes] [-ziDSTV1] [listener-spec...]

DESCRIPTION
     yaz-ztest is a Z39.50/SRU test server that uses the YAZ  generic  front-end
     server  (GFS) API. The server acts as a real Z39.50/SRU server but does not
     use a database. It returns a random hit count and returns a subset of a few
     built-in records.

     The listener-spec consists of a transport mode followed by  a  colon,  fol-
     lowed  by	a  listener  address. The transport mode is either tcp, unix, or
     ssl.

     For TCP and SSL, an address has the form:

	     hostname | IP-number [ : portnumber ]

     For UNIX local socket, the address is the filename of the local socket.

OPTIONS
     -a file
	 Specify a file for dumping PDUs (for diagnostic purposes). The  special
	 name - (dash) sends output to stderr.

     -S
	 Don't fork or make threads on connection requests. This is good for de-
	 bugging, but not recommended for real operation: Although the server is
	 asynchronous  and  non-blocking, it can be nice to keep a software mal-
	 function (okay then, a crash) from affecting all current users.

     -1
	 Like -S but after one session the server exits. This mode is for debug-
	 ging only.

     -T
	 Operate the server in threaded mode. The server creates  a  thread  for
	 each connection rather than fork a process. Only available on UNIX sys-
	 tems that offer POSIX threads.

     -s
	 Use the SR protocol (obsolete).

     -z
	 Use  the  Z39.50 protocol (default). This option and -s complement each
	 other. You can use both multiple times on the same  command  line,  be-
	 tween listener-specifications (see below). This way, you can set up the
	 server  to  listen  for  connections in both protocols concurrently, on
	 different local ports.

     -l file
	 The logfile.

     -c config
	 A user option that serves as a specifier for some  sort  of  configura-
	 tion, usually a filename. The argument to this option is transferred to
	 member configname of the statserv_options_block.

     -f vconfig
	 This specifies an XML file that describes one or more YAZ frontend vir-
	 tual servers.

     -C fname
	 Sets SSL certificate file name for server (PEM).

     -v level
	 The  log  level.  Use a comma-separated list of members of the set {fa-
	 tal,debug,warn,log,malloc,all,none}.

     -u uid
	 Set user ID. Sets the real UID of the server process  to  that  of  the
	 given	user.  It's  useful  if  you  aren't comfortable with having the
	 server run as root, but you need to start it as such to bind  a  privi-
	 leged port.

     -w dir
	 The  server changes to this directory before listening to incoming con-
	 nections. This option is useful when the server is operating  from  the
	 inetd daemon (see -i).

     -p pidfile
	 Specifies that the server should write its Process ID to the file given
	 by pidfile. A typical location would be /var/run/yaz-ztest.pid.

     -i
	 Use this to make the the server run from the inetd server (UNIX only).

     -D
	 Use  this  to make the server put itself in the background and run as a
	 daemon. If neither -i nor -D is given, the server starts in  the  fore-
	 ground.

     -install
	 Use  this  to	install  the server as an NT service (Windows NT/2000/XP
	 only). Control the server by going  to  the  Services	in  the  Control
	 Panel.

     -installa
	 Use  this  to	install  the  server  as  an  NT  service and mark it as
	 "auto-start. Control the server by going to the Services in the Control
	 Panel.

     -remove
	 Use this to remove the server from the NT services (Windows  NT/2000/XP
	 only).

     -t minutes
	 Idle session timeout, in minutes.

     -k size
	 Maximum record size/message size, in kilobytes.

     -K
	 Forces  no-keepalive  for  HTTP sessions. By default GFS will keep ses-
	 sions alive for HTTP 1.1 sessions (as defined by the  standard).  Using
	 this option will force GFS to close the connection for each operation.

     -r size
	 Maximum  size of log file before rotation occurs, in kilobytes. Default
	 size is 1048576 k (=1 GB).

     -d daemon
	 Set name of daemon to be used in hosts access file. See hosts_access(5)
	 and tcpd(8).

     -m time-format
	 Sets the format of time-stamps in the log-file. Specify a string in the
	 input format to strftime().

     -V
	 Display YAZ version and exit.

TESTING
     yaz-ztest normally returns a random hit count between 0 and 24. However, if
     a query term includes leading digits, then the integer value of  that  term
     is  used  as  hit	count. This allows testers to return any number of hits.
     yaz-ztest includes 24 MARC records for testing.  Hit  counts  exceeding  24
     will  make  yaz-ztest return the same record batch over and over. So record
     at position 1, 25, 49, etc. are equivalent.

     For XML, if no element set is given or element has value "marcxml", MARCXML
     is returned (each of the 24 dummy records converted from ISO2709  to  XML).
     For element set OP, then OPAC XML is returned.

     yaz-ztest may also return predefined XML records (for testing). This is en-
     abled  if	YAZ_ZTEST_XML_FETCH environment variable is defined. A record is
     fetched from a file (one record per file). The path  for  the  filename  is
     FE.d.xml  where  F  is the YAZ_ZTEST_XML_FETCH value (possibly empty), E is
     element-set, d is record position (starting from 1).

     The following databases are honored by yaz-ztest: Default,  slow  and  db.*
     (all  databases  with  prefix "db"). Any other database will make yaz-ztest
     return diagnostic 109: "Database unavailable".

     Options for search may be included in the form or	URL  get  arguments  in-
     cluded  as part of the Z39.50 database name. The following database options
     are present: search-delay, present-delay, fetch-delay and seed.

     The former, delay type options, specify a fake delay (sleep) that yaz-ztest
     will perform when searching, presenting, fetching records respectively. The
     value of the delay may either be a fixed floating point value which  speci-
     fies  the	delay  in  seconds.  Alternatively the value may be given as two
     floating point numbers separated by colon, which will make  yaz-ztest  per-
     form a random sleep between the first and second number.

     The database parameter seed takes an integer as value. This will call srand
     with this integer to ensure that the random behavior can be re-played.

     Suppose we want searches to take between 0.1 and 0.5 seconds and a fetch to
     take   0.2   second.   To	access	test  database	Default  we'd  use:  De-
     fault?search-delay=0.1:0.5&fetch-delay=0.2.

GFS CONFIGURATION AND VIRTUAL HOSTS
     The Virtual hosts mechanism allows a YAZ front-end server to support multi-
     ple back-ends. A back-end is selected on the basis of  the  TCP/IP  binding
     (port+listening address) and/or the virtual host.

     A	back-end can be configured to execute in a particular working directory.
     Or the YAZ front-end may perform CQL to RPN conversion, thus allowing  tra-
     ditional  Z39.50  back-ends to be offered as a SRW/SRU service. SRW/SRU Ex-
     plain information for a particular back-end may also be specified.

     For the HTTP protocol, the virtual host is specified in  the  Host  header.
     For the Z39.50 protocol, the virtual host is specified as in the Initialize
     Request in the OtherInfo, OID 1.2.840.10003.10.1000.81.1.

	 Note

	 Not  all  Z39.50  clients  allow  the	VHOST information to be set. For
	 those, the selection of the back-end must rely on the	TCP/IP	informa-
	 tion alone (port and address).

     The  YAZ front-end server uses XML to describe the back-end configurations.
     Command-line option -f specifies filename of the XML configuration.

     The configuration uses the root element yazgfs.  This  element  includes  a
     list of listen elements, followed by one or more server elements.

     The  listen  describes listener (transport end point), such as TCP/IP, Unix
     file socket or SSL server. Content for a listener:

     CDATA (required)
	 The CDATA for the listen element holds the  listener  string,	such  as
	 tcp:@:210, tcp:server1:2100, etc.

     attribute id (optional)
	 Identifier  for this listener. This may be referred to from server sec-
	 tions.

	 Note

	 We expect more information to be added for the listen section in a  fu-
	 ture version, such as CERT file for SSL servers.

     The server describes a server and the parameters for this server type. Con-
     tent for a server:

     attribute id (optional)
	 Identifier  for  this	server.  Currently not used for anything, but it
	 might be for logging purposes.

     attribute listenref (optional)
	 Specifies one or more listeners for this server. Each server ID is sep-
	 arated by a comma. If this attribute is not given, the server is acces-
	 sible from all listeners. In order for the server to be used for  real,
	 however, the virtual host must match if specified in the configuration.

     element config (optional)
	 Specifies  the  server  configuration. This is equivalent to the config
	 specified using command line option -c.

     element directory (optional)
	 Specifies a working directory for this backend  server.  If  specified,
	 the  YAZ  frontend  changes current working directory to this directory
	 whenever  a  backend  of  this  type  is   started   (backend	 handler
	 bend_start),	stopped  (backend  handler  hand_stop)	and  initialized
	 (bend_init).

     element host (optional)
	 Specifies the virtual host for this server.  If  this	is  specified  a
	 client must specify this host string in order to use this backend.

     element cql2rpn (optional)
	 Specifies a filename that includes CQL to RPN conversion for this back-
	 end  server.  See  ???.  If given, the backend server will only "see" a
	 Type-1/RPN query.

     element ccl2rpn (optional)
	 Specifies a filename that includes CCL to RPN conversion for this back-
	 end server. See ???. If given, the backend server  will  only	"see"  a
	 Type-1/RPN query.

     element stylesheet (optional)
	 Specifies  the  stylesheet  reference	to be part of SRU HTTP responses
	 when the client does not specify one. If none is  given,  then  if  the
	 client  does  not  specify one, then no stylesheet reference is part of
	 the SRU HTTP response.

     element client_query_charset (optional)
	 If specified, a conversion from the character set  given  to  UTF-8  is
	 performed  by	the  generic  frontend	server.  It is only executed for
	 Z39.50 search requests (SRU/Solr are assumed to be  UTF-8  encoded  al-
	 ready).

     element docpath (optional)
	 Specifies  a  path  for  local  file access using HTTP. All URLs with a
	 leading prefix (/ excluded) that matches the value of docpath are  used
	 for  file  access. For example, if the server is to offer access in di-
	 rectory xsl, the docpath  would  be  xsl  and	all  URLs  of  the  form
	 http://host/xsl will result in a local file access.

     element explain (optional)
	 Specifies  SRW/SRU  ZeeRex  content for this server. Copied verbatim to
	 the client. As things are now, some of the Explain content seem  redun-
	 dant because host information, etc. is also stored elsewhere.

     element maximumrecordsize (optional)
	 Specifies  maximum  record size/message size, in bytes. This value also
	 serves as the maximum size of incoming  packages  (for  Record  Updates
	 etc). It's the same value as that given by the -k option.

     element retrievalinfo (optional)
	 Enables  the  retrieval  facility to support conversions and specifica-
	 tions of record formats/types. See ???  for more information.

     The XML below configures a server that accepts connections from two  ports,
     TCP/IP  port  9900  and a local UNIX file socket. We name the TCP/IP server
     public and the other server internal.

	  <yazgfs>
	   <listen id="public">tcp:@:9900</listen>
	   <listen id="internal">unix:/var/tmp/socket</listen>
	   <server id="server1">
	     <host>server1.mydomain</host>
	     <directory>/var/www/s1</directory>
	     <config>config.cfg</config>
	   </server>
	   <server id="server2" listenref="public,internal">
	     <host>server2.mydomain</host>
	     <directory>/var/www/s2</directory>
	     <config>config.cfg</config>
	     <cql2rpn>../etc/pqf.properties</cql2rpn>
	     <explain xmlns="http://explain.z3950.org/dtd/2.0/">
	       <serverInfo>
		 <host>server2.mydomain</host>
		 <port>9900</port>
		 <database>a</database>
	       </serverInfo>
	     </explain>
	   </server>
	   <server id="server3" listenref="internal">
	     <directory>/var/www/s3</directory>
	     <config>config.cfg</config>
	   </server>
	  </yazgfs>

     There  are  three	configured  backend  servers.  The  first  two	servers,
     "server1"	and  "server2",  can  be  reached  by  both  listener addresses.
     "server1" is reached by all (two) since no listenref  attribute  is  speci-
     fied.   "server2"	is  reached  by the two listeners specified. In order to
     distinguish between the two, a virtual host has  been  specified  for  each
     server in the host elements.

     For  "server2"  elements for CQL to RPN conversion is supported and explain
     information has been added (a short one here to keep the example small).

     The third server, "server3" can only be reached via listener "internal".

FILES
     yaz-<version>/ztest/yaz-ztest.c

     yaz-<version>/include/yaz/backend.h

SEE ALSO
     yaz(7) yaz-log(7)

AUTHORS
     Index Data

YAZ 5.35.0			   04/10/2025			    YAZ-ZTEST(8)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=yaz-ztest&sektion=8&manpath=FreeBSD+Ports+15.1.quarterly>

home | help