summaryrefslogtreecommitdiff
path: root/client/mysqltest.c
diff options
context:
space:
mode:
authorunknown <msvensson@neptunus.(none)>2006-08-01 09:33:00 +0200
committerunknown <msvensson@neptunus.(none)>2006-08-01 09:33:00 +0200
commit63076970fc15741669227b0bfe478d0db9baeb24 (patch)
tree84ff1518ead8f7d3d8e41c28e1ad91fcee7af81e /client/mysqltest.c
parent87fd7b859625d901a3e48d01424fa1d0cb809a75 (diff)
parentb55c18a1fbdcdf7bb43b759714f0aed78214d49f (diff)
downloadmariadb-git-63076970fc15741669227b0bfe478d0db9baeb24.tar.gz
Merge neptunus.(none):/home/msvensson/mysql/my51-m-bug19535
into neptunus.(none):/home/msvensson/mysql/mysql-5.1-new-maint client/mysqltest.c: Auto merged mysql-test/mysql-test-run.pl: Auto merged mysql-test/lib/mtr_process.pl: Auto merged
Diffstat (limited to 'client/mysqltest.c')
-rw-r--r--client/mysqltest.c214
1 files changed, 73 insertions, 141 deletions
diff --git a/client/mysqltest.c b/client/mysqltest.c
index 144f69352d9..aa12287f260 100644
--- a/client/mysqltest.c
+++ b/client/mysqltest.c
@@ -82,9 +82,6 @@
#define MAX_EXPECTED_ERRORS 10
#define QUERY_SEND 1
#define QUERY_REAP 2
-#ifndef MYSQL_MANAGER_PORT
-#define MYSQL_MANAGER_PORT 23546
-#endif
#define MAX_SERVER_ARGS 64
@@ -96,11 +93,10 @@
#define RESULT_CONTENT_MISMATCH 1
#define RESULT_LENGTH_MISMATCH 2
-enum {OPT_MANAGER_USER=256,OPT_MANAGER_HOST,OPT_MANAGER_PASSWD,
- OPT_MANAGER_PORT,OPT_MANAGER_WAIT_TIMEOUT, OPT_SKIP_SAFEMALLOC,
- OPT_SSL_SSL, OPT_SSL_KEY, OPT_SSL_CERT, OPT_SSL_CA, OPT_SSL_CAPATH,
- OPT_SSL_CIPHER,OPT_PS_PROTOCOL,OPT_SP_PROTOCOL,OPT_CURSOR_PROTOCOL,
- OPT_VIEW_PROTOCOL, OPT_SSL_VERIFY_SERVER_CERT, OPT_MAX_CONNECT_RETRIES,
+enum {OPT_SKIP_SAFEMALLOC=256, OPT_SSL_SSL, OPT_SSL_KEY, OPT_SSL_CERT,
+ OPT_SSL_CA, OPT_SSL_CAPATH, OPT_SSL_CIPHER, OPT_PS_PROTOCOL,
+ OPT_SP_PROTOCOL, OPT_CURSOR_PROTOCOL, OPT_VIEW_PROTOCOL,
+ OPT_SSL_VERIFY_SERVER_CERT, OPT_MAX_CONNECT_RETRIES,
OPT_MARK_PROGRESS};
/* ************************************************************************ */
@@ -160,11 +156,6 @@ static my_bool sp_protocol= 0, sp_protocol_enabled= 0;
static my_bool view_protocol= 0, view_protocol_enabled= 0;
static my_bool cursor_protocol= 0, cursor_protocol_enabled= 0;
static int parsing_disabled= 0;
-const char *manager_user="root",*manager_host=0;
-char *manager_pass=0;
-int manager_port=MYSQL_MANAGER_PORT;
-int manager_wait_timeout=3;
-MYSQL_MANAGER* manager=0;
static char **default_argv;
static const char *load_default_groups[]= { "mysqltest","client",0 };
@@ -335,7 +326,7 @@ Q_RPL_PROBE, Q_ENABLE_RPL_PARSE,
Q_DISABLE_RPL_PARSE, Q_EVAL_RESULT,
Q_ENABLE_QUERY_LOG, Q_DISABLE_QUERY_LOG,
Q_ENABLE_RESULT_LOG, Q_DISABLE_RESULT_LOG,
-Q_SERVER_START, Q_SERVER_STOP,Q_REQUIRE_MANAGER,
+Q_SERVER_START, Q_SERVER_STOP,
Q_WAIT_FOR_SLAVE_TO_STOP,
Q_ENABLE_WARNINGS, Q_DISABLE_WARNINGS,
Q_ENABLE_PS_WARNINGS, Q_DISABLE_PS_WARNINGS,
@@ -347,11 +338,10 @@ Q_DISPLAY_VERTICAL_RESULTS, Q_DISPLAY_HORIZONTAL_RESULTS,
Q_QUERY_VERTICAL, Q_QUERY_HORIZONTAL,
Q_START_TIMER, Q_END_TIMER,
Q_CHARACTER_SET, Q_DISABLE_PS_PROTOCOL, Q_ENABLE_PS_PROTOCOL,
-Q_EXIT,
Q_DISABLE_RECONNECT, Q_ENABLE_RECONNECT,
Q_IF,
Q_DISABLE_PARSING, Q_ENABLE_PARSING,
-Q_REPLACE_REGEX,
+Q_REPLACE_REGEX, Q_DIE,
Q_UNKNOWN, /* Unknown command. */
Q_COMMENT, /* Comments, ignored. */
@@ -411,7 +401,6 @@ const char *command_names[]=
"disable_result_log",
"server_start",
"server_stop",
- "require_manager",
"wait_for_slave_to_stop",
"enable_warnings",
"disable_warnings",
@@ -434,13 +423,13 @@ const char *command_names[]=
"character_set",
"disable_ps_protocol",
"enable_ps_protocol",
- "exit",
"disable_reconnect",
"enable_reconnect",
"if",
"disable_parsing",
"enable_parsing",
"replace_regex",
+ "die",
0
};
@@ -610,10 +599,7 @@ static void free_used_memory()
{
uint i;
DBUG_ENTER("free_used_memory");
-#ifndef EMBEDDED_LIBRARY
- if (manager)
- mysql_manager_close(manager);
-#endif
+
close_cons();
close_files();
hash_free(&var_hash);
@@ -682,17 +668,43 @@ static void die(const char *fmt, ...)
exit(1);
}
-/* Note that we will get some memory leaks when calling this! */
-static void abort_not_supported_test(const char *fname)
+static void abort_not_supported_test(const char *fmt, ...)
{
+ va_list args;
+ test_file* err_file= cur_file;
DBUG_ENTER("abort_not_supported_test");
+
+ /* Print include filestack */
fprintf(stderr, "The test '%s' is not supported by this installation\n",
- fname);
- if (!silent)
- printf("skipped\n");
+ file_stack->file_name);
+ fprintf(stderr, "Detected in file %s at line %d\n",
+ err_file->file_name, err_file->lineno);
+ while (err_file != file_stack)
+ {
+ err_file--;
+ fprintf(stderr, "included from %s at line %d\n",
+ err_file->file_name, err_file->lineno);
+ }
+
+ /* Print error message */
+ va_start(args, fmt);
+ if (fmt)
+ {
+ fprintf(stderr, "reason: ");
+ vfprintf(stderr, fmt, args);
+ fprintf(stderr, "\n");
+ fflush(stderr);
+ }
+ va_end(args);
+
+ /* Clean up and exit */
free_used_memory();
my_end(MY_CHECK_ERROR);
+
+ if (!silent)
+ printf("skipped\n");
+
exit(62);
}
@@ -704,13 +716,13 @@ static void verbose_msg(const char *fmt, ...)
DBUG_VOID_RETURN;
va_start(args, fmt);
-
fprintf(stderr, "mysqltest: ");
if (start_lineno != 0)
fprintf(stderr, "At line %u: ", start_lineno);
vfprintf(stderr, fmt, args);
fprintf(stderr, "\n");
va_end(args);
+
DBUG_VOID_RETURN;
}
@@ -736,10 +748,10 @@ static int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname)
if (!test_if_hard_path(fname))
{
strxmov(eval_file, opt_basedir, fname, NullS);
- fn_format(eval_file, eval_file,"","",4);
+ fn_format(eval_file, eval_file, "", "", MY_UNPACK_FILENAME);
}
else
- fn_format(eval_file, fname,"","",4);
+ fn_format(eval_file, fname, "", "", MY_UNPACK_FILENAME);
if (!my_stat(eval_file, &stat_info, MYF(MY_WME)))
die(NullS);
@@ -780,8 +792,9 @@ static int dyn_string_cmp(DYNAMIC_STRING* ds, const char *fname)
err:
if (res && eval_result)
- str_to_file(fn_format(eval_file, fname, "", ".eval",2), res_ptr,
- res_len);
+ str_to_file(fn_format(eval_file, fname, "", ".eval",
+ MY_REPLACE_EXT),
+ res_ptr, res_len);
my_free((gptr) tmp, MYF(0));
my_close(fd, MYF(MY_WME));
@@ -811,7 +824,11 @@ static void check_result(DYNAMIC_STRING* ds, const char *fname,
DBUG_ENTER("check_result");
if (res && require_option)
- abort_not_supported_test(fname);
+ {
+ char reason[FN_REFLEN];
+ fn_format(reason, fname, "", "", MY_REPLACE_EXT | MY_REPLACE_DIR);
+ abort_not_supported_test("Test requires: '%s'", reason);
+ }
switch (res) {
case RESULT_OK:
break; /* ok */
@@ -956,7 +973,7 @@ int open_file(const char *name)
strxmov(buff, opt_basedir, name, NullS);
name=buff;
}
- fn_format(buff,name,"","",4);
+ fn_format(buff, name, "", "", MY_UNPACK_FILENAME);
if (cur_file == file_stack_end)
die("Source directives are nesting too deep");
@@ -1030,57 +1047,6 @@ int do_wait_for_slave_to_stop(struct st_query *q __attribute__((unused)))
return 0;
}
-int do_require_manager(struct st_query *query __attribute__((unused)) )
-{
- if (!manager)
- abort_not_supported_test("manager");
- return 0;
-}
-
-#ifndef EMBEDDED_LIBRARY
-static int do_server_op(struct st_query *q, const char *op)
-{
- char *p= q->first_argument;
- char com_buf[256], *com_p;
- if (!manager)
- {
- die("Manager is not initialized, manager commands are not possible");
- }
- com_p= strmov(com_buf,op);
- com_p= strmov(com_p,"_exec ");
- if (!*p)
- die("Missing server name in server_%s", op);
- while (*p && !my_isspace(charset_info, *p))
- *com_p++= *p++;
- *com_p++= ' ';
- com_p= int10_to_str(manager_wait_timeout, com_p, 10);
- *com_p++= '\n';
- *com_p= 0;
- if (mysql_manager_command(manager, com_buf, (int)(com_p-com_buf)))
- die("Error in command: %s(%d)", manager->last_error, manager->last_errno);
- while (!manager->eof)
- {
- if (mysql_manager_fetch_line(manager, com_buf, sizeof(com_buf)))
- die("Error fetching result line: %s(%d)", manager->last_error,
- manager->last_errno);
- }
-
- q->last_argument= p;
- return 0;
-}
-
-int do_server_start(struct st_query *q)
-{
- return do_server_op(q, "start");
-}
-
-int do_server_stop(struct st_query *q)
-{
- return do_server_op(q, "stop");
-}
-
-#endif
-
/*
Source and execute the given file
@@ -1919,7 +1885,7 @@ static void set_charset(struct st_query *q)
q->last_argument= p;
charset_info= get_charset_by_csname(charset_name,MY_CS_PRIMARY,MYF(MY_WME));
if (!charset_info)
- abort_not_supported_test(charset_name);
+ abort_not_supported_test("Test requires charset '%s'", charset_name);
}
static uint get_errcodes(match_err *to,struct st_query *q)
@@ -2473,19 +2439,6 @@ char* safe_get_param(char *str, char** arg, const char *msg)
DBUG_RETURN(str);
}
-#ifndef EMBEDDED_LIBRARY
-void init_manager()
-{
- if (!(manager=mysql_manager_init(0)))
- die("Failed in mysql_manager_init()");
- if (!mysql_manager_connect(manager,manager_host,manager_user,
- manager_pass,manager_port))
- die("Could not connect to MySQL manager: %s(%d)",manager->last_error,
- manager->last_errno);
-
-}
-#endif
-
/*
Connect to a server doing several retries if needed.
@@ -2770,7 +2723,7 @@ int do_connect(struct st_query *q)
}
#endif
if (con_sock && !free_con_sock && *con_sock && *con_sock != FN_LIBCHAR)
- con_sock=fn_format(buff, con_sock, TMPDIR, "",0);
+ con_sock=fn_format(buff, con_sock, TMPDIR, "", 0);
if (!con_db[0])
con_db= db;
/* Special database to allow one to connect without a database name */
@@ -3287,20 +3240,6 @@ static struct my_option my_long_options[] =
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"include", 'i', "Include SQL before each test case.", (gptr*) &opt_include,
(gptr*) &opt_include, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
- {"manager-host", OPT_MANAGER_HOST, "Undocumented: Used for debugging.",
- (gptr*) &manager_host, (gptr*) &manager_host, 0, GET_STR, REQUIRED_ARG,
- 0, 0, 0, 0, 0, 0},
- {"manager-password", OPT_MANAGER_PASSWD, "Undocumented: Used for debugging.",
- 0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
- {"manager-port", OPT_MANAGER_PORT, "Undocumented: Used for debugging.",
- (gptr*) &manager_port, (gptr*) &manager_port, 0, GET_INT, REQUIRED_ARG,
- MYSQL_MANAGER_PORT, 0, 0, 0, 0, 0},
- {"manager-user", OPT_MANAGER_USER, "Undocumented: Used for debugging.",
- (gptr*) &manager_user, (gptr*) &manager_user, 0, GET_STR, REQUIRED_ARG, 0,
- 0, 0, 0, 0, 0},
- {"manager-wait-timeout", OPT_MANAGER_WAIT_TIMEOUT,
- "Undocumented: Used for debugging.", (gptr*) &manager_wait_timeout,
- (gptr*) &manager_wait_timeout, 0, GET_INT, REQUIRED_ARG, 3, 0, 0, 0, 0, 0},
{"mark-progress", OPT_MARK_PROGRESS,
"Write linenumber and elapsed time to <testname>.progress ",
(gptr*) &opt_mark_progress, (gptr*) &opt_mark_progress, 0,
@@ -3397,11 +3336,6 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
case 'r':
record = 1;
break;
- case (int)OPT_MANAGER_PASSWD:
- my_free(manager_pass,MYF(MY_ALLOW_ZERO_PTR));
- manager_pass=my_strdup(argument, MYF(MY_FAE));
- while (*argument) *argument++= 'x'; /* Destroy argument */
- break;
case 'x':
{
char buff[FN_REFLEN];
@@ -3410,7 +3344,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
strxmov(buff, opt_basedir, argument, NullS);
argument= buff;
}
- fn_format(buff, argument, "", "", 4);
+ fn_format(buff, argument, "", "", MY_UNPACK_FILENAME);
DBUG_ASSERT(cur_file == file_stack && cur_file->file == 0);
if (!(cur_file->file=
my_fopen(buff, O_RDONLY | FILE_BINARY, MYF(0))))
@@ -3427,7 +3361,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
strxmov(buff, opt_basedir, argument, NullS);
argument= buff;
}
- fn_format(buff, argument, "", "", 4);
+ fn_format(buff, argument, "", "", MY_UNPACK_FILENAME);
timer_file= buff;
unlink(timer_file); /* Ignore error, may not exist */
break;
@@ -3521,7 +3455,7 @@ static void str_to_file(const char *fname, char *str, int size)
strxmov(buff, opt_basedir, fname, NullS);
fname= buff;
}
- fn_format(buff,fname,"","",4);
+ fn_format(buff, fname, "", "", MY_UNPACK_FILENAME);
if ((fd= my_open(buff, O_WRONLY | O_CREAT | O_TRUNC,
MYF(MY_WME | MY_FFNF))) < 0)
@@ -3535,19 +3469,24 @@ static void str_to_file(const char *fname, char *str, int size)
void dump_result_to_reject_file(const char *record_file, char *buf, int size)
{
char reject_file[FN_REFLEN];
- str_to_file(fn_format(reject_file, record_file,"",".reject",2), buf, size);
+ str_to_file(fn_format(reject_file, record_file, "", ".reject",
+ MY_REPLACE_EXT),
+ buf, size);
}
void dump_result_to_log_file(const char *record_file, char *buf, int size)
{
char log_file[FN_REFLEN];
- str_to_file(fn_format(log_file, record_file,"",".log",2), buf, size);
+ str_to_file(fn_format(log_file, record_file, "", ".log",
+ MY_REPLACE_EXT),
+ buf, size);
}
void dump_progress(const char *record_file)
{
char log_file[FN_REFLEN];
- str_to_file(fn_format(log_file, record_file,"",".progress",2),
+ str_to_file(fn_format(log_file, record_file, "", ".progress",
+ MY_REPLACE_EXT),
ds_progress.str, ds_progress.length);
}
@@ -4358,7 +4297,9 @@ static void handle_error(const char *query, struct st_query *q,
if (err_errno == CR_SERVER_LOST ||
err_errno == CR_SERVER_GONE_ERROR)
die("require query '%s' failed: %d: %s", query, err_errno, err_error);
- abort_not_supported_test("failed_query");
+
+ /* Abort the run of this test, pass the failed query as reason */
+ abort_not_supported_test("Query '%s' failed, required functionality not supported", query);
}
if (q->abort_on_error)
@@ -5139,7 +5080,7 @@ static void init_var_hash(MYSQL *mysql)
test run completes
*/
-static void mark_progress(struct st_query* q, int line)
+static void mark_progress(struct st_query* q __attribute__((unused)), int line)
{
char buf[32], *end;
ulonglong timer= timer_now();
@@ -5174,7 +5115,7 @@ static void mark_progress(struct st_query* q, int line)
int main(int argc, char **argv)
{
struct st_query *q;
- my_bool require_file=0, q_send_flag=0, abort_flag= 0,
+ my_bool require_file=0, q_send_flag=0,
query_executed= 0;
char save_file[FN_REFLEN];
MY_STAT res_info;
@@ -5224,10 +5165,6 @@ int main(int argc, char **argv)
cur_file->file_name= my_strdup("<stdin>", MYF(MY_WME));
cur_file->lineno= 1;
}
-#ifndef EMBEDDED_LIBRARY
- if (manager_host)
- init_manager();
-#endif
init_re();
ps_protocol_enabled= ps_protocol;
sp_protocol_enabled= sp_protocol;
@@ -5281,7 +5218,7 @@ int main(int argc, char **argv)
open_file(opt_include);
}
- while (!abort_flag && !read_query(&q))
+ while (!read_query(&q))
{
int current_line_inc = 1, processed = 0;
if (q->type == Q_UNKNOWN || q->type == Q_COMMENT_WITH_COMMAND)
@@ -5319,11 +5256,6 @@ int main(int argc, char **argv)
case Q_SLEEP: do_sleep(q, 0); break;
case Q_REAL_SLEEP: do_sleep(q, 1); break;
case Q_WAIT_FOR_SLAVE_TO_STOP: do_wait_for_slave_to_stop(q); break;
- case Q_REQUIRE_MANAGER: do_require_manager(q); break;
-#ifndef EMBEDDED_LIBRARY
- case Q_SERVER_START: do_server_start(q); break;
- case Q_SERVER_STOP: do_server_stop(q); break;
-#endif
case Q_INC: do_modify_var(q, DO_INC); break;
case Q_DEC: do_modify_var(q, DO_DEC); break;
case Q_ECHO: do_echo(q); query_executed= 1; break;
@@ -5501,8 +5433,8 @@ int main(int argc, char **argv)
parsing_disabled--;
break;
- case Q_EXIT:
- abort_flag= 1;
+ case Q_DIE:
+ die("%s", q->first_argument);
break;
default:
@@ -5622,7 +5554,7 @@ static int read_server_arguments(const char *name)
strxmov(buff, opt_basedir, name, NullS);
name=buff;
}
- fn_format(buff,name,"","",4);
+ fn_format(buff, name, "", "", MY_UNPACK_FILENAME);
if (!embedded_server_arg_count)
{