mirror of
https://git.openafs.org/openafs.git
synced 2025-01-20 16:00:12 +00:00
c7ff0d28bf
Lots of our tests want to start a test RPC server, and then run commands against it. Start to abstract out the code to do this by pulling the code to start a test RPC server into its own function in the common test directory. Change-Id: Ie7fa1fa1984113f3722def17a9fd4b98993bd6ff Reviewed-on: http://gerrit.openafs.org/7584 Tested-by: BuildBot <buildbot@rampaginggeek.com> Reviewed-by: Jeffrey Altman <jaltman@secure-endpoints.com> Reviewed-by: Derrick Brashear <shadow@dementix.org>
107 lines
2.3 KiB
C
107 lines
2.3 KiB
C
#include <afsconfig.h>
|
|
#include <afs/param.h>
|
|
|
|
#include <roken.h>
|
|
|
|
#ifdef HAVE_SYS_WAIT_H
|
|
#include <sys/wait.h>
|
|
#endif
|
|
|
|
#include <rx/rx.h>
|
|
|
|
#include <afs/cellconfig.h>
|
|
|
|
#include "common.h"
|
|
|
|
/* Start up the VLserver, using the configuration in dirname, and putting our
|
|
* logs there too.
|
|
*/
|
|
|
|
int
|
|
afstest_StartVLServer(char *dirname, pid_t *serverPid)
|
|
{
|
|
pid_t pid;
|
|
|
|
pid = fork();
|
|
if (pid == -1) {
|
|
exit(1);
|
|
/* Argggggghhhhh */
|
|
} else if (pid == 0) {
|
|
char *binPath, *logPath, *dbPath, *build;
|
|
|
|
/* Child */
|
|
build = getenv("BUILD");
|
|
|
|
if (build == NULL)
|
|
build = "..";
|
|
|
|
asprintf(&binPath, "%s/../src/tvlserver/vlserver", build);
|
|
asprintf(&logPath, "%s/VLLog", dirname);
|
|
asprintf(&dbPath, "%s/vldb", dirname);
|
|
execl(binPath, "vlserver",
|
|
"-logfile", logPath, "-database", dbPath, "-config", dirname, NULL);
|
|
fprintf(stderr, "Running %s failed\n", binPath);
|
|
exit(1);
|
|
}
|
|
*serverPid = pid;
|
|
|
|
return 0;
|
|
}
|
|
|
|
int
|
|
afstest_StopServer(pid_t serverPid)
|
|
{
|
|
int status;
|
|
|
|
kill(serverPid, SIGTERM);
|
|
|
|
waitpid(serverPid, &status, 0);
|
|
|
|
if (WIFSIGNALED(status) && WTERMSIG(status) != SIGTERM) {
|
|
fprintf(stderr, "Server died exited on signal %d\n", WTERMSIG(status));
|
|
return -1;
|
|
}
|
|
if (WIFEXITED(status) && WEXITSTATUS(status) != 0) {
|
|
fprintf(stderr, "Server exited with code %d\n", WEXITSTATUS(status));
|
|
return -1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int
|
|
afstest_StartTestRPCService(const char *configPath,
|
|
u_short port,
|
|
u_short serviceId,
|
|
afs_int32 (*proc) (struct rx_call *))
|
|
{
|
|
struct afsconf_dir *dir;
|
|
struct rx_securityClass **classes;
|
|
afs_int32 numClasses;
|
|
int code;
|
|
struct rx_service *service;
|
|
|
|
dir = afsconf_Open(configPath);
|
|
if (dir == NULL) {
|
|
fprintf(stderr, "Server: Unable to open config directory\n");
|
|
return -1;
|
|
}
|
|
|
|
code = rx_Init(htons(port));
|
|
if (code != 0) {
|
|
fprintf(stderr, "Server: Unable to initialise RX\n");
|
|
return -1;
|
|
}
|
|
|
|
afsconf_BuildServerSecurityObjects(dir, &classes, &numClasses);
|
|
service = rx_NewService(0, serviceId, "test", classes, numClasses,
|
|
proc);
|
|
if (service == NULL) {
|
|
fprintf(stderr, "Server: Unable to start to test service\n");
|
|
return -1;
|
|
}
|
|
|
|
rx_StartServer(1);
|
|
|
|
return 0; /* Not reached, we donated ourselves to StartServer */
|
|
}
|