Commit f9715d06 authored by kent@mysql.com's avatar kent@mysql.com

mysql_test_run_new.c:

  Included header fnmatch.h on Unix
  Changed C++ comments to C comments
  Corrected indentation of code written on Windows
  Split up lines to fit into 80 columns
  Initiated some variables to avoid warnings
  Added __attribute__((unused)) to unused function parameters
  Replace tab characters with space
  Put space after 'for', 'while' etc
  Added value to 'return' from non void function removef()
  On Unix strlwr() was incorrectly declared and a no op,
  replaced it with a macro that does nothing
  Split several statements on the same line
  Other minor changes to conform to coding standard
parent ca355c8a
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#ifndef __WIN__ #ifndef __WIN__
#include <sys/wait.h> #include <sys/wait.h>
#include <unistd.h> #include <unistd.h>
#include <fnmatch.h>
#else #else
#include <direct.h> #include <direct.h>
#include <stdlib.h> #include <stdlib.h>
...@@ -75,13 +76,14 @@ extern char **environ; ...@@ -75,13 +76,14 @@ extern char **environ;
Init an argument list. Init an argument list.
******************************************************************************/ ******************************************************************************/
void init_args(arg_list_t *al) void init_args(arg_list_t *al)
{ {
ASSERT(al != NULL); ASSERT(al != NULL);
al->argc = 0; al->argc= 0;
al->size = ARG_BUF; al->size= ARG_BUF;
al->argv = malloc(al->size * sizeof(char *)); al->argv= malloc(al->size * sizeof(char *));
ASSERT(al->argv != NULL); ASSERT(al->argv != NULL);
return; return;
...@@ -94,6 +96,7 @@ void init_args(arg_list_t *al) ...@@ -94,6 +96,7 @@ void init_args(arg_list_t *al)
Add an argument to a list. Add an argument to a list.
******************************************************************************/ ******************************************************************************/
void add_arg(arg_list_t *al, const char *format, ...) void add_arg(arg_list_t *al, const char *format, ...)
{ {
va_list ap; va_list ap;
...@@ -101,11 +104,11 @@ void add_arg(arg_list_t *al, const char *format, ...) ...@@ -101,11 +104,11 @@ void add_arg(arg_list_t *al, const char *format, ...)
ASSERT(al != NULL); ASSERT(al != NULL);
// increase size /* increase size */
if (al->argc >= (int)al->size) if (al->argc >= (int)al->size)
{ {
al->size += ARG_BUF; al->size+= ARG_BUF;
al->argv = realloc(al->argv, al->size * sizeof(char *)); al->argv= realloc(al->argv, al->size * sizeof(char *));
ASSERT(al->argv != NULL); ASSERT(al->argv != NULL);
} }
...@@ -115,7 +118,7 @@ void add_arg(arg_list_t *al, const char *format, ...) ...@@ -115,7 +118,7 @@ void add_arg(arg_list_t *al, const char *format, ...)
vsprintf(temp, format, ap); vsprintf(temp, format, ap);
va_end(ap); va_end(ap);
al->argv[al->argc] = malloc(strlen(temp)+1); al->argv[al->argc]= malloc(strlen(temp)+1);
ASSERT(al->argv[al->argc] != NULL); ASSERT(al->argv[al->argc] != NULL);
strcpy(al->argv[al->argc], temp); strcpy(al->argv[al->argc], temp);
...@@ -123,7 +126,7 @@ void add_arg(arg_list_t *al, const char *format, ...) ...@@ -123,7 +126,7 @@ void add_arg(arg_list_t *al, const char *format, ...)
} }
else else
{ {
al->argv[al->argc] = NULL; al->argv[al->argc]= NULL;
} }
return; return;
...@@ -136,22 +139,23 @@ void add_arg(arg_list_t *al, const char *format, ...) ...@@ -136,22 +139,23 @@ void add_arg(arg_list_t *al, const char *format, ...)
Free an argument list. Free an argument list.
******************************************************************************/ ******************************************************************************/
void free_args(arg_list_t *al) void free_args(arg_list_t *al)
{ {
int i; int i;
ASSERT(al != NULL); ASSERT(al != NULL);
for(i = 0; i < al->argc; i++) for (i= 0; i < al->argc; i++)
{ {
ASSERT(al->argv[i] != NULL); ASSERT(al->argv[i] != NULL);
free(al->argv[i]); free(al->argv[i]);
al->argv[i] = NULL; al->argv[i]= NULL;
} }
free(al->argv); free(al->argv);
al->argc = 0; al->argc= 0;
al->argv = NULL; al->argv= NULL;
return; return;
} }
...@@ -163,20 +167,21 @@ void free_args(arg_list_t *al) ...@@ -163,20 +167,21 @@ void free_args(arg_list_t *al)
Sleep until the given file is no longer found. Sleep until the given file is no longer found.
******************************************************************************/ ******************************************************************************/
#ifndef __WIN__ #ifndef __WIN__
int sleep_until_file_deleted(char *pid_file) int sleep_until_file_deleted(char *pid_file)
#else #else
int sleep_until_file_deleted(HANDLE pid_file) int sleep_until_file_deleted(HANDLE pid_file)
#endif #endif
{ {
int err; int err= 0; /* Initiate to supress warning */
#ifndef __WIN__ #ifndef __WIN__
struct stat buf; struct stat buf;
int i; int i;
for(i = 0; (i < TRY_MAX) && (err = !stat(pid_file, &buf)); i++) sleep(1); for (i= 0; (i < TRY_MAX) && (err= !stat(pid_file, &buf)); i++) sleep(1);
if (err != 0) err = errno; if (err != 0) err= errno;
#else #else
err= (WaitForSingleObject(pid_file, TRY_MAX*1000) == WAIT_TIMEOUT); err= (WaitForSingleObject(pid_file, TRY_MAX*1000) == WAIT_TIMEOUT);
#endif #endif
...@@ -190,20 +195,21 @@ int sleep_until_file_deleted(HANDLE pid_file) ...@@ -190,20 +195,21 @@ int sleep_until_file_deleted(HANDLE pid_file)
Sleep until the given file exists. Sleep until the given file exists.
******************************************************************************/ ******************************************************************************/
#ifndef __WIN__ #ifndef __WIN__
int sleep_until_file_exists(char *pid_file) int sleep_until_file_exists(char *pid_file)
#else #else
int sleep_until_file_exists(HANDLE pid_file) int sleep_until_file_exists(HANDLE pid_file)
#endif #endif
{ {
int err; int err= 0; /* Initiate to supress warning */
#ifndef __WIN__ #ifndef __WIN__
struct stat buf; struct stat buf;
int i; int i;
for(i = 0; (i < TRY_MAX) && (err = stat(pid_file, &buf)); i++) sleep(1); for (i= 0; (i < TRY_MAX) && (err= stat(pid_file, &buf)); i++) sleep(1);
if (err != 0) err = errno; if (err != 0) err= errno;
#else #else
err= (WaitForSingleObject(pid_file, TRY_MAX*1000) == WAIT_TIMEOUT); err= (WaitForSingleObject(pid_file, TRY_MAX*1000) == WAIT_TIMEOUT);
#endif #endif
...@@ -217,16 +223,19 @@ int sleep_until_file_exists(HANDLE pid_file) ...@@ -217,16 +223,19 @@ int sleep_until_file_exists(HANDLE pid_file)
Wait for the server on the given port to start. Wait for the server on the given port to start.
******************************************************************************/ ******************************************************************************/
int wait_for_server_start(char *bin_dir, char *mysqladmin_file, char *user, char *password, int port,char *tmp_dir)
int wait_for_server_start(char *bin_dir __attribute__((unused)),
char *mysqladmin_file,
char *user, char *password, int port,char *tmp_dir)
{ {
arg_list_t al; arg_list_t al;
int err, i; int err= 0, i;
char trash[PATH_MAX]; char trash[PATH_MAX];
// mysqladmin file /* mysqladmin file */
snprintf(trash, PATH_MAX, "%s/trash.out",tmp_dir); snprintf(trash, PATH_MAX, "%s/trash.out",tmp_dir);
// args /* args */
init_args(&al); init_args(&al);
add_arg(&al, "%s", mysqladmin_file); add_arg(&al, "%s", mysqladmin_file);
add_arg(&al, "--no-defaults"); add_arg(&al, "--no-defaults");
...@@ -235,7 +244,7 @@ int wait_for_server_start(char *bin_dir, char *mysqladmin_file, char *user, char ...@@ -235,7 +244,7 @@ int wait_for_server_start(char *bin_dir, char *mysqladmin_file, char *user, char
add_arg(&al, "--password=%s", password); add_arg(&al, "--password=%s", password);
add_arg(&al, "--silent"); add_arg(&al, "--silent");
//#ifdef NOT_USED /* #ifdef NOT_USED */
#ifndef __NETWARE__ #ifndef __NETWARE__
add_arg(&al, "-O"); add_arg(&al, "-O");
add_arg(&al, "connect_timeout=10"); add_arg(&al, "connect_timeout=10");
...@@ -248,17 +257,19 @@ int wait_for_server_start(char *bin_dir, char *mysqladmin_file, char *user, char ...@@ -248,17 +257,19 @@ int wait_for_server_start(char *bin_dir, char *mysqladmin_file, char *user, char
#endif #endif
add_arg(&al, "ping"); add_arg(&al, "ping");
// NetWare does not support the connect timeout in the TCP/IP stack /*
// -- we will try the ping multiple times NetWare does not support the connect timeout in the TCP/IP stack
-- we will try the ping multiple times
*/
#ifndef __WIN__ #ifndef __WIN__
for(i = 0; (i < TRY_MAX) for (i= 0; (i < TRY_MAX)
&& (err = spawn(mysqladmin_file, &al, TRUE, NULL, && (err= spawn(mysqladmin_file, &al, TRUE, NULL,
trash, NULL, NULL)); i++) sleep(1); trash, NULL, NULL)); i++) sleep(1);
#else #else
err = spawn(mysqladmin_file, &al, TRUE, NULL,trash, NULL, NULL); err= spawn(mysqladmin_file, &al, TRUE, NULL,trash, NULL, NULL);
#endif #endif
// free args /* free args */
free_args(&al); free_args(&al);
return err; return err;
...@@ -271,33 +282,34 @@ int wait_for_server_start(char *bin_dir, char *mysqladmin_file, char *user, char ...@@ -271,33 +282,34 @@ int wait_for_server_start(char *bin_dir, char *mysqladmin_file, char *user, char
Spawn the given path with the given arguments. Spawn the given path with the given arguments.
******************************************************************************/ ******************************************************************************/
#ifdef __NETWARE__ #ifdef __NETWARE__
int spawn(char *path, arg_list_t *al, int join, char *input, int spawn(char *path, arg_list_t *al, int join, char *input,
char *output, char *error, char *pid_file) char *output, char *error, char *pid_file)
{ {
pid_t pid; pid_t pid;
int result = 0; int result= 0;
wiring_t wiring = { FD_UNUSED, FD_UNUSED, FD_UNUSED }; wiring_t wiring= { FD_UNUSED, FD_UNUSED, FD_UNUSED };
unsigned long flags = PROC_CURRENT_SPACE | PROC_INHERIT_CWD; unsigned long flags= PROC_CURRENT_SPACE | PROC_INHERIT_CWD;
// open wiring /* open wiring */
if (input) if (input)
wiring.infd = open(input, O_RDONLY); wiring.infd= open(input, O_RDONLY);
if (output) if (output)
wiring.outfd = open(output, O_WRONLY | O_CREAT | O_TRUNC); wiring.outfd= open(output, O_WRONLY | O_CREAT | O_TRUNC);
if (error) if (error)
wiring.errfd = open(error, O_WRONLY | O_CREAT | O_TRUNC); wiring.errfd= open(error, O_WRONLY | O_CREAT | O_TRUNC);
// procve requires a NULL /* procve requires a NULL */
add_arg(al, NULL); add_arg(al, NULL);
// go /* go */
pid = procve(path, flags, NULL, &wiring, NULL, NULL, 0, pid= procve(path, flags, NULL, &wiring, NULL, NULL, 0,
NULL, (const char **)al->argv); NULL, (const char **)al->argv);
// close wiring /* close wiring */
if (wiring.infd != -1) if (wiring.infd != -1)
close(wiring.infd); close(wiring.infd);
...@@ -322,10 +334,8 @@ int spawn(char *path, arg_list_t *al, int join, char *input, ...@@ -322,10 +334,8 @@ int spawn(char *path, arg_list_t *al, int join, char *input,
char win_args[1024]= ""; char win_args[1024]= "";
char command_line[1024]= ""; char command_line[1024]= "";
/* /* Skip the first parameter */
Skip the first parameter for (i= 1; i < al->argc; i++)
*/
for(i = 1; i < al->argc; i++)
{ {
ASSERT(al->argv[i] != NULL); ASSERT(al->argv[i] != NULL);
strcat(win_args,al->argv[i]); strcat(win_args,al->argv[i]);
...@@ -333,7 +343,7 @@ int spawn(char *path, arg_list_t *al, int join, char *input, ...@@ -333,7 +343,7 @@ int spawn(char *path, arg_list_t *al, int join, char *input,
} }
memset(&startup_info,0,sizeof(STARTUPINFO)); memset(&startup_info,0,sizeof(STARTUPINFO));
startup_info.cb = sizeof(STARTUPINFO); startup_info.cb= sizeof(STARTUPINFO);
if (input) if (input)
freopen(input, "rb", stdin); freopen(input, "rb", stdin);
...@@ -361,7 +371,8 @@ int spawn(char *path, arg_list_t *al, int join, char *input, ...@@ -361,7 +371,8 @@ int spawn(char *path, arg_list_t *al, int join, char *input,
{ {
if (join) if (join)
{ {
if (WaitForSingleObject(process_information.hProcess, mysqld_timeout) == WAIT_TIMEOUT) if (WaitForSingleObject(process_information.hProcess, mysqld_timeout)
== WAIT_TIMEOUT)
{ {
exit_code= -1; exit_code= -1;
} }
...@@ -393,74 +404,58 @@ int spawn(char *path, arg_list_t *al, int join, char *input, ...@@ -393,74 +404,58 @@ int spawn(char *path, arg_list_t *al, int join, char *input,
} }
#else #else
int spawn(char *path, arg_list_t *al, int join, char *input, int spawn(char *path, arg_list_t *al, int join, char *input,
char *output, char *error, char *pid_file) char *output, char *error, char *pid_file __attribute__((unused)))
{ {
pid_t pid; pid_t pid;
int res_exec = 0; int res_exec= 0;
int result = 0; int result= 0;
pid = fork(); pid= fork();
if (pid == -1) if (pid == -1)
{ {
fprintf(stderr, "fork was't created\n"); fprintf(stderr, "fork was't created\n");
/* /* We can't create the fork...exit with error */
We can't create the fork...exit with error
*/
return EXIT_FAILURE; return EXIT_FAILURE;
} }
if (pid > 0) if (pid > 0)
{ {
/* /* The parent process is waiting for child process if join is not zero */
The parent process is waiting for child process if join is not zero
*/
if (join) if (join)
{ {
waitpid(pid, &result, 0); waitpid(pid, &result, 0);
if (WIFEXITED(result) != 0) if (WIFEXITED(result) != 0)
{ {
result = WEXITSTATUS(result); result= WEXITSTATUS(result);
} }
else else
{ {
result = EXIT_FAILURE; result= EXIT_FAILURE;
} }
} }
} }
else else
{ {
/* /* Child process */
Child process
*/
add_arg(al, NULL); add_arg(al, NULL);
/* Reassign streams */
/*
Reassign streams
*/
if (input) if (input)
freopen(input, "r", stdin); freopen(input, "r", stdin);
if (output) if (output)
freopen(output, "w", stdout); freopen(output, "w", stdout);
if (error) if (error)
freopen(error, "w", stderr); freopen(error, "w", stderr);
/* Spawn the process */ /* Spawn the process */
if ((res_exec = execve(path, al->argv, environ)) < 0) if ((res_exec= execve(path, al->argv, environ)) < 0)
{
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
}
/* /* Restore streams */
Restore streams
*/
if (input) if (input)
freopen("/dev/tty", "r", stdin); freopen("/dev/tty", "r", stdin);
...@@ -483,21 +478,23 @@ int spawn(char *path, arg_list_t *al, int join, char *input, ...@@ -483,21 +478,23 @@ int spawn(char *path, arg_list_t *al, int join, char *input,
Stop the server with the given port and pid file. Stop the server with the given port and pid file.
******************************************************************************/ ******************************************************************************/
int stop_server(char *bin_dir __attribute__((unused)), char *mysqladmin_file,
char *user, char *password, int port,
#ifndef __WIN__ #ifndef __WIN__
int stop_server(char *bin_dir, char *mysqladmin_file, char *user, char *password, int port, char *pid_file,
char *pid_file,char *tmp_dir)
#else #else
int stop_server(char *bin_dir, char *mysqladmin_file, char *user, char *password, int port, HANDLE pid_file,
HANDLE pid_file,char *tmp_dir)
#endif #endif
char *tmp_dir)
{ {
arg_list_t al; arg_list_t al;
int err = 0; int err= 0;
char trash[PATH_MAX]; char trash[PATH_MAX];
snprintf(trash, PATH_MAX, "%s/trash.out",tmp_dir); snprintf(trash, PATH_MAX, "%s/trash.out",tmp_dir);
// args /* args */
init_args(&al); init_args(&al);
add_arg(&al, "%s", mysqladmin_file); add_arg(&al, "%s", mysqladmin_file);
add_arg(&al, "--no-defaults"); add_arg(&al, "--no-defaults");
...@@ -511,8 +508,8 @@ int stop_server(char *bin_dir, char *mysqladmin_file, char *user, char *password ...@@ -511,8 +508,8 @@ int stop_server(char *bin_dir, char *mysqladmin_file, char *user, char *password
#endif #endif
add_arg(&al, "shutdown"); add_arg(&al, "shutdown");
// spawn /* spawn */
if ((err = spawn(mysqladmin_file, &al, TRUE, NULL, if ((err= spawn(mysqladmin_file, &al, TRUE, NULL,
trash, NULL, NULL)) == 0) trash, NULL, NULL)) == 0)
{ {
sleep_until_file_deleted(pid_file); sleep_until_file_deleted(pid_file);
...@@ -520,21 +517,21 @@ int stop_server(char *bin_dir, char *mysqladmin_file, char *user, char *password ...@@ -520,21 +517,21 @@ int stop_server(char *bin_dir, char *mysqladmin_file, char *user, char *password
else else
{ {
#ifndef __WIN__ #ifndef __WIN__
pid_t pid = get_server_pid(pid_file); pid_t pid= get_server_pid(pid_file);
// shutdown failed - kill server /* shutdown failed - kill server */
kill_server(pid); kill_server(pid);
sleep(TRY_MAX); sleep(TRY_MAX);
// remove pid file if possible /* remove pid file if possible */
err = remove(pid_file); err= remove(pid_file);
#else #else
TerminateProcess(pid_file,err); TerminateProcess(pid_file,err);
#endif #endif
} }
// free args /* free args */
free_args(&al); free_args(&al);
return err; return err;
...@@ -547,40 +544,41 @@ int stop_server(char *bin_dir, char *mysqladmin_file, char *user, char *password ...@@ -547,40 +544,41 @@ int stop_server(char *bin_dir, char *mysqladmin_file, char *user, char *password
Get the VM id with the given pid file. Get the VM id with the given pid file.
******************************************************************************/ ******************************************************************************/
#ifndef __WIN__ #ifndef __WIN__
pid_t get_server_pid(char *pid_file) pid_t get_server_pid(char *pid_file)
{ {
char buf[PATH_MAX]; char buf[PATH_MAX];
int fd, err; int fd, err;
char *p; char *p;
pid_t id = 0; pid_t id= 0;
// discover id /* discover id */
fd = open(pid_file, O_RDONLY); fd= open(pid_file, O_RDONLY);
err = read(fd, buf, PATH_MAX); err= read(fd, buf, PATH_MAX);
close(fd); close(fd);
if (err > 0) if (err > 0)
{ {
// terminate string /* terminate string */
if ((p = strchr(buf, '\n')) != NULL) if ((p= strchr(buf, '\n')) != NULL)
{ {
*p = '\0'; *p= '\0';
// check for a '\r' /* check for a '\r' */
if ((p = strchr(buf, '\r')) != NULL) if ((p= strchr(buf, '\r')) != NULL)
{ {
*p = '\0'; *p= '\0';
} }
} }
else else
{ {
buf[err] = '\0'; buf[err]= '\0';
} }
id = strtol(buf, NULL, 0); id= strtol(buf, NULL, 0);
} }
return id; return id;
...@@ -593,6 +591,7 @@ pid_t get_server_pid(char *pid_file) ...@@ -593,6 +591,7 @@ pid_t get_server_pid(char *pid_file)
Force a kill of the server with the given pid. Force a kill of the server with the given pid.
******************************************************************************/ ******************************************************************************/
void kill_server(pid_t pid) void kill_server(pid_t pid)
{ {
if (pid > 0) if (pid > 0)
...@@ -614,10 +613,11 @@ void kill_server(pid_t pid) ...@@ -614,10 +613,11 @@ void kill_server(pid_t pid)
Delete the directory and subdirectories. Delete the directory and subdirectories.
******************************************************************************/ ******************************************************************************/
void del_tree(char *dir) void del_tree(char *dir)
{ {
#ifndef __WIN__ #ifndef __WIN__
DIR *parent = opendir(dir); DIR *parent= opendir(dir);
struct dirent *entry; struct dirent *entry;
char temp[PATH_MAX]; char temp[PATH_MAX];
...@@ -626,28 +626,28 @@ void del_tree(char *dir) ...@@ -626,28 +626,28 @@ void del_tree(char *dir)
return; return;
} }
while((entry = readdir(parent)) != NULL) while ((entry= readdir(parent)) != NULL)
{ {
// create long name /* create long name */
snprintf(temp, PATH_MAX, "%s/%s", dir, entry->d_name); snprintf(temp, PATH_MAX, "%s/%s", dir, entry->d_name);
if (entry->d_name[0] == '.') if (entry->d_name[0] == '.')
{ {
// Skip /* Skip */
} }
else else
if (S_ISDIR(entry->d_type)) if (S_ISDIR(entry->d_type))
{ {
// delete subdirectory /* delete subdirectory */
del_tree(temp); del_tree(temp);
} }
else else
{ {
// remove file /* remove file */
remove(temp); remove(temp);
} }
} }
// remove directory /* remove directory */
rmdir(dir); rmdir(dir);
#else #else
struct _finddata_t parent; struct _finddata_t parent;
...@@ -664,28 +664,28 @@ void del_tree(char *dir) ...@@ -664,28 +664,28 @@ void del_tree(char *dir)
do do
{ {
// create long name /* create long name */
snprintf(temp, PATH_MAX, "%s/%s", dir, parent.name); snprintf(temp, PATH_MAX, "%s/%s", dir, parent.name);
if (parent.name[0] == '.') if (parent.name[0] == '.')
{ {
// Skip /* Skip */
} }
else else
if (parent.attrib & _A_SUBDIR) if (parent.attrib & _A_SUBDIR)
{ {
// delete subdirectory /* delete subdirectory */
del_tree(temp); del_tree(temp);
} }
else else
{ {
// remove file /* remove file */
remove(temp); remove(temp);
} }
} while (_findnext(handle,&parent) == 0); } while (_findnext(handle,&parent) == 0);
_findclose(handle); _findclose(handle);
// remove directory /* remove directory */
_rmdir(dir); _rmdir(dir);
#endif #endif
} }
...@@ -695,6 +695,7 @@ void del_tree(char *dir) ...@@ -695,6 +695,7 @@ void del_tree(char *dir)
removef() removef()
******************************************************************************/ ******************************************************************************/
int removef(const char *format, ...) int removef(const char *format, ...)
{ {
#ifdef __NETWARE__ #ifdef __NETWARE__
...@@ -723,18 +724,16 @@ int removef(const char *format, ...) ...@@ -723,18 +724,16 @@ int removef(const char *format, ...)
va_end(ap); va_end(ap);
p = path + strlen(path); p= path + strlen(path);
while (*p != '\\' && *p != '/' && p > path) p--; while (*p != '\\' && *p != '/' && p > path) p--;
if ((handle=_findfirst(path,&parent)) == -1L) if ((handle=_findfirst(path,&parent)) == -1L)
{ {
/* /* if there is not files....it's ok */
if there is not files....it's ok.
*/
return 0; return 0;
} }
*p = '\0'; *p= '\0';
do do
{ {
...@@ -754,37 +753,33 @@ int removef(const char *format, ...) ...@@ -754,37 +753,33 @@ int removef(const char *format, ...)
va_list ap; va_list ap;
char path[PATH_MAX]; char path[PATH_MAX];
char *p; char *p;
/* /* Get path with mask */
Get path with mask
*/
va_start(ap, format); va_start(ap, format);
vsnprintf(path, PATH_MAX, format, ap); vsnprintf(path, PATH_MAX, format, ap);
va_end(ap); va_end(ap);
p = path + strlen(path); p= path + strlen(path);
while (*p != '\\' && *p != '/' && p > path) p--; while (*p != '\\' && *p != '/' && p > path) p--;
*p = '\0'; *p= '\0';
p++; p++;
parent = opendir(path); parent= opendir(path);
if (parent == NULL) if (parent == NULL)
{ {
return; return 1; /* Error, directory missing */
} }
while((entry = readdir(parent)) != NULL) while ((entry= readdir(parent)) != NULL)
{ {
/* /* entry is not directory and entry matches with mask */
entry is not directory and entry matches with mask
*/
if (!S_ISDIR(entry->d_type) && !fnmatch(p, entry->d_name,0)) if (!S_ISDIR(entry->d_type) && !fnmatch(p, entry->d_name,0))
{ {
// create long name /* create long name */
snprintf(temp, PATH_MAX, "%s/%s", path, entry->d_name); snprintf(temp, PATH_MAX, "%s/%s", path, entry->d_name);
// Delete only files /* Delete only files */
remove(temp); remove(temp);
} }
} }
...@@ -797,6 +792,7 @@ int removef(const char *format, ...) ...@@ -797,6 +792,7 @@ int removef(const char *format, ...)
get_basedir() get_basedir()
******************************************************************************/ ******************************************************************************/
void get_basedir(char *argv0, char *basedir) void get_basedir(char *argv0, char *basedir)
{ {
char temp[PATH_MAX]; char temp[PATH_MAX];
...@@ -807,34 +803,28 @@ void get_basedir(char *argv0, char *basedir) ...@@ -807,34 +803,28 @@ void get_basedir(char *argv0, char *basedir)
ASSERT(basedir != NULL); ASSERT(basedir != NULL);
strcpy(temp, strlwr(argv0)); strcpy(temp, strlwr(argv0));
while((p = strchr(temp, '\\')) != NULL) *p = '/'; while ((p= strchr(temp, '\\')) != NULL) *p= '/';
if ((position = strinstr(temp, "/bin/")) != 0) if ((position= strinstr(temp, "/bin/")) != 0)
{ {
p = temp + position; p= temp + position;
*p = '\0'; *p= '\0';
strcpy(basedir, temp); strcpy(basedir, temp);
} }
} }
#if !defined(__NETWARE__) && !defined(__WIN__)
char *strlwr(const char *s)
{
return s;
}
#endif
uint strinstr(reg1 const char *str,reg4 const char *search) uint strinstr(reg1 const char *str,reg4 const char *search)
{ {
reg2 my_string i,j; reg2 my_string i,j;
my_string start = (my_string) str; my_string start= (my_string) str;
skipp: skipp:
while (*str != '\0') while (*str != '\0')
{ {
if (*str++ == *search) if (*str++ == *search)
{ {
i=(my_string) str; j= (my_string) search+1; i=(my_string) str;
j= (my_string) search+1;
while (*j) while (*j)
if (*i++ != *j++) goto skipp; if (*i++ != *j++) goto skipp;
return ((uint) (str - start)); return ((uint) (str - start));
...@@ -848,6 +838,7 @@ uint strinstr(reg1 const char *str,reg4 const char *search) ...@@ -848,6 +838,7 @@ uint strinstr(reg1 const char *str,reg4 const char *search)
remove_empty_file() remove_empty_file()
******************************************************************************/ ******************************************************************************/
void remove_empty_file(const char *file_name) void remove_empty_file(const char *file_name)
{ {
struct stat file; struct stat file;
......
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
#ifndef __WIN__ #ifndef __WIN__
#define strnicmp strncasecmp #define strnicmp strncasecmp
char *strlwr(const char *s); #define strlwr(STRARG) (STRARG)
#else #else
int my_vsnprintf_(char *to, size_t n, const char* value, ...); int my_vsnprintf_(char *to, size_t n, const char* value, ...);
#endif #endif
......
...@@ -60,37 +60,38 @@ ...@@ -60,37 +60,38 @@
#define OUT_SUFFIX ".out" #define OUT_SUFFIX ".out"
#define ERR_SUFFIX ".err" #define ERR_SUFFIX ".err"
const char *TEST_PASS = "[ pass ]"; const char *TEST_PASS= "[ pass ]";
const char *TEST_SKIP = "[ skip ]"; const char *TEST_SKIP= "[ skip ]";
const char *TEST_FAIL = "[ fail ]"; const char *TEST_FAIL= "[ fail ]";
const char *TEST_BAD = "[ bad ]"; const char *TEST_BAD= "[ bad ]";
const char *TEST_IGNORE = "[ignore]"; const char *TEST_IGNORE= "[ignore]";
/****************************************************************************** /******************************************************************************
global variables global variables
******************************************************************************/ ******************************************************************************/
#ifdef __NETWARE__ #ifdef __NETWARE__
static char base_dir[PATH_MAX] = "sys:/mysql"; static char base_dir[PATH_MAX]= "sys:/mysql";
#else #else
static char base_dir[PATH_MAX] = ".."; static char base_dir[PATH_MAX]= "..";
#endif #endif
static char db[PATH_MAX] = "test"; static char db[PATH_MAX]= "test";
static char user[PATH_MAX] = "root"; static char user[PATH_MAX]= "root";
static char password[PATH_MAX] = ""; static char password[PATH_MAX]= "";
int master_port = 9306; int master_port= 9306;
int slave_port = 9307; int slave_port= 9307;
#if !defined(__NETWARE__) && !defined(__WIN__) #if !defined(__NETWARE__) && !defined(__WIN__)
static char master_socket[PATH_MAX] = "./var/tmp/master.sock"; static char master_socket[PATH_MAX]= "./var/tmp/master.sock";
static char slave_socket[PATH_MAX] = "./var/tmp/slave.sock"; static char slave_socket[PATH_MAX]= "./var/tmp/slave.sock";
#endif #endif
// comma delimited list of tests to skip or empty string /* comma delimited list of tests to skip or empty string */
#ifndef __WIN__ #ifndef __WIN__
static char skip_test[PATH_MAX] = " lowercase_table3 , system_mysql_db_fix "; static char skip_test[PATH_MAX]= " lowercase_table3 , system_mysql_db_fix ";
#else #else
/* /*
The most ignore testes contain the calls of system command The most ignore testes contain the calls of system command
...@@ -109,9 +110,20 @@ static char skip_test[PATH_MAX] = " lowercase_table3 , system_mysql_db_fix "; ...@@ -109,9 +110,20 @@ static char skip_test[PATH_MAX] = " lowercase_table3 , system_mysql_db_fix ";
mysqldump contains a command system mysqldump contains a command system
rpl000001 makes non-exit loop...temporary skiped rpl000001 makes non-exit loop...temporary skiped
*/ */
static char skip_test[PATH_MAX] = " lowercase_table3 , system_mysql_db_fix , sp , rpl_EE_error , rpl_loaddatalocal , ndb_autodiscover , rpl_rotate_logs , repair , rpl_trunc_binlog , mysqldump , rpl000001 "; static char skip_test[PATH_MAX]=
" lowercase_table3 ,"
" system_mysql_db_fix ,"
" sp ,"
" rpl_EE_error ,"
" rpl_loaddatalocal ,"
" ndb_autodiscover ,"
" rpl_rotate_logs ,"
" repair ,"
" rpl_trunc_binlog ,"
" mysqldump ,"
" rpl000001 ";
#endif #endif
static char ignore_test[PATH_MAX] = ""; static char ignore_test[PATH_MAX]= "";
static char bin_dir[PATH_MAX]; static char bin_dir[PATH_MAX];
static char mysql_test_dir[PATH_MAX]; static char mysql_test_dir[PATH_MAX];
...@@ -129,43 +141,43 @@ static char mysqltest_file[PATH_MAX]; ...@@ -129,43 +141,43 @@ static char mysqltest_file[PATH_MAX];
#ifndef __WIN__ #ifndef __WIN__
static char master_pid[PATH_MAX]; static char master_pid[PATH_MAX];
static char slave_pid[PATH_MAX]; static char slave_pid[PATH_MAX];
static char sh_file[PATH_MAX] = "/bin/sh"; static char sh_file[PATH_MAX]= "/bin/sh";
#else #else
static HANDLE master_pid; static HANDLE master_pid;
static HANDLE slave_pid; static HANDLE slave_pid;
#endif #endif
static char master_opt[PATH_MAX] = ""; static char master_opt[PATH_MAX]= "";
static char slave_opt[PATH_MAX] = ""; static char slave_opt[PATH_MAX]= "";
static char slave_master_info[PATH_MAX] = ""; static char slave_master_info[PATH_MAX]= "";
static char master_init_script[PATH_MAX] = ""; static char master_init_script[PATH_MAX]= "";
static char slave_init_script[PATH_MAX] = ""; static char slave_init_script[PATH_MAX]= "";
// OpenSSL /* OpenSSL */
static char ca_cert[PATH_MAX]; static char ca_cert[PATH_MAX];
static char server_cert[PATH_MAX]; static char server_cert[PATH_MAX];
static char server_key[PATH_MAX]; static char server_key[PATH_MAX];
static char client_cert[PATH_MAX]; static char client_cert[PATH_MAX];
static char client_key[PATH_MAX]; static char client_key[PATH_MAX];
int total_skip = 0; int total_skip= 0;
int total_pass = 0; int total_pass= 0;
int total_fail = 0; int total_fail= 0;
int total_test = 0; int total_test= 0;
int total_ignore = 0; int total_ignore= 0;
int use_openssl = FALSE; int use_openssl= FALSE;
int master_running = FALSE; int master_running= FALSE;
int slave_running = FALSE; int slave_running= FALSE;
int skip_slave = TRUE; int skip_slave= TRUE;
int single_test = TRUE; int single_test= TRUE;
int restarts = 0; int restarts= 0;
FILE *log_fd = NULL; FILE *log_fd= NULL;
/****************************************************************************** /******************************************************************************
...@@ -209,6 +221,7 @@ void run_init_script(const char *script_name); ...@@ -209,6 +221,7 @@ void run_init_script(const char *script_name);
Report the gathered statistics. Report the gathered statistics.
******************************************************************************/ ******************************************************************************/
void report_stats() void report_stats()
{ {
if (total_fail == 0) if (total_fail == 0)
...@@ -217,13 +230,14 @@ void report_stats() ...@@ -217,13 +230,14 @@ void report_stats()
} }
else else
{ {
double percent = ((double)total_pass / total_test) * 100; double percent= ((double)total_pass / total_test) * 100;
mlog("\nFailed %u/%u test(s), %.02f%% successful.\n", mlog("\nFailed %u/%u test(s), %.02f%% successful.\n",
total_fail, total_test, percent); total_fail, total_test, percent);
mlog("\nThe .out and .err files in %s may give you some\n", result_dir); mlog("\nThe .out and .err files in %s may give you some\n", result_dir);
mlog("hint of what when wrong.\n"); mlog("hint of what when wrong.\n");
mlog("\nIf you want to report this error, please first read the documentation\n"); mlog("\nIf you want to report this error, please first read "
"the documentation\n");
mlog("at: http://www.mysql.com/doc/M/y/MySQL_test_suite.html\n"); mlog("at: http://www.mysql.com/doc/M/y/MySQL_test_suite.html\n");
} }
} }
...@@ -235,6 +249,7 @@ void report_stats() ...@@ -235,6 +249,7 @@ void report_stats()
Install the a database. Install the a database.
******************************************************************************/ ******************************************************************************/
void install_db(char *datadir) void install_db(char *datadir)
{ {
arg_list_t al; arg_list_t al;
...@@ -243,7 +258,7 @@ void install_db(char *datadir) ...@@ -243,7 +258,7 @@ void install_db(char *datadir)
char output[PATH_MAX]; char output[PATH_MAX];
char error[PATH_MAX]; char error[PATH_MAX];
// input file /* input file */
#ifdef __NETWARE__ #ifdef __NETWARE__
snprintf(input, PATH_MAX, "%s/bin/init_db.sql", base_dir); snprintf(input, PATH_MAX, "%s/bin/init_db.sql", base_dir);
#else #else
...@@ -252,7 +267,7 @@ void install_db(char *datadir) ...@@ -252,7 +267,7 @@ void install_db(char *datadir)
snprintf(output, PATH_MAX, "%s/install.out", datadir); snprintf(output, PATH_MAX, "%s/install.out", datadir);
snprintf(error, PATH_MAX, "%s/install.err", datadir); snprintf(error, PATH_MAX, "%s/install.err", datadir);
// args /* args */
init_args(&al); init_args(&al);
add_arg(&al, mysqld_file); add_arg(&al, mysqld_file);
add_arg(&al, "--no-defaults"); add_arg(&al, "--no-defaults");
...@@ -267,13 +282,13 @@ void install_db(char *datadir) ...@@ -267,13 +282,13 @@ void install_db(char *datadir)
add_arg(&al, "--language=%s", lang_dir); add_arg(&al, "--language=%s", lang_dir);
#endif #endif
// spawn /* spawn */
if ((err = spawn(mysqld_file, &al, TRUE, input, output, error, NULL)) != 0) if ((err= spawn(mysqld_file, &al, TRUE, input, output, error, NULL)) != 0)
{ {
die("Unable to create database."); die("Unable to create database.");
} }
// free args /* free args */
free_args(&al); free_args(&al);
} }
...@@ -284,20 +299,21 @@ void install_db(char *datadir) ...@@ -284,20 +299,21 @@ void install_db(char *datadir)
Install the test databases. Install the test databases.
******************************************************************************/ ******************************************************************************/
void mysql_install_db() void mysql_install_db()
{ {
char temp[PATH_MAX]; char temp[PATH_MAX];
// var directory /* var directory */
snprintf(temp, PATH_MAX, "%s/var", mysql_test_dir); snprintf(temp, PATH_MAX, "%s/var", mysql_test_dir);
// clean up old direcotry /* clean up old direcotry */
del_tree(temp); del_tree(temp);
// create var directory /* create var directory */
#ifndef __WIN__ #ifndef __WIN__
mkdir(temp, S_IRWXU); mkdir(temp, S_IRWXU);
// create subdirectories /* create subdirectories */
mlog("Creating test-suite folders...\n"); mlog("Creating test-suite folders...\n");
snprintf(temp, PATH_MAX, "%s/var/run", mysql_test_dir); snprintf(temp, PATH_MAX, "%s/var/run", mysql_test_dir);
mkdir(temp, S_IRWXU); mkdir(temp, S_IRWXU);
...@@ -317,7 +333,7 @@ void mysql_install_db() ...@@ -317,7 +333,7 @@ void mysql_install_db()
mkdir(temp, S_IRWXU); mkdir(temp, S_IRWXU);
#else #else
mkdir(temp); mkdir(temp);
// create subdirectories /* create subdirectories */
mlog("Creating test-suite folders...\n"); mlog("Creating test-suite folders...\n");
snprintf(temp, PATH_MAX, "%s/var/run", mysql_test_dir); snprintf(temp, PATH_MAX, "%s/var/run", mysql_test_dir);
mkdir(temp); mkdir(temp);
...@@ -337,7 +353,7 @@ void mysql_install_db() ...@@ -337,7 +353,7 @@ void mysql_install_db()
mkdir(temp); mkdir(temp);
#endif #endif
// install databases /* install databases */
mlog("Creating test databases for master... \n"); mlog("Creating test databases for master... \n");
install_db(master_dir); install_db(master_dir);
mlog("Creating test databases for slave... \n"); mlog("Creating test databases for slave... \n");
...@@ -351,45 +367,46 @@ void mysql_install_db() ...@@ -351,45 +367,46 @@ void mysql_install_db()
Start the master server. Start the master server.
******************************************************************************/ ******************************************************************************/
void start_master() void start_master()
{ {
arg_list_t al; arg_list_t al;
int err; int err;
char master_out[PATH_MAX]; char master_out[PATH_MAX];
char master_err[PATH_MAX]; char master_err[PATH_MAX];
// char temp[PATH_MAX]; /* char temp[PATH_MAX]; */
char temp2[PATH_MAX]; char temp2[PATH_MAX];
// remove old berkeley db log files that can confuse the server /* remove old berkeley db log files that can confuse the server */
removef("%s/log.*", master_dir); removef("%s/log.*", master_dir);
// remove stale binary logs /* remove stale binary logs */
removef("%s/var/log/*-bin.*", mysql_test_dir); removef("%s/var/log/*-bin.*", mysql_test_dir);
// remove stale binary logs /* remove stale binary logs */
removef("%s/var/log/*.index", mysql_test_dir); removef("%s/var/log/*.index", mysql_test_dir);
// remove master.info file /* remove master.info file */
removef("%s/master.info", master_dir); removef("%s/master.info", master_dir);
// remove relay files /* remove relay files */
removef("%s/var/log/*relay*", mysql_test_dir); removef("%s/var/log/*relay*", mysql_test_dir);
// remove relay-log.info file /* remove relay-log.info file */
removef("%s/relay-log.info", master_dir); removef("%s/relay-log.info", master_dir);
// init script /* init script */
if (master_init_script[0] != 0) if (master_init_script[0] != 0)
{ {
#ifdef __NETWARE__ #ifdef __NETWARE__
// TODO: use the scripts /* TODO: use the scripts */
if (strinstr(master_init_script, "repair_part2-master.sh") != 0) if (strinstr(master_init_script, "repair_part2-master.sh") != 0)
{ {
FILE *fp; FILE *fp;
// create an empty index file /* create an empty index file */
snprintf(temp, PATH_MAX, "%s/test/t1.MYI", master_dir); snprintf(temp, PATH_MAX, "%s/test/t1.MYI", master_dir);
fp = fopen(temp, "wb+"); fp= fopen(temp, "wb+");
fputs("1", fp); fputs("1", fp);
...@@ -400,7 +417,7 @@ void start_master() ...@@ -400,7 +417,7 @@ void start_master()
#endif #endif
} }
// redirection files /* redirection files */
snprintf(master_out, PATH_MAX, "%s/var/run/master%u.out", snprintf(master_out, PATH_MAX, "%s/var/run/master%u.out",
mysql_test_dir, restarts); mysql_test_dir, restarts);
snprintf(master_err, PATH_MAX, "%s/var/run/master%u.err", snprintf(master_err, PATH_MAX, "%s/var/run/master%u.err",
...@@ -416,7 +433,7 @@ void start_master() ...@@ -416,7 +433,7 @@ void start_master()
snprintf(temp2,PATH_MAX,"%s/var/log",mysql_test_dir); snprintf(temp2,PATH_MAX,"%s/var/log",mysql_test_dir);
mkdir(temp2); mkdir(temp2);
#endif #endif
// args /* args */
init_args(&al); init_args(&al);
add_arg(&al, "%s", mysqld_file); add_arg(&al, "%s", mysqld_file);
add_arg(&al, "--no-defaults"); add_arg(&al, "--no-defaults");
...@@ -436,7 +453,7 @@ void start_master() ...@@ -436,7 +453,7 @@ void start_master()
add_arg(&al, "--character-sets-dir=%s", char_dir); add_arg(&al, "--character-sets-dir=%s", char_dir);
add_arg(&al, "--tmpdir=%s", mysql_tmp_dir); add_arg(&al, "--tmpdir=%s", mysql_tmp_dir);
add_arg(&al, "--language=%s", lang_dir); add_arg(&al, "--language=%s", lang_dir);
#ifdef DEBUG //only for debug builds #ifdef DEBUG /* only for debug builds */
add_arg(&al, "--debug"); add_arg(&al, "--debug");
#endif #endif
...@@ -447,11 +464,11 @@ void start_master() ...@@ -447,11 +464,11 @@ void start_master()
add_arg(&al, "--ssl-key=%s", server_key); add_arg(&al, "--ssl-key=%s", server_key);
} }
// $MASTER_40_ARGS /* $MASTER_40_ARGS */
add_arg(&al, "--rpl-recovery-rank=1"); add_arg(&al, "--rpl-recovery-rank=1");
add_arg(&al, "--init-rpl-role=master"); add_arg(&al, "--init-rpl-role=master");
// $SMALL_SERVER /* $SMALL_SERVER */
add_arg(&al, "-O"); add_arg(&al, "-O");
add_arg(&al, "key_buffer_size=1M"); add_arg(&al, "key_buffer_size=1M");
add_arg(&al, "-O"); add_arg(&al, "-O");
...@@ -459,40 +476,42 @@ void start_master() ...@@ -459,40 +476,42 @@ void start_master()
add_arg(&al, "-O"); add_arg(&al, "-O");
add_arg(&al, "max_heap_table_size=1M"); add_arg(&al, "max_heap_table_size=1M");
// $EXTRA_MASTER_OPT /* $EXTRA_MASTER_OPT */
if (master_opt[0] != 0) if (master_opt[0] != 0)
{ {
char *p; char *p;
p = (char *)str_tok(master_opt, " \t"); p= (char *)str_tok(master_opt, " \t");
if (!strstr(master_opt, "timezone")) if (!strstr(master_opt, "timezone"))
{ {
while (p) while (p)
{ {
add_arg(&al, "%s", p); add_arg(&al, "%s", p);
p = (char *)str_tok(NULL, " \t"); p= (char *)str_tok(NULL, " \t");
} }
} }
} }
// remove the pid file if it exists /* remove the pid file if it exists */
#ifndef __WIN__ #ifndef __WIN__
remove(master_pid); remove(master_pid);
#endif #endif
// spawn /* spawn */
#ifdef __WIN__ #ifdef __WIN__
if ((err= spawn(mysqld_file, &al, FALSE, NULL, master_out, master_err, &master_pid)) == 0) if ((err= spawn(mysqld_file, &al, FALSE, NULL,
master_out, master_err, &master_pid)) == 0)
#else #else
if ((err= spawn(mysqld_file, &al, FALSE, NULL, master_out, master_err, master_pid)) == 0) if ((err= spawn(mysqld_file, &al, FALSE, NULL,
master_out, master_err, master_pid)) == 0)
#endif #endif
{ {
sleep_until_file_exists(master_pid); sleep_until_file_exists(master_pid);
if ((err = wait_for_server_start(bin_dir, mysqladmin_file, user, password, master_port, if ((err= wait_for_server_start(bin_dir, mysqladmin_file, user, password,
mysql_tmp_dir)) == 0) master_port, mysql_tmp_dir)) == 0)
{ {
master_running = TRUE; master_running= TRUE;
} }
else else
{ {
...@@ -504,7 +523,7 @@ void start_master() ...@@ -504,7 +523,7 @@ void start_master()
log_error("Unable to start master server."); log_error("Unable to start master server.");
} }
// free_args /* free_args */
free_args(&al); free_args(&al);
} }
...@@ -515,6 +534,7 @@ void start_master() ...@@ -515,6 +534,7 @@ void start_master()
Start the slave server. Start the slave server.
******************************************************************************/ ******************************************************************************/
void start_slave() void start_slave()
{ {
arg_list_t al; arg_list_t al;
...@@ -522,32 +542,32 @@ void start_slave() ...@@ -522,32 +542,32 @@ void start_slave()
char slave_out[PATH_MAX]; char slave_out[PATH_MAX];
char slave_err[PATH_MAX]; char slave_err[PATH_MAX];
// skip? /* skip? */
if (skip_slave) return; if (skip_slave) return;
// remove stale binary logs /* remove stale binary logs */
removef("%s/*-bin.*", slave_dir); removef("%s/*-bin.*", slave_dir);
// remove stale binary logs /* remove stale binary logs */
removef("%s/*.index", slave_dir); removef("%s/*.index", slave_dir);
// remove master.info file /* remove master.info file */
removef("%s/master.info", slave_dir); removef("%s/master.info", slave_dir);
// remove relay files /* remove relay files */
removef("%s/var/log/*relay*", mysql_test_dir); removef("%s/var/log/*relay*", mysql_test_dir);
// remove relay-log.info file /* remove relay-log.info file */
removef("%s/relay-log.info", slave_dir); removef("%s/relay-log.info", slave_dir);
// init script /* init script */
if (slave_init_script[0] != 0) if (slave_init_script[0] != 0)
{ {
#ifdef __NETWARE__ #ifdef __NETWARE__
// TODO: use the scripts /* TODO: use the scripts */
if (strinstr(slave_init_script, "rpl000016-slave.sh") != 0) if (strinstr(slave_init_script, "rpl000016-slave.sh") != 0)
{ {
// create empty master.info file /* create empty master.info file */
snprintf(temp, PATH_MAX, "%s/master.info", slave_dir); snprintf(temp, PATH_MAX, "%s/master.info", slave_dir);
close(open(temp, O_WRONLY | O_CREAT,S_IRWXU|S_IRWXG|S_IRWXO)); close(open(temp, O_WRONLY | O_CREAT,S_IRWXU|S_IRWXG|S_IRWXO));
} }
...@@ -555,9 +575,9 @@ void start_slave() ...@@ -555,9 +575,9 @@ void start_slave()
{ {
FILE *fp; FILE *fp;
// create a master.info file /* create a master.info file */
snprintf(temp, PATH_MAX, "%s/master.info", slave_dir); snprintf(temp, PATH_MAX, "%s/master.info", slave_dir);
fp = fopen(temp, "wb+"); fp= fopen(temp, "wb+");
fputs("master-bin.000001\n", fp); fputs("master-bin.000001\n", fp);
fputs("4\n", fp); fputs("4\n", fp);
...@@ -572,7 +592,7 @@ void start_slave() ...@@ -572,7 +592,7 @@ void start_slave()
} }
else if (strinstr(slave_init_script, "rpl_rotate_logs-slave.sh") != 0) else if (strinstr(slave_init_script, "rpl_rotate_logs-slave.sh") != 0)
{ {
// create empty master.info file /* create empty master.info file */
snprintf(temp, PATH_MAX, "%s/master.info", slave_dir); snprintf(temp, PATH_MAX, "%s/master.info", slave_dir);
close(open(temp, O_WRONLY | O_CREAT,S_IRWXU|S_IRWXG|S_IRWXO)); close(open(temp, O_WRONLY | O_CREAT,S_IRWXU|S_IRWXG|S_IRWXO));
} }
...@@ -581,13 +601,13 @@ void start_slave() ...@@ -581,13 +601,13 @@ void start_slave()
#endif #endif
} }
// redirection files /* redirection files */
snprintf(slave_out, PATH_MAX, "%s/var/run/slave%u.out", snprintf(slave_out, PATH_MAX, "%s/var/run/slave%u.out",
mysql_test_dir, restarts); mysql_test_dir, restarts);
snprintf(slave_err, PATH_MAX, "%s/var/run/slave%u.err", snprintf(slave_err, PATH_MAX, "%s/var/run/slave%u.err",
mysql_test_dir, restarts); mysql_test_dir, restarts);
// args /* args */
init_args(&al); init_args(&al);
add_arg(&al, "%s", mysqld_file); add_arg(&al, "%s", mysqld_file);
add_arg(&al, "--no-defaults"); add_arg(&al, "--no-defaults");
...@@ -621,7 +641,7 @@ void start_slave() ...@@ -621,7 +641,7 @@ void start_slave()
add_arg(&al, "--master-retry-count=10"); add_arg(&al, "--master-retry-count=10");
add_arg(&al, "-O"); add_arg(&al, "-O");
add_arg(&al, "slave_net_timeout=10"); add_arg(&al, "slave_net_timeout=10");
#ifdef DEBUG //only for debug builds #ifdef DEBUG /* only for debug builds */
add_arg(&al, "--debug"); add_arg(&al, "--debug");
#endif #endif
...@@ -632,18 +652,17 @@ void start_slave() ...@@ -632,18 +652,17 @@ void start_slave()
add_arg(&al, "--ssl-key=%s", server_key); add_arg(&al, "--ssl-key=%s", server_key);
} }
// slave master info /* slave master info */
if (slave_master_info[0] != 0) if (slave_master_info[0] != 0)
{ {
char *p; char *p;
p = (char *)str_tok(slave_master_info, " \t"); p= (char *)str_tok(slave_master_info, " \t");
while(p) while (p)
{ {
add_arg(&al, "%s", p); add_arg(&al, "%s", p);
p= (char *)str_tok(NULL, " \t");
p = (char *)str_tok(NULL, " \t");
} }
} }
else else
...@@ -657,7 +676,7 @@ void start_slave() ...@@ -657,7 +676,7 @@ void start_slave()
add_arg(&al, "--rpl-recovery-rank=2"); add_arg(&al, "--rpl-recovery-rank=2");
} }
// small server /* small server */
add_arg(&al, "-O"); add_arg(&al, "-O");
add_arg(&al, "key_buffer_size=1M"); add_arg(&al, "key_buffer_size=1M");
add_arg(&al, "-O"); add_arg(&al, "-O");
...@@ -666,38 +685,39 @@ void start_slave() ...@@ -666,38 +685,39 @@ void start_slave()
add_arg(&al, "max_heap_table_size=1M"); add_arg(&al, "max_heap_table_size=1M");
// opt args /* opt args */
if (slave_opt[0] != 0) if (slave_opt[0] != 0)
{ {
char *p; char *p;
p = (char *)str_tok(slave_opt, " \t"); p= (char *)str_tok(slave_opt, " \t");
while(p) while (p)
{ {
add_arg(&al, "%s", p); add_arg(&al, "%s", p);
p= (char *)str_tok(NULL, " \t");
p = (char *)str_tok(NULL, " \t");
} }
} }
// remove the pid file if it exists /* remove the pid file if it exists */
#ifndef __WIN__ #ifndef __WIN__
remove(slave_pid); remove(slave_pid);
#endif #endif
// spawn /* spawn */
#ifdef __WIN__ #ifdef __WIN__
if ((err = spawn(mysqld_file, &al, FALSE, NULL, slave_out, slave_err, &slave_pid)) == 0) if ((err= spawn(mysqld_file, &al, FALSE, NULL,
slave_out, slave_err, &slave_pid)) == 0)
#else #else
if ((err = spawn(mysqld_file, &al, FALSE, NULL, slave_out, slave_err, slave_pid)) == 0) if ((err= spawn(mysqld_file, &al, FALSE, NULL,
slave_out, slave_err, slave_pid)) == 0)
#endif #endif
{ {
sleep_until_file_exists(slave_pid); sleep_until_file_exists(slave_pid);
if ((err = wait_for_server_start(bin_dir, mysqladmin_file, user, password, slave_port, if ((err= wait_for_server_start(bin_dir, mysqladmin_file, user, password,
mysql_tmp_dir)) == 0) slave_port, mysql_tmp_dir)) == 0)
{ {
slave_running = TRUE; slave_running= TRUE;
} }
else else
{ {
...@@ -709,7 +729,7 @@ void start_slave() ...@@ -709,7 +729,7 @@ void start_slave()
log_error("Unable to start slave server."); log_error("Unable to start slave server.");
} }
// free args /* free args */
free_args(&al); free_args(&al);
} }
...@@ -720,14 +740,15 @@ void start_slave() ...@@ -720,14 +740,15 @@ void start_slave()
Start the mysql servers. Start the mysql servers.
******************************************************************************/ ******************************************************************************/
void mysql_start() void mysql_start()
{ {
// log_info("Starting the MySQL server(s): %u", ++restarts); /* log_info("Starting the MySQL server(s): %u", ++restarts); */
start_master(); start_master();
start_slave(); start_slave();
// activate the test screen /* activate the test screen */
#ifdef __NETWARE__ #ifdef __NETWARE__
ActivateScreen(getscreenhandle()); ActivateScreen(getscreenhandle());
#endif #endif
...@@ -740,18 +761,19 @@ void mysql_start() ...@@ -740,18 +761,19 @@ void mysql_start()
Stop the slave server. Stop the slave server.
******************************************************************************/ ******************************************************************************/
void stop_slave() void stop_slave()
{ {
int err; int err;
// running? /* running? */
if (!slave_running) return; if (!slave_running) return;
// stop /* stop */
if ((err = stop_server(bin_dir, mysqladmin_file, user, password, slave_port, slave_pid, if ((err= stop_server(bin_dir, mysqladmin_file, user, password,
mysql_tmp_dir)) == 0) slave_port, slave_pid, mysql_tmp_dir)) == 0)
{ {
slave_running = FALSE; slave_running= FALSE;
} }
else else
{ {
...@@ -766,17 +788,18 @@ void stop_slave() ...@@ -766,17 +788,18 @@ void stop_slave()
Stop the master server. Stop the master server.
******************************************************************************/ ******************************************************************************/
void stop_master() void stop_master()
{ {
int err; int err;
// running? /* running? */
if (!master_running) return; if (!master_running) return;
if ((err = stop_server(bin_dir, mysqladmin_file, user, password, master_port, master_pid, if ((err= stop_server(bin_dir, mysqladmin_file, user, password,
mysql_tmp_dir)) == 0) master_port, master_pid, mysql_tmp_dir)) == 0)
{ {
master_running = FALSE; master_running= FALSE;
} }
else else
{ {
...@@ -791,6 +814,7 @@ void stop_master() ...@@ -791,6 +814,7 @@ void stop_master()
Stop the mysql servers. Stop the mysql servers.
******************************************************************************/ ******************************************************************************/
void mysql_stop() void mysql_stop()
{ {
...@@ -798,7 +822,7 @@ void mysql_stop() ...@@ -798,7 +822,7 @@ void mysql_stop()
stop_slave(); stop_slave();
// activate the test screen /* activate the test screen */
#ifdef __NETWARE__ #ifdef __NETWARE__
ActivateScreen(getscreenhandle()); ActivateScreen(getscreenhandle());
#endif #endif
...@@ -811,9 +835,10 @@ void mysql_stop() ...@@ -811,9 +835,10 @@ void mysql_stop()
Restart the mysql servers. Restart the mysql servers.
******************************************************************************/ ******************************************************************************/
void mysql_restart() void mysql_restart()
{ {
// log_info("Restarting the MySQL server(s): %u", ++restarts); /* log_info("Restarting the MySQL server(s): %u", ++restarts); */
mysql_stop(); mysql_stop();
...@@ -829,55 +854,52 @@ void mysql_restart() ...@@ -829,55 +854,52 @@ void mysql_restart()
Read the option file. Read the option file.
******************************************************************************/ ******************************************************************************/
int read_option(char *opt_file, char *opt) int read_option(char *opt_file, char *opt)
{ {
int fd, err; int fd, err;
char *p; char *p;
char buf[PATH_MAX]; char buf[PATH_MAX];
// copy current option /* copy current option */
strncpy(buf, opt, PATH_MAX); strncpy(buf, opt, PATH_MAX);
// open options file /* open options file */
fd = open(opt_file, O_RDONLY); fd= open(opt_file, O_RDONLY);
err= read(fd, opt, PATH_MAX);
err = read(fd, opt, PATH_MAX);
close(fd); close(fd);
if (err > 0) if (err > 0)
{ {
// terminate string /* terminate string */
if ((p = strchr(opt, '\n')) != NULL) if ((p= strchr(opt, '\n')) != NULL)
{ {
*p = 0; *p= 0;
// check for a '\r' /* check for a '\r' */
if ((p = strchr(opt, '\r')) != NULL) if ((p= strchr(opt, '\r')) != NULL)
{ {
*p = 0; *p= 0;
} }
} }
else else
{ {
opt[err] = 0; opt[err]= 0;
} }
// check for $MYSQL_TEST_DIR /* check for $MYSQL_TEST_DIR */
if ((p = strstr(opt, "$MYSQL_TEST_DIR")) != NULL) if ((p= strstr(opt, "$MYSQL_TEST_DIR")) != NULL)
{ {
char temp[PATH_MAX]; char temp[PATH_MAX];
*p = 0; *p= 0;
strcpy(temp, p + strlen("$MYSQL_TEST_DIR")); strcpy(temp, p + strlen("$MYSQL_TEST_DIR"));
strcat(opt, mysql_test_dir); strcat(opt, mysql_test_dir);
strcat(opt, temp); strcat(opt, temp);
} }
// Check for double backslash and replace it with single bakslash /* Check for double backslash and replace it with single bakslash */
if ((p = strstr(opt, "\\\\")) != NULL) if ((p= strstr(opt, "\\\\")) != NULL)
{ {
/* bmove is guranteed to work byte by byte */ /* bmove is guranteed to work byte by byte */
bmove(p, p+1, strlen(p+1)); bmove(p, p+1, strlen(p+1));
...@@ -885,11 +907,11 @@ int read_option(char *opt_file, char *opt) ...@@ -885,11 +907,11 @@ int read_option(char *opt_file, char *opt)
} }
else else
{ {
// clear option /* clear option */
*opt = 0; *opt= 0;
} }
// compare current option with previous /* compare current option with previous */
return strcmp(opt, buf); return strcmp(opt, buf);
} }
...@@ -900,39 +922,40 @@ int read_option(char *opt_file, char *opt) ...@@ -900,39 +922,40 @@ int read_option(char *opt_file, char *opt)
Run the given test case. Run the given test case.
******************************************************************************/ ******************************************************************************/
void run_test(char *test) void run_test(char *test)
{ {
char temp[PATH_MAX]; char temp[PATH_MAX];
const char *rstr; const char *rstr;
int skip = FALSE, ignore=FALSE; int skip= FALSE, ignore=FALSE;
int restart = FALSE; int restart= FALSE;
int flag = FALSE; int flag= FALSE;
struct stat info; struct stat info;
// skip tests in the skip list /* skip tests in the skip list */
snprintf(temp, PATH_MAX, " %s ", test); snprintf(temp, PATH_MAX, " %s ", test);
skip = (strinstr(skip_test, temp) != 0); skip= (strinstr(skip_test, temp) != 0);
if (skip == FALSE) if (skip == FALSE)
ignore = (strinstr(ignore_test, temp) != 0); ignore= (strinstr(ignore_test, temp) != 0);
snprintf(master_init_script, PATH_MAX, "%s/%s-master.sh", test_dir, test); snprintf(master_init_script, PATH_MAX, "%s/%s-master.sh", test_dir, test);
snprintf(slave_init_script, PATH_MAX, "%s/%s-slave.sh", test_dir, test); snprintf(slave_init_script, PATH_MAX, "%s/%s-slave.sh", test_dir, test);
#ifdef __WIN__ #ifdef __WIN__
if (! stat(master_init_script, &info)) if (! stat(master_init_script, &info))
skip = TRUE; skip= TRUE;
if (!stat(slave_init_script, &info)) if (!stat(slave_init_script, &info))
skip = TRUE; skip= TRUE;
#endif #endif
if (ignore) if (ignore)
{ {
// show test /* show test */
mlog("%-46s ", test); mlog("%-46s ", test);
// ignore /* ignore */
rstr = TEST_IGNORE; rstr= TEST_IGNORE;
++total_ignore; ++total_ignore;
} }
else if (!skip) // skip test? else if (!skip) /* skip test? */
{ {
char test_file[PATH_MAX]; char test_file[PATH_MAX];
char master_opt_file[PATH_MAX]; char master_opt_file[PATH_MAX];
...@@ -945,29 +968,29 @@ void run_test(char *test) ...@@ -945,29 +968,29 @@ void run_test(char *test)
int err; int err;
arg_list_t al; arg_list_t al;
#ifdef __WIN__ #ifdef __WIN__
/* /* Clean test database */
Clean test database
*/
removef("%s/test/*.*", master_dir); removef("%s/test/*.*", master_dir);
removef("%s/test/*.*", slave_dir); removef("%s/test/*.*", slave_dir);
removef("%s/mysqltest/*.*", master_dir); removef("%s/mysqltest/*.*", master_dir);
removef("%s/mysqltest/*.*", slave_dir); removef("%s/mysqltest/*.*", slave_dir);
#endif #endif
// skip slave? /* skip slave? */
flag = skip_slave; flag= skip_slave;
skip_slave = (strncmp(test, "rpl", 3) != 0); skip_slave= (strncmp(test, "rpl", 3) != 0);
if (flag != skip_slave) restart = TRUE; if (flag != skip_slave) restart= TRUE;
// create files /* create files */
snprintf(master_opt_file, PATH_MAX, "%s/%s-master.opt", test_dir, test); snprintf(master_opt_file, PATH_MAX, "%s/%s-master.opt", test_dir, test);
snprintf(slave_opt_file, PATH_MAX, "%s/%s-slave.opt", test_dir, test); snprintf(slave_opt_file, PATH_MAX, "%s/%s-slave.opt", test_dir, test);
snprintf(slave_master_info_file, PATH_MAX, "%s/%s.slave-mi", test_dir, test); snprintf(slave_master_info_file, PATH_MAX, "%s/%s.slave-mi",
snprintf(reject_file, PATH_MAX, "%s/%s%s", result_dir, test, REJECT_SUFFIX); test_dir, test);
snprintf(reject_file, PATH_MAX, "%s/%s%s",
result_dir, test, REJECT_SUFFIX);
snprintf(out_file, PATH_MAX, "%s/%s%s", result_dir, test, OUT_SUFFIX); snprintf(out_file, PATH_MAX, "%s/%s%s", result_dir, test, OUT_SUFFIX);
snprintf(err_file, PATH_MAX, "%s/%s%s", result_dir, test, ERR_SUFFIX); snprintf(err_file, PATH_MAX, "%s/%s%s", result_dir, test, ERR_SUFFIX);
// netware specific files /* netware specific files */
snprintf(test_file, PATH_MAX, "%s/%s%s", test_dir, test, NW_TEST_SUFFIX); snprintf(test_file, PATH_MAX, "%s/%s%s", test_dir, test, NW_TEST_SUFFIX);
if (stat(test_file, &info)) if (stat(test_file, &info))
{ {
...@@ -979,45 +1002,46 @@ void run_test(char *test) ...@@ -979,45 +1002,46 @@ void run_test(char *test)
} }
} }
snprintf(result_file, PATH_MAX, "%s/%s%s", result_dir, test, NW_RESULT_SUFFIX); snprintf(result_file, PATH_MAX, "%s/%s%s",
result_dir, test, NW_RESULT_SUFFIX);
if (stat(result_file, &info)) if (stat(result_file, &info))
{ {
snprintf(result_file, PATH_MAX, "%s/%s%s", result_dir, test, RESULT_SUFFIX); snprintf(result_file, PATH_MAX, "%s/%s%s",
result_dir, test, RESULT_SUFFIX);
} }
// init scripts /* init scripts */
if (stat(master_init_script, &info)) if (stat(master_init_script, &info))
master_init_script[0] = 0; master_init_script[0]= 0;
else else
restart = TRUE; restart= TRUE;
if (stat(slave_init_script, &info)) if (stat(slave_init_script, &info))
slave_init_script[0] = 0; slave_init_script[0]= 0;
else else
restart = TRUE; restart= TRUE;
// read options /* read options */
if (read_option(master_opt_file, master_opt)) restart = TRUE; if (read_option(master_opt_file, master_opt)) restart= TRUE;
if (read_option(slave_opt_file, slave_opt)) restart = TRUE; if (read_option(slave_opt_file, slave_opt)) restart= TRUE;
if (read_option(slave_master_info_file, slave_master_info)) restart = TRUE; if (read_option(slave_master_info_file, slave_master_info)) restart= TRUE;
// cleanup previous run /* cleanup previous run */
remove(reject_file); remove(reject_file);
remove(out_file); remove(out_file);
remove(err_file); remove(err_file);
// start or restart? /* start or restart? */
if (!master_running) mysql_start(); if (!master_running) mysql_start();
else if (restart) mysql_restart(); else if (restart) mysql_restart();
// let the system stabalize /* let the system stabalize */
sleep(1); sleep(1);
// show test /* show test */
mlog("%-46s ", test); mlog("%-46s ", test);
/* args */
// args
init_args(&al); init_args(&al);
add_arg(&al, "%s", mysqltest_file); add_arg(&al, "%s", mysqltest_file);
add_arg(&al, "--no-defaults"); add_arg(&al, "--no-defaults");
...@@ -1043,10 +1067,10 @@ void run_test(char *test) ...@@ -1043,10 +1067,10 @@ void run_test(char *test)
add_arg(&al, "--ssl-key=%s", client_key); add_arg(&al, "--ssl-key=%s", client_key);
} }
// spawn /* spawn */
err = spawn(mysqltest_file, &al, TRUE, test_file, out_file, err_file, NULL); err= spawn(mysqltest_file, &al, TRUE, test_file, out_file, err_file, NULL);
// free args /* free args */
free_args(&al); free_args(&al);
remove_empty_file(out_file); remove_empty_file(out_file);
...@@ -1054,44 +1078,44 @@ void run_test(char *test) ...@@ -1054,44 +1078,44 @@ void run_test(char *test)
if (err == 0) if (err == 0)
{ {
// pass /* pass */
rstr = TEST_PASS; rstr= TEST_PASS;
++total_pass; ++total_pass;
// increment total /* increment total */
++total_test; ++total_test;
} }
else if (err == 2) else if (err == 2)
{ {
// skip /* skip */
rstr = TEST_SKIP; rstr= TEST_SKIP;
++total_skip; ++total_skip;
} }
else if (err == 1) else if (err == 1)
{ {
// fail /* fail */
rstr = TEST_FAIL; rstr= TEST_FAIL;
++total_fail; ++total_fail;
// increment total /* increment total */
++total_test; ++total_test;
} }
else else
{ {
rstr = TEST_BAD; rstr= TEST_BAD;
} }
} }
else // early skips else /* early skips */
{ {
// show test /* show test */
mlog("%-46s ", test); mlog("%-46s ", test);
// skip /* skip */
rstr = TEST_SKIP; rstr= TEST_SKIP;
++total_skip; ++total_skip;
} }
// result /* result */
mlog("%-14s\n", rstr); mlog("%-14s\n", rstr);
} }
...@@ -1102,6 +1126,7 @@ void run_test(char *test) ...@@ -1102,6 +1126,7 @@ void run_test(char *test)
Log the message. Log the message.
******************************************************************************/ ******************************************************************************/
void vlog(const char *format, va_list ap) void vlog(const char *format, va_list ap)
{ {
vfprintf(stdout, format, ap); vfprintf(stdout, format, ap);
...@@ -1121,6 +1146,7 @@ void vlog(const char *format, va_list ap) ...@@ -1121,6 +1146,7 @@ void vlog(const char *format, va_list ap)
Log the message. Log the message.
******************************************************************************/ ******************************************************************************/
void mlog(const char *format, ...) void mlog(const char *format, ...)
{ {
va_list ap; va_list ap;
...@@ -1139,6 +1165,7 @@ void mlog(const char *format, ...) ...@@ -1139,6 +1165,7 @@ void mlog(const char *format, ...)
Log the given information. Log the given information.
******************************************************************************/ ******************************************************************************/
void log_info(const char *format, ...) void log_info(const char *format, ...)
{ {
va_list ap; va_list ap;
...@@ -1159,6 +1186,7 @@ void log_info(const char *format, ...) ...@@ -1159,6 +1186,7 @@ void log_info(const char *format, ...)
Log the given error. Log the given error.
******************************************************************************/ ******************************************************************************/
void log_error(const char *format, ...) void log_error(const char *format, ...)
{ {
va_list ap; va_list ap;
...@@ -1179,6 +1207,7 @@ void log_error(const char *format, ...) ...@@ -1179,6 +1207,7 @@ void log_error(const char *format, ...)
Log the given error and errno. Log the given error and errno.
******************************************************************************/ ******************************************************************************/
void log_errno(const char *format, ...) void log_errno(const char *format, ...)
{ {
va_list ap; va_list ap;
...@@ -1199,6 +1228,7 @@ void log_errno(const char *format, ...) ...@@ -1199,6 +1228,7 @@ void log_errno(const char *format, ...)
Exit the application. Exit the application.
******************************************************************************/ ******************************************************************************/
void die(const char *msg) void die(const char *msg)
{ {
log_error(msg); log_error(msg);
...@@ -1215,44 +1245,45 @@ void die(const char *msg) ...@@ -1215,44 +1245,45 @@ void die(const char *msg)
Setup the mysql test enviornment. Setup the mysql test enviornment.
******************************************************************************/ ******************************************************************************/
void setup(char *file)
void setup(char *file __attribute__((unused)))
{ {
char temp[PATH_MAX]; char temp[PATH_MAX];
char file_path[PATH_MAX*2]; char file_path[PATH_MAX*2];
char *p; char *p;
int position; int position;
// set the timezone for the timestamp test /* set the timezone for the timestamp test */
#ifdef __WIN__ #ifdef __WIN__
_putenv( "TZ=GMT-3" ); _putenv( "TZ=GMT-3" );
#else #else
setenv("TZ", "GMT-3", TRUE); setenv("TZ", "GMT-3", TRUE);
#endif #endif
// find base dir /* find base dir */
#ifdef __NETWARE__ #ifdef __NETWARE__
strcpy(temp, strlwr(file)); strcpy(temp, strlwr(file));
while((p = strchr(temp, '\\')) != NULL) *p = '/'; while ((p= strchr(temp, '\\')) != NULL) *p= '/';
#else #else
getcwd(temp, PATH_MAX); getcwd(temp, PATH_MAX);
position = strlen(temp); position= strlen(temp);
temp[position] = '/'; temp[position]= '/';
temp[position+1] = 0; temp[position+1]= 0;
#ifdef __WIN__ #ifdef __WIN__
while((p = strchr(temp, '\\')) != NULL) *p = '/'; while ((p= strchr(temp, '\\')) != NULL) *p= '/';
#endif #endif
#endif #endif
if ((position = strinstr(temp, "/mysql-test/")) != 0) if ((position= strinstr(temp, "/mysql-test/")) != 0)
{ {
p = temp + position - 1; p= temp + position - 1;
*p = 0; *p= 0;
strcpy(base_dir, temp); strcpy(base_dir, temp);
} }
log_info("Currect directory: %s",base_dir); log_info("Currect directory: %s",base_dir);
#ifdef __NETWARE__ #ifdef __NETWARE__
// setup paths /* setup paths */
snprintf(bin_dir, PATH_MAX, "%s/bin", base_dir); snprintf(bin_dir, PATH_MAX, "%s/bin", base_dir);
snprintf(mysql_test_dir, PATH_MAX, "%s/mysql-test", base_dir); snprintf(mysql_test_dir, PATH_MAX, "%s/mysql-test", base_dir);
snprintf(test_dir, PATH_MAX, "%s/t", mysql_test_dir); snprintf(test_dir, PATH_MAX, "%s/t", mysql_test_dir);
...@@ -1264,24 +1295,24 @@ void setup(char *file) ...@@ -1264,24 +1295,24 @@ void setup(char *file)
snprintf(char_dir, PATH_MAX, "%s/share/charsets", base_dir); snprintf(char_dir, PATH_MAX, "%s/share/charsets", base_dir);
#ifdef HAVE_OPENSSL #ifdef HAVE_OPENSSL
use_openssl = TRUE; use_openssl= TRUE;
#endif // HAVE_OPENSSL #endif /* HAVE_OPENSSL */
// OpenSSL paths /* OpenSSL paths */
snprintf(ca_cert, PATH_MAX, "%s/SSL/cacert.pem", base_dir); snprintf(ca_cert, PATH_MAX, "%s/SSL/cacert.pem", base_dir);
snprintf(server_cert, PATH_MAX, "%s/SSL/server-cert.pem", base_dir); snprintf(server_cert, PATH_MAX, "%s/SSL/server-cert.pem", base_dir);
snprintf(server_key, PATH_MAX, "%s/SSL/server-key.pem", base_dir); snprintf(server_key, PATH_MAX, "%s/SSL/server-key.pem", base_dir);
snprintf(client_cert, PATH_MAX, "%s/SSL/client-cert.pem", base_dir); snprintf(client_cert, PATH_MAX, "%s/SSL/client-cert.pem", base_dir);
snprintf(client_key, PATH_MAX, "%s/SSL/client-key.pem", base_dir); snprintf(client_key, PATH_MAX, "%s/SSL/client-key.pem", base_dir);
// setup files /* setup files */
snprintf(mysqld_file, PATH_MAX, "%s/mysqld", bin_dir); snprintf(mysqld_file, PATH_MAX, "%s/mysqld", bin_dir);
snprintf(mysqltest_file, PATH_MAX, "%s/mysqltest", bin_dir); snprintf(mysqltest_file, PATH_MAX, "%s/mysqltest", bin_dir);
snprintf(mysqladmin_file, PATH_MAX, "%s/mysqladmin", bin_dir); snprintf(mysqladmin_file, PATH_MAX, "%s/mysqladmin", bin_dir);
snprintf(master_pid, PATH_MAX, "%s/var/run/master.pid", mysql_test_dir); snprintf(master_pid, PATH_MAX, "%s/var/run/master.pid", mysql_test_dir);
snprintf(slave_pid, PATH_MAX, "%s/var/run/slave.pid", mysql_test_dir); snprintf(slave_pid, PATH_MAX, "%s/var/run/slave.pid", mysql_test_dir);
#elif __WIN__ #elif __WIN__
// setup paths /* setup paths */
#ifdef _DEBUG #ifdef _DEBUG
snprintf(bin_dir, PATH_MAX, "%s/client_debug", base_dir); snprintf(bin_dir, PATH_MAX, "%s/client_debug", base_dir);
#else #else
...@@ -1297,22 +1328,22 @@ void setup(char *file) ...@@ -1297,22 +1328,22 @@ void setup(char *file)
snprintf(char_dir, PATH_MAX, "%s/share/charsets", base_dir); snprintf(char_dir, PATH_MAX, "%s/share/charsets", base_dir);
#ifdef HAVE_OPENSSL #ifdef HAVE_OPENSSL
use_openssl = TRUE; use_openssl= TRUE;
#endif // HAVE_OPENSSL #endif /* HAVE_OPENSSL */
// OpenSSL paths /* OpenSSL paths */
snprintf(ca_cert, PATH_MAX, "%s/SSL/cacert.pem", base_dir); snprintf(ca_cert, PATH_MAX, "%s/SSL/cacert.pem", base_dir);
snprintf(server_cert, PATH_MAX, "%s/SSL/server-cert.pem", base_dir); snprintf(server_cert, PATH_MAX, "%s/SSL/server-cert.pem", base_dir);
snprintf(server_key, PATH_MAX, "%s/SSL/server-key.pem", base_dir); snprintf(server_key, PATH_MAX, "%s/SSL/server-key.pem", base_dir);
snprintf(client_cert, PATH_MAX, "%s/SSL/client-cert.pem", base_dir); snprintf(client_cert, PATH_MAX, "%s/SSL/client-cert.pem", base_dir);
snprintf(client_key, PATH_MAX, "%s/SSL/client-key.pem", base_dir); snprintf(client_key, PATH_MAX, "%s/SSL/client-key.pem", base_dir);
// setup files /* setup files */
snprintf(mysqld_file, PATH_MAX, "%s/mysqld.exe", bin_dir); snprintf(mysqld_file, PATH_MAX, "%s/mysqld.exe", bin_dir);
snprintf(mysqltest_file, PATH_MAX, "%s/mysqltest.exe", bin_dir); snprintf(mysqltest_file, PATH_MAX, "%s/mysqltest.exe", bin_dir);
snprintf(mysqladmin_file, PATH_MAX, "%s/mysqladmin.exe", bin_dir); snprintf(mysqladmin_file, PATH_MAX, "%s/mysqladmin.exe", bin_dir);
#else #else
// setup paths /* setup paths */
snprintf(bin_dir, PATH_MAX, "%s/client", base_dir); snprintf(bin_dir, PATH_MAX, "%s/client", base_dir);
snprintf(mysql_test_dir, PATH_MAX, "%s/mysql-test", base_dir); snprintf(mysql_test_dir, PATH_MAX, "%s/mysql-test", base_dir);
snprintf(test_dir, PATH_MAX, "%s/t", mysql_test_dir); snprintf(test_dir, PATH_MAX, "%s/t", mysql_test_dir);
...@@ -1324,17 +1355,17 @@ void setup(char *file) ...@@ -1324,17 +1355,17 @@ void setup(char *file)
snprintf(char_dir, PATH_MAX, "%s/sql/share/charsets", base_dir); snprintf(char_dir, PATH_MAX, "%s/sql/share/charsets", base_dir);
#ifdef HAVE_OPENSSL #ifdef HAVE_OPENSSL
use_openssl = TRUE; use_openssl= TRUE;
#endif // HAVE_OPENSSL #endif /* HAVE_OPENSSL */
// OpenSSL paths /* OpenSSL paths */
snprintf(ca_cert, PATH_MAX, "%s/SSL/cacert.pem", base_dir); snprintf(ca_cert, PATH_MAX, "%s/SSL/cacert.pem", base_dir);
snprintf(server_cert, PATH_MAX, "%s/SSL/server-cert.pem", base_dir); snprintf(server_cert, PATH_MAX, "%s/SSL/server-cert.pem", base_dir);
snprintf(server_key, PATH_MAX, "%s/SSL/server-key.pem", base_dir); snprintf(server_key, PATH_MAX, "%s/SSL/server-key.pem", base_dir);
snprintf(client_cert, PATH_MAX, "%s/SSL/client-cert.pem", base_dir); snprintf(client_cert, PATH_MAX, "%s/SSL/client-cert.pem", base_dir);
snprintf(client_key, PATH_MAX, "%s/SSL/client-key.pem", base_dir); snprintf(client_key, PATH_MAX, "%s/SSL/client-key.pem", base_dir);
// setup files /* setup files */
snprintf(mysqld_file, PATH_MAX, "%s/sql/mysqld", base_dir); snprintf(mysqld_file, PATH_MAX, "%s/sql/mysqld", base_dir);
snprintf(mysqltest_file, PATH_MAX, "%s/mysqltest", bin_dir); snprintf(mysqltest_file, PATH_MAX, "%s/mysqltest", bin_dir);
snprintf(mysqladmin_file, PATH_MAX, "%s/mysqladmin", bin_dir); snprintf(mysqladmin_file, PATH_MAX, "%s/mysqladmin", bin_dir);
...@@ -1345,37 +1376,49 @@ void setup(char *file) ...@@ -1345,37 +1376,49 @@ void setup(char *file)
snprintf(slave_socket,PATH_MAX, "%s/var/tmp/slave.sock", mysql_test_dir); snprintf(slave_socket,PATH_MAX, "%s/var/tmp/slave.sock", mysql_test_dir);
#endif #endif
// create log file /* create log file */
snprintf(temp, PATH_MAX, "%s/mysql-test-run.log", mysql_test_dir); snprintf(temp, PATH_MAX, "%s/mysql-test-run.log", mysql_test_dir);
if ((log_fd = fopen(temp, "w+")) == NULL) if ((log_fd= fopen(temp, "w+")) == NULL)
{ {
log_errno("Unable to create log file."); log_errno("Unable to create log file.");
} }
// prepare skip test list /* prepare skip test list */
while((p = strchr(skip_test, ',')) != NULL) *p = ' '; while ((p= strchr(skip_test, ',')) != NULL) *p= ' ';
strcpy(temp, strlwr(skip_test)); strcpy(temp, strlwr(skip_test));
snprintf(skip_test, PATH_MAX, " %s ", temp); snprintf(skip_test, PATH_MAX, " %s ", temp);
// environment /* environment */
#ifdef __NETWARE__ #ifdef __NETWARE__
setenv("MYSQL_TEST_DIR", mysql_test_dir, 1); setenv("MYSQL_TEST_DIR", mysql_test_dir, 1);
snprintf(file_path, PATH_MAX*2, "%s/client/mysqldump --no-defaults -u root --port=%u", bin_dir, master_port); snprintf(file_path, PATH_MAX*2,
"%s/client/mysqldump --no-defaults -u root --port=%u",
bin_dir, master_port);
setenv("MYSQL_DUMP", file_path, 1); setenv("MYSQL_DUMP", file_path, 1);
snprintf(file_path, PATH_MAX*2, "%s/client/mysqlbinlog --no-defaults --local-load=%s", bin_dir, mysql_tmp_dir); snprintf(file_path, PATH_MAX*2,
"%s/client/mysqlbinlog --no-defaults --local-load=%s",
bin_dir, mysql_tmp_dir);
setenv("MYSQL_BINLOG", file_path, 1); setenv("MYSQL_BINLOG", file_path, 1);
#elif __WIN__ #elif __WIN__
snprintf(file_path,MAX_PATH,"MYSQL_TEST_DIR=%s",mysql_test_dir); snprintf(file_path,MAX_PATH,"MYSQL_TEST_DIR=%s",mysql_test_dir);
_putenv(file_path); _putenv(file_path);
snprintf(file_path, PATH_MAX*2, "MYSQL_DUMP=%s/mysqldump.exe --no-defaults -u root --port=%u", bin_dir, master_port); snprintf(file_path, PATH_MAX*2,
"MYSQL_DUMP=%s/mysqldump.exe --no-defaults -u root --port=%u",
bin_dir, master_port);
_putenv(file_path); _putenv(file_path);
snprintf(file_path, PATH_MAX*2, "MYSQL_BINLOG=%s/mysqlbinlog.exe --no-defaults --local-load=%s", bin_dir, mysql_tmp_dir); snprintf(file_path, PATH_MAX*2,
"MYSQL_BINLOG=%s/mysqlbinlog.exe --no-defaults --local-load=%s",
bin_dir, mysql_tmp_dir);
_putenv(file_path); _putenv(file_path);
#else #else
setenv("MYSQL_TEST_DIR", mysql_test_dir, 1); setenv("MYSQL_TEST_DIR", mysql_test_dir, 1);
snprintf(file_path, PATH_MAX*2, "%s/mysqldump --no-defaults -u root --port=%u --socket=%s", bin_dir, master_port, master_socket); snprintf(file_path, PATH_MAX*2,
"%s/mysqldump --no-defaults -u root --port=%u --socket=%s",
bin_dir, master_port, master_socket);
setenv("MYSQL_DUMP", file_path, 1); setenv("MYSQL_DUMP", file_path, 1);
snprintf(file_path, PATH_MAX*2, "%s/mysqlbinlog --no-defaults --local-load=%s", bin_dir, mysql_tmp_dir); snprintf(file_path, PATH_MAX*2,
"%s/mysqlbinlog --no-defaults --local-load=%s",
bin_dir, mysql_tmp_dir);
setenv("MYSQL_BINLOG", file_path, 1); setenv("MYSQL_BINLOG", file_path, 1);
#endif #endif
...@@ -1396,13 +1439,15 @@ void setup(char *file) ...@@ -1396,13 +1439,15 @@ void setup(char *file)
main() main()
******************************************************************************/ ******************************************************************************/
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
int is_ignore_list = 0; int is_ignore_list= 0;
// setup /* setup */
setup(argv[0]); setup(argv[0]);
/* The --ignore option is comma saperated list of test cases to skip and /*
The --ignore option is comma saperated list of test cases to skip and
should be very first command line option to the test suite. should be very first command line option to the test suite.
The usage is now: The usage is now:
...@@ -1425,9 +1470,9 @@ int main(int argc, char **argv) ...@@ -1425,9 +1470,9 @@ int main(int argc, char **argv)
} }
} }
free(temp); free(temp);
is_ignore_list = 1; is_ignore_list= 1;
} }
// header /* header */
#ifndef __WIN__ #ifndef __WIN__
mlog("MySQL Server %s, for %s (%s)\n\n", VERSION, SYSTEM_TYPE, MACHINE_TYPE); mlog("MySQL Server %s, for %s (%s)\n\n", VERSION, SYSTEM_TYPE, MACHINE_TYPE);
#else #else
...@@ -1436,7 +1481,7 @@ int main(int argc, char **argv) ...@@ -1436,7 +1481,7 @@ int main(int argc, char **argv)
mlog("Initializing Tests...\n"); mlog("Initializing Tests...\n");
// install test databases /* install test databases */
mysql_install_db(); mysql_install_db();
mlog("Starting Tests...\n"); mlog("Starting Tests...\n");
...@@ -1449,18 +1494,18 @@ int main(int argc, char **argv) ...@@ -1449,18 +1494,18 @@ int main(int argc, char **argv)
{ {
int i; int i;
// single test /* single test */
single_test = TRUE; single_test= TRUE;
for (i = 1 + is_ignore_list; i < argc; i++) for (i= 1 + is_ignore_list; i < argc; i++)
{ {
// run given test /* run given test */
run_test(argv[i]); run_test(argv[i]);
} }
} }
else else
{ {
// run all tests /* run all tests */
#ifndef __WIN__ #ifndef __WIN__
struct dirent **namelist; struct dirent **namelist;
int i,n; int i,n;
...@@ -1468,21 +1513,21 @@ int main(int argc, char **argv) ...@@ -1468,21 +1513,21 @@ int main(int argc, char **argv)
char *p; char *p;
int position; int position;
n = scandir(test_dir, &namelist, 0, alphasort); n= scandir(test_dir, &namelist, 0, alphasort);
if (n < 0) if (n < 0)
die("Unable to open tests directory."); die("Unable to open tests directory.");
else else
{ {
for (i = 0; i < n; i++) for (i= 0; i < n; i++)
{ {
strcpy(test, strlwr(namelist[i]->d_name)); strcpy(test, strlwr(namelist[i]->d_name));
// find the test suffix /* find the test suffix */
if ((position = strinstr(test, TEST_SUFFIX)) != 0) if ((position= strinstr(test, TEST_SUFFIX)) != 0)
{ {
p = test + position - 1; p= test + position - 1;
// null terminate at the suffix /* null terminate at the suffix */
*p = 0; *p= 0;
// run test /* run test */
run_test(test); run_test(test);
} }
free(namelist[n]); free(namelist[n]);
...@@ -1496,13 +1541,13 @@ int main(int argc, char **argv) ...@@ -1496,13 +1541,13 @@ int main(int argc, char **argv)
char mask[PATH_MAX]; char mask[PATH_MAX];
char *p; char *p;
int position; int position;
char **names = 0; char **names= 0;
char **testes = 0; char **testes= 0;
int name_index; int name_index;
int index; int index;
// single test /* single test */
single_test = FALSE; single_test= FALSE;
snprintf(mask,MAX_PATH,"%s/*.test",test_dir); snprintf(mask,MAX_PATH,"%s/*.test",test_dir);
...@@ -1511,9 +1556,9 @@ int main(int argc, char **argv) ...@@ -1511,9 +1556,9 @@ int main(int argc, char **argv)
die("Unable to open tests directory."); die("Unable to open tests directory.");
} }
names = malloc(MAX_COUNT_TESTES*4); names= malloc(MAX_COUNT_TESTES*4);
testes = names; testes= names;
name_index = 0; name_index= 0;
do do
{ {
...@@ -1521,15 +1566,15 @@ int main(int argc, char **argv) ...@@ -1521,15 +1566,15 @@ int main(int argc, char **argv)
{ {
strcpy(test, strlwr(dir.name)); strcpy(test, strlwr(dir.name));
// find the test suffix /* find the test suffix */
if ((position = strinstr(test, TEST_SUFFIX)) != 0) if ((position= strinstr(test, TEST_SUFFIX)) != 0)
{ {
p = test + position - 1; p= test + position - 1;
// null terminate at the suffix /* null terminate at the suffix */
*p = 0; *p= 0;
// insert test /* insert test */
*names = malloc(PATH_MAX); *names= malloc(PATH_MAX);
strcpy(*names,test); strcpy(*names,test);
names++; names++;
name_index++; name_index++;
...@@ -1541,7 +1586,7 @@ int main(int argc, char **argv) ...@@ -1541,7 +1586,7 @@ int main(int argc, char **argv)
qsort( (void *)testes, name_index, sizeof( char * ), compare ); qsort( (void *)testes, name_index, sizeof( char * ), compare );
for (index = 0; index <= name_index; index++) for (index= 0; index <= name_index; index++)
{ {
run_test(testes[index]); run_test(testes[index]);
free(testes[index]); free(testes[index]);
...@@ -1551,7 +1596,7 @@ int main(int argc, char **argv) ...@@ -1551,7 +1596,7 @@ int main(int argc, char **argv)
#endif #endif
} }
// stop server /* stop server */
mysql_stop(); mysql_stop();
mlog(DASH); mlog(DASH);
...@@ -1559,13 +1604,13 @@ int main(int argc, char **argv) ...@@ -1559,13 +1604,13 @@ int main(int argc, char **argv)
mlog("Ending Tests...\n"); mlog("Ending Tests...\n");
// report stats /* report stats */
report_stats(); report_stats();
// close log /* close log */
if (log_fd) fclose(log_fd); if (log_fd) fclose(log_fd);
// keep results up /* keep results up */
#ifdef __NETWARE__ #ifdef __NETWARE__
pressanykey(); pressanykey();
#endif #endif
...@@ -1595,7 +1640,6 @@ Output: ...@@ -1595,7 +1640,6 @@ Output:
return the null terminated token of NULL. return the null terminated token of NULL.
*/ */
char *str_tok(char *string, const char *delim) char *str_tok(char *string, const char *delim)
{ {
char *token; /* current token received from strtok */ char *token; /* current token received from strtok */
...@@ -1613,34 +1657,32 @@ char *str_tok(char *string, const char *delim) ...@@ -1613,34 +1657,32 @@ char *str_tok(char *string, const char *delim)
return NULL; return NULL;
/* repeate till we are getting some token from strtok */ /* repeate till we are getting some token from strtok */
while ((token = (char*)strtok(string, delim) ) != NULL) while ((token= (char*)strtok(string, delim) ) != NULL)
{ {
/* /*
make the input string NULL so that next time onward strtok can make the input string NULL so that next time onward strtok can
be called with NULL input string. be called with NULL input string.
*/ */
string = NULL; string= NULL;
/* /* We don't need to remove any quote character for Windows version */
We don't need to remove any quote character for Windows version
*/
#ifndef __WIN__ #ifndef __WIN__
/* check if the current token contain double quote character*/ /* check if the current token contain double quote character*/
if ((ptr_quote = (char*)strchr(token,'\"')) != NULL) if ((ptr_quote= (char*)strchr(token,'\"')) != NULL)
{ {
/* /*
get the matching the matching double quote in the remaining get the matching the matching double quote in the remaining
input string input string
*/ */
qt_token = (char*)strtok(NULL,"\""); qt_token= (char*)strtok(NULL,"\"");
} }
/* check if the current token contain single quote character*/ /* check if the current token contain single quote character*/
else if ((ptr_quote = (char*)strchr(token,'\'')) != NULL) else if ((ptr_quote= (char*)strchr(token,'\'')) != NULL)
{ {
/* /*
get the matching the matching single quote in the remaining get the matching the matching single quote in the remaining
input string input string
*/ */
qt_token = (char*)strtok(NULL,"\'"); qt_token= (char*)strtok(NULL,"\'");
} }
#endif #endif
/* /*
...@@ -1706,23 +1748,24 @@ Arguments: ...@@ -1706,23 +1748,24 @@ Arguments:
Output: Output:
nothing nothing
*/ */
void run_init_script(const char *script_name) void run_init_script(const char *script_name)
{ {
arg_list_t al; arg_list_t al;
int err; int err;
// args /* args */
init_args(&al); init_args(&al);
add_arg(&al, sh_file); add_arg(&al, sh_file);
add_arg(&al, script_name); add_arg(&al, script_name);
// spawn /* spawn */
if ((err = spawn(sh_file, &al, TRUE, NULL, NULL, NULL, NULL)) != 0) if ((err= spawn(sh_file, &al, TRUE, NULL, NULL, NULL, NULL)) != 0)
{ {
die("Unable to run script."); die("Unable to run script.");
} }
// free args /* free args */
free_args(&al); free_args(&al);
} }
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment