1 /* This file is part of the Zebra server.
2 Copyright (C) 1994-2010 Index Data
4 Zebra is free software; you can redistribute it and/or modify it under
5 the terms of the GNU General Public License as published by the Free
6 Software Foundation; either version 2, or (at your option) any later
9 Zebra is distributed in the hope that it will be useful, but WITHOUT ANY
10 WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
24 #include <sys/types.h>
32 #if HAVE_SYS_UTSNAME_H
33 #include <sys/utsname.h>
40 static void update_process(ZebraService zs, int iter)
43 for (i = 0; i<iter; i++)
45 const char *rec = "<gils><title>some</title></gils>";
46 ZebraHandle zh = zebra_open(zs, 0);
47 zebra_add_record(zh, rec, strlen(rec));
48 if ((i % 30) == 0 || i == iter-1)
54 static void search_process(ZebraService zs, int iter)
58 for (i = 0; i<iter; i++)
60 ZebraHandle zh = zebra_open(zs, 0);
62 ZEBRA_RES res = zebra_search_PQF(zh, "@attr 1=4 some", "default",
64 YAZ_CHECK(res == ZEBRA_OK);
66 YAZ_CHECK(hits >= hits_max);
68 printf("i=%d hits=%lld hits_max=%lld\n", i, hits, hits_max);
74 static pid_t fork_service(ZebraService zs, int iter,
75 void (*f)(ZebraService zs, int iter))
87 static void tst(int argc, char **argv)
92 mkdir("register", 0775);
93 mkdir("shadow", 0775);
95 zs = tl_start_up("test_zebra_fork.cfg", argc, argv);
98 zh = zebra_open(zs, 0);
101 YAZ_CHECK(zebra_select_database(zh, "Default") == ZEBRA_OK);
105 YAZ_CHECK(zebra_create_database (zh, "Default") == ZEBRA_OK);
106 YAZ_CHECK(zebra_select_database(zh, "Default") == ZEBRA_OK);
109 update_process(zs, 1);
113 #if HAVE_SYS_UTSNAME_H
117 int tst_with_fork = 1;
122 if (!strcmp(s.sysname, "FreeBSD"))
125 yaz_log(YLOG_LOG, "s.sysname=%s tst_with_fork=%d", s.sysname,
129 pids[0] = fork_service(zs, 200, search_process);
130 pids[1] = fork_service(zs, 20, update_process);
131 pids[2] = fork_service(zs, 20, update_process);
132 waitpid(pids[0], &status[0], 0);
133 YAZ_CHECK(status[0] == 0);
134 waitpid(pids[1], &status[1], 0);
135 YAZ_CHECK(status[1] == 0);
136 waitpid(pids[2], &status[2], 0);
137 YAZ_CHECK(status[2] == 0);
143 YAZ_CHECK(tl_close_down(0, zs));
150 * c-file-style: "Stroustrup"
151 * indent-tabs-mode: nil
153 * vim: shiftwidth=4 tabstop=8 expandtab