summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorunknown <monty@narttu.mysql.fi>2003-04-22 22:41:59 +0300
committerunknown <monty@narttu.mysql.fi>2003-04-22 22:41:59 +0300
commitac02f54022f2a64ada230ef4a3f446b26b143275 (patch)
tree5d018897c694206dbaf1995bb7862e5d5ad8a93d /tests
parent43f1511a31a8e47682410ca5b02eb0dd4aba16d8 (diff)
downloadmariadb-git-ac02f54022f2a64ada230ef4a3f446b26b143275.tar.gz
Removed some not used files
Remove the 'fs' file systems as this is not maintained. Moved programs from client to tests tests/deadlock_test.c: Rename: div/deadlock_test.c -> tests/deadlock_test.c BitKeeper/deleted/.del-CorbaFS.idl~719ba9d93c206620: Delete: fs/CorbaFS.idl BitKeeper/deleted/.del-Makefile.am~95f21e278745904c: Delete: fs/Makefile.am BitKeeper/deleted/.del-RunServer.sh~34ea2653535fbb5c: Delete: fs/RunServer.sh BitKeeper/deleted/.del-database.c~af098622e818ce0d: Delete: fs/database.c BitKeeper/deleted/.del-dump.sql~68646092f0c5bc96: Delete: fs/dump.sql BitKeeper/deleted/.del-korbit-kernel-2.4.1-patch~742e5e67c1132b2e: Delete: fs/korbit-kernel-2.4.1-patch BitKeeper/deleted/.del-libmysqlfs.c~70cc07d61deedd16: Delete: fs/libmysqlfs.c BitKeeper/deleted/.del-libmysqlfs.h~7b60f308be50370e: Delete: fs/libmysqlfs.h BitKeeper/deleted/.del-my.cnf~bbd975fd6377e704: Delete: fs/my.cnf BitKeeper/deleted/.del-mysqlcorbafs.c~fc58c116eeea996a: Delete: fs/mysqlcorbafs.c BitKeeper/deleted/.del-mysqlcorbafs.h~414821d6836e655a: Delete: fs/mysqlcorbafs.h BitKeeper/deleted/.del-mysqlcorbafs_test.c~8bb3afa230542e05: Delete: fs/mysqlcorbafs_test.c BitKeeper/deleted/.del-README~b9f437fbd6dce7a5: Delete: fs/README BitKeeper/deleted/.del-mysqlfsck~247a2d2b9729b95e: Delete: fs/mysqlfsck tests/insert_test.c: Rename: client/insert_test.c -> tests/insert_test.c tests/list_test.c: Rename: client/list_test.c -> tests/list_test.c tests/select_test.c: Rename: client/select_test.c -> tests/select_test.c BitKeeper/deleted/.del-thimble.cc~3fa3754a4c639242: Delete: client/thimble.cc tests/thread_test.c: Rename: client/thread_test.c -> tests/thread_test.c tests/connect_test.c: Rename: client/connect_test.c -> tests/connect_test.c tests/showdb_test.c: Rename: client/showdb_test.c -> tests/showdb_test.c tests/ssl_test.c: Rename: client/ssl_test.c -> tests/ssl_test.c BitKeeper/deleted/.del-mysql_install.c~8c089740d79a92: Delete: extra/mysql_install.c BitKeeper/deleted/.del-cache_manager.cc~c506b365b140d30c: Delete: sql/cache_manager.cc BitKeeper/deleted/.del-cache_manager.h~adb8639e510c6f6e: Delete: sql/cache_manager.h client/Makefile.am: Move insert_test, select_test and thread_test under 'tests' extra/Makefile.am: Remove not used program mysql_install sql/item_strfunc.cc: Simple optimization sql/item_sum.cc: Simple code cleanup. tests/Makefile.am: Added test programs
Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile.am7
-rw-r--r--tests/connect_test.c65
-rw-r--r--tests/deadlock_test.c238
-rw-r--r--tests/insert_test.c59
-rw-r--r--tests/list_test.c70
-rw-r--r--tests/select_test.c73
-rw-r--r--tests/showdb_test.c66
-rw-r--r--tests/ssl_test.c81
-rw-r--r--tests/thread_test.c251
9 files changed, 910 insertions, 0 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 5dc6871bd43..1c9a3a81edf 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -26,6 +26,8 @@ EXTRA_DIST = auto_increment.res auto_increment.tst \
pmail.pl mail_to_db.pl table_types.pl \
udf_test udf_test.res myisam-big-rows.tst
+noinst_PROGRAMS = insert_test select_test thread_test
+
#
# C Test for 4.1 protocol
#
@@ -36,6 +38,11 @@ noinst_PROGRAMS = client_test
client_test_LDADD= $(LDADD) $(CXXLDFLAGS)
client_test_SOURCES= client_test.c
client_test_DEPENDENCIES= $(LIBRARIES) $(pkglib_LTLIBRARIES)
+insert_test_DEPENDENCIES= $(LIBRARIES) $(pkglib_LTLIBRARIES)
+select_test_DEPENDENCIES= $(LIBRARIES) $(pkglib_LTLIBRARIES)
+
+thread_test.o: thread_test.c
+ $(COMPILE) -c @MT_INCLUDES@ $(INCLUDES) $<
# Don't update the files from bitkeeper
%::SCCS/s.%
diff --git a/tests/connect_test.c b/tests/connect_test.c
new file mode 100644
index 00000000000..fd81ad635ad
--- /dev/null
+++ b/tests/connect_test.c
@@ -0,0 +1,65 @@
+/* Copyright (C) 2000 MySQL AB
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "mysql.h"
+
+static void change_user(MYSQL *sock,const char *user, const char *password,
+ const char *db,my_bool warning)
+{
+ if (mysql_change_user(sock,user,password,db) != warning)
+ {
+ fprintf(stderr,"Couldn't change user to: user: '%s', password: '%s', db: '%s': Error: %s\n",
+ user, password ? password : "", db ? db : "",
+ mysql_error(sock));
+ }
+}
+
+
+int main(int argc, char **argv)
+{
+ MYSQL *sock;
+
+ if (!(sock=mysql_init(0)))
+ {
+ fprintf(stderr,"Couldn't initialize mysql struct\n");
+ exit(1);
+ }
+ mysql_options(sock,MYSQL_READ_DEFAULT_GROUP,"connect");
+ if (!mysql_real_connect(sock,NULL,NULL,NULL,NULL,0,NULL,0))
+ {
+ fprintf(stderr,"Couldn't connect to engine!\n%s\n",mysql_error(sock));
+ perror("");
+ exit(1);
+ }
+
+ if (mysql_select_db(sock,"test"))
+ {
+ fprintf(stderr,"Couldn't select database test: Error: %s\n",
+ mysql_error(sock));
+ }
+
+ change_user(sock,"test_user","test_user","test",0);
+ change_user(sock,"test",NULL,"test",0);
+ change_user(sock,"test_user",NULL,"test",1);
+ change_user(sock,"test_user",NULL,NULL,1);
+ change_user(sock,"test_user","test_user","mysql",1);
+
+ mysql_close(sock);
+ exit(0);
+ return 0;
+}
diff --git a/tests/deadlock_test.c b/tests/deadlock_test.c
new file mode 100644
index 00000000000..65a0df5c215
--- /dev/null
+++ b/tests/deadlock_test.c
@@ -0,0 +1,238 @@
+/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+#include <mysql.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+typedef unsigned char uchar;
+static void die(char* fmt, ...);
+static void safe_query(MYSQL* mysql, char* query, int read_ok);
+static void run_query_batch(int* order, int num_queries);
+static void permute(int *order, int num_queries);
+static void permute_aux(int *order, int num_queries, int* fixed);
+static void dump_result(MYSQL* mysql, char* query);
+
+int count = 0;
+
+
+struct query
+{
+ MYSQL* mysql;
+ char* query;
+ int read_ok;
+ int pri;
+ int dump_result;
+};
+
+MYSQL lock, sel, del_ins;
+
+struct query queries[] =
+{
+ {&del_ins, "insert delayed into foo values(1)", 1, 0, 0},
+ {&del_ins, "insert delayed into foo values(1)", 1, 0, 0},
+ {&lock, "lock tables foo write", 1, 1, 0},
+ {&lock, "unlock tables", 1,2, 0},
+ {&sel, "select * from foo", 0,0, 0},
+ {&del_ins, "insert into foo values(4)", 0,3, 0},
+ {0,0,0}
+};
+
+static void die(char* fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+ fprintf(stderr, "ERROR: ");
+ vfprintf(stderr, fmt, args);
+ fprintf(stderr, "\n");
+ va_end(args);
+ exit(1);
+}
+
+static void permute(int *order, int num_queries)
+{
+ int *fixed;
+ if(num_queries < 2) return;
+ if(!(fixed = (int*)malloc(num_queries * sizeof(int))))
+ die("malloc() failed");
+
+ memset(fixed, 0, num_queries * sizeof(int));
+ permute_aux(order, num_queries, fixed);
+
+ free(fixed);
+}
+
+static order_ok(int *order, int num_queries)
+{
+ int i,j, pri_i, pri_j;
+ for(i = 0; i < num_queries; i++)
+ {
+ if((pri_i = queries[order[i]].pri))
+ for(j = i + 1; j < num_queries; j++)
+ {
+ pri_j = queries[order[j]].pri;
+ if(pri_j && pri_i > pri_j)
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+static void permute_aux(int *order, int num_queries, int* fixed)
+{
+ int *p,*p1,j,i,tmp, num_free = 0;
+ p = fixed;
+ for(i = 0; i < num_queries; i++, p++)
+ {
+ if(!*p)
+ {
+ num_free++;
+ *p = 1;
+ for(j = 0, p1 = fixed ;
+ j < num_queries; j++,p1++)
+ {
+ if(!*p1)
+ {
+ tmp = order[i];
+ order[i] = order[j];
+ order[j] = tmp;
+ *p1 = 1;
+ permute_aux(order, num_queries, fixed);
+ tmp = order[i];
+ order[i] = order[j];
+ order[j] = tmp;
+ *p1 = 0;
+ }
+ }
+ *p = 0;
+ }
+ }
+
+ /*printf("num_free = %d\n", num_free); */
+
+ if(num_free <= 1)
+ {
+ count++;
+ if(order_ok(order, num_queries))
+ run_query_batch(order, num_queries);
+ }
+}
+
+static void run_query_batch(int* order, int num_queries)
+{
+ int i;
+ struct query* q;
+ int *save_order;
+ safe_query(&lock, "delete from foo", 1);
+ save_order = order;
+ for(i = 0; i < num_queries; i++,order++)
+ {
+ q = queries + *order;
+ printf("query='%s'\n", q->query);
+ safe_query(q->mysql, q->query, q->read_ok);
+ }
+ order = save_order;
+ for(i = 0; i < num_queries; i++,order++)
+ {
+ q = queries + *order;
+ if(q->dump_result)
+ dump_result(q->mysql, q->query);
+ }
+ printf("\n");
+
+}
+
+static void safe_net_read(NET* net, char* query)
+{
+ int len;
+ len = my_net_read(net);
+ if(len == packet_error || !len)
+ die("Error running query '%s'", query);
+ if(net->read_pos[0] == 255)
+ die("Error running query '%s'", query);
+}
+
+
+static void safe_query(MYSQL* mysql, char* query, int read_ok)
+{
+ int len;
+ NET* net = &mysql->net;
+ net_clear(net);
+ if(net_write_command(net,(uchar)COM_QUERY, query,strlen(query)))
+ die("Error running query '%s': %s", query, mysql_error(mysql));
+ if(read_ok)
+ {
+ safe_net_read(net, query);
+ }
+}
+
+static void dump_result(MYSQL* mysql, char* query)
+{
+ MYSQL_RES* res;
+ safe_net_read(&mysql->net, query);
+ res = mysql_store_result(mysql);
+ if(res)
+ mysql_free_result(res);
+}
+
+static int* init_order(int* num_queries)
+{
+ struct query* q;
+ int *order, *order_end, *p;
+ int n,i;
+
+ for(q = queries; q->mysql; q++)
+ ;
+
+ n = q - queries;
+ if(!(order = (int*) malloc(n * sizeof(int))))
+ die("malloc() failed");
+ order_end = order + n;
+ for(p = order,i = 0; p < order_end; p++,i++)
+ *p = i;
+ *num_queries = n;
+ return order;
+}
+
+int main()
+{
+ char* user = "root", *pass = "", *host = "localhost", *db = "test";
+ int *order, num_queries;
+ order = init_order(&num_queries);
+ if(!mysql_init(&lock) || !mysql_init(&sel) || !mysql_init(&del_ins))
+ die("error in mysql_init()");
+
+ mysql_options(&lock, MYSQL_READ_DEFAULT_GROUP, "mysql");
+ mysql_options(&sel, MYSQL_READ_DEFAULT_GROUP, "mysql");
+ mysql_options(&del_ins, MYSQL_READ_DEFAULT_GROUP, "mysql");
+
+ if(!mysql_real_connect(&lock, host, user, pass, db, 0,0,0 ) ||
+ !mysql_real_connect(&sel, host, user, pass, db, 0,0,0 ) ||
+ !mysql_real_connect(&del_ins, host, user, pass, db, 0,0,0 ))
+ die("Error in mysql_real_connect(): %s", mysql_error(&lock));
+
+ permute(order, num_queries);
+ printf("count = %d\n", count);
+
+ mysql_close(&lock);
+ mysql_close(&sel);
+ mysql_close(&del_ins);
+ free(order);
+}
diff --git a/tests/insert_test.c b/tests/insert_test.c
new file mode 100644
index 00000000000..052c12bfdf0
--- /dev/null
+++ b/tests/insert_test.c
@@ -0,0 +1,59 @@
+/* Copyright (C) 2000 MySQL AB
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "mysql.h"
+
+#define INSERT_QUERY "insert into test (name,num) values ('item %d', %d)"
+
+
+int main(int argc, char **argv)
+{
+ int count,num;
+ MYSQL *sock,mysql;
+ char qbuf[160];
+
+ if (argc != 3)
+ {
+ fprintf(stderr,"usage : insert_test <dbname> <Num>\n\n");
+ exit(1);
+ }
+
+ mysql_init(&mysql);
+ if (!(sock = mysql_real_connect(&mysql,NULL,NULL,NULL,argv[1],0,NULL,0)))
+ {
+ fprintf(stderr,"Couldn't connect to engine!\n%s\n",mysql_error(&mysql));
+ perror("");
+ exit(1);
+ }
+
+ num = atoi(argv[2]);
+ count = 0;
+ while (count < num)
+ {
+ sprintf(qbuf,INSERT_QUERY,count,count);
+ if(mysql_query(sock,qbuf))
+ {
+ fprintf(stderr,"Query failed (%s)\n",mysql_error(sock));
+ exit(1);
+ }
+ count++;
+ }
+ mysql_close(sock);
+ exit(0);
+ return 0;
+}
diff --git a/tests/list_test.c b/tests/list_test.c
new file mode 100644
index 00000000000..06bf16d2751
--- /dev/null
+++ b/tests/list_test.c
@@ -0,0 +1,70 @@
+/* Copyright (C) 2000 MySQL AB
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+#ifdef __WIN__
+#include <windows.h>
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#include "mysql.h"
+
+#define SELECT_QUERY "select name from test where num = %d"
+
+
+int main(int argc, char **argv)
+{
+ int count, num;
+ MYSQL mysql,*sock;
+ MYSQL_RES *res;
+ char qbuf[160];
+
+ if (argc != 2)
+ {
+ fprintf(stderr,"usage : select_test <dbname>\n\n");
+ exit(1);
+ }
+
+ if (!(sock = mysql_connect(&mysql,NULL,0,0)))
+ {
+ fprintf(stderr,"Couldn't connect to engine!\n%s\n\n",mysql_error(&mysql));
+ perror("");
+ exit(1);
+ }
+
+ if (mysql_select_db(sock,argv[1]) < 0)
+ {
+ fprintf(stderr,"Couldn't select database %s!\n%s\n",argv[1],
+ mysql_error(sock));
+ exit(1);
+ }
+
+ if (!(res=mysql_list_dbs(sock,NULL)))
+ {
+ fprintf(stderr,"Couldn't list dbs!\n%s\n",mysql_error(sock));
+ exit(1);
+ }
+ mysql_free_result(res);
+ if (!(res=mysql_list_tables(sock,NULL)))
+ {
+ fprintf(stderr,"Couldn't list tables!\n%s\n",mysql_error(sock));
+ exit(1);
+ }
+ mysql_free_result(res);
+
+ mysql_close(sock);
+ exit(0);
+ return 0;
+}
diff --git a/tests/select_test.c b/tests/select_test.c
new file mode 100644
index 00000000000..ee2a9192865
--- /dev/null
+++ b/tests/select_test.c
@@ -0,0 +1,73 @@
+/* Copyright (C) 2000 MySQL AB
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+#if defined(_WIN32) || defined(_WIN64)
+#include <windows.h>
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#include "mysql.h"
+
+#define SELECT_QUERY "select name from test where num = %d"
+
+
+int main(int argc, char **argv)
+{
+ int count, num;
+ MYSQL mysql,*sock;
+ MYSQL_RES *res;
+ char qbuf[160];
+
+ if (argc != 3)
+ {
+ fprintf(stderr,"usage : select_test <dbname> <num>\n\n");
+ exit(1);
+ }
+
+ mysql_init(&mysql);
+ if (!(sock = mysql_real_connect(&mysql,NULL,0,0,argv[1],0,NULL,0)))
+ {
+ fprintf(stderr,"Couldn't connect to engine!\n%s\n\n",mysql_error(&mysql));
+ perror("");
+ exit(1);
+ }
+
+ count = 0;
+ num = atoi(argv[2]);
+ while (count < num)
+ {
+ sprintf(qbuf,SELECT_QUERY,count);
+ if(mysql_query(sock,qbuf))
+ {
+ fprintf(stderr,"Query failed (%s)\n",mysql_error(sock));
+ exit(1);
+ }
+ if (!(res=mysql_store_result(sock)))
+ {
+ fprintf(stderr,"Couldn't get result from %s\n",
+ mysql_error(sock));
+ exit(1);
+ }
+#ifdef TEST
+ printf("number of fields: %d\n",mysql_num_fields(res));
+#endif
+ mysql_free_result(res);
+ count++;
+ }
+ mysql_close(sock);
+ exit(0);
+ return 0; /* Keep some compilers happy */
+}
diff --git a/tests/showdb_test.c b/tests/showdb_test.c
new file mode 100644
index 00000000000..df2b3037c00
--- /dev/null
+++ b/tests/showdb_test.c
@@ -0,0 +1,66 @@
+/* Copyright (C) 2000 MySQL AB
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+
+#ifdef __WIN__
+#include <windows.h>
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#include "mysql.h"
+
+#define SELECT_QUERY "select name from test where num = %d"
+
+
+int main(int argc, char **argv)
+{
+ int count, num;
+ MYSQL mysql,*sock;
+ MYSQL_RES *res;
+ char qbuf[160];
+
+ if (argc != 3)
+ {
+ fprintf(stderr,"usage : select_test <dbname> <num>\n\n");
+ exit(1);
+ }
+
+ mysql_init(&mysql);
+ if (!(sock = mysql_real_connect(&mysql,NULL,0,0,argv[1],0,NULL,0)))
+ {
+ fprintf(stderr,"Couldn't connect to engine!\n%s\n\n",mysql_error(&mysql));
+ perror("");
+ exit(1);
+ }
+
+ count = 0;
+ num = atoi(argv[2]);
+ while (count < num)
+ {
+ sprintf(qbuf,SELECT_QUERY,count);
+ if(!(res=mysql_list_dbs(sock,NULL)))
+ {
+ fprintf(stderr,"Query failed (%s)\n",mysql_error(sock));
+ exit(1);
+ }
+ printf("number of fields: %d\n",mysql_num_rows(res));
+ mysql_free_result(res);
+ count++;
+ }
+ mysql_close(sock);
+ exit(0);
+ return 0; /* Keep some compilers happy */
+}
diff --git a/tests/ssl_test.c b/tests/ssl_test.c
new file mode 100644
index 00000000000..279c1e95fdc
--- /dev/null
+++ b/tests/ssl_test.c
@@ -0,0 +1,81 @@
+/* Copyright (C) 2000 MySQL AB
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+
+#ifdef __WIN__
+#include <windows.h>
+#endif
+#include <stdio.h>
+#include <stdlib.h>
+#include "mysql.h"
+#include "config.h"
+#define SELECT_QUERY "select name from test where num = %d"
+
+
+int main(int argc, char **argv)
+{
+#ifdef HAVE_OPENSSL
+ int count, num;
+ MYSQL mysql,*sock;
+ MYSQL_RES *res;
+ char qbuf[160];
+
+ if (argc != 3)
+ {
+ fprintf(stderr,"usage : ssl_test <dbname> <num>\n\n");
+ exit(1);
+ }
+
+ mysql_init(&mysql);
+#ifdef HAVE_OPENSSL
+ mysql_ssl_set(&mysql,"../SSL/MySQL-client-key.pem","../SSL/MySQL-client-cert.pem","../SSL/MySQL-ca-cert.pem","../SSL/");
+#endif
+ if (!(sock = mysql_real_connect(&mysql,"127.0.0.1",0,0,argv[1],3306,NULL,0)))
+ {
+ fprintf(stderr,"Couldn't connect to engine!\n%s\n\n",mysql_error(&mysql));
+ perror("");
+ exit(1);
+ }
+ printf("Cipher:%s\n",mysql_ssl_cipher(&mysql));
+ count = 0;
+ num = atoi(argv[2]);
+ while (count < num)
+ {
+ sprintf(qbuf,SELECT_QUERY,count);
+ if(mysql_query(sock,qbuf))
+ {
+ fprintf(stderr,"Query failed (%s)\n",mysql_error(sock));
+ exit(1);
+ }
+ if (!(res=mysql_store_result(sock)))
+ {
+ fprintf(stderr,"Couldn't get result from query failed\n",
+ mysql_error(sock));
+ exit(1);
+ }
+#ifdef TEST
+ printf("number of fields: %d\n",mysql_num_fields(res));
+#endif
+ mysql_free_result(res);
+ count++;
+ }
+ mysql_close(sock);
+#else /* HAVE_OPENSSL */
+ printf("ssl_test: SSL not configured.\n");
+#endif /* HAVE_OPENSSL */
+ exit(0);
+ return 0; /* Keep some compilers happy */
+}
diff --git a/tests/thread_test.c b/tests/thread_test.c
new file mode 100644
index 00000000000..2900ab712e2
--- /dev/null
+++ b/tests/thread_test.c
@@ -0,0 +1,251 @@
+/* Copyright (C) 2000 MySQL AB
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
+#include <my_global.h>
+
+#ifndef THREAD
+
+int main(int argc __attribute__((unused)), char **argv __attribute__((unused)))
+{
+ printf("This test must be compiled with multithread support to work\n");
+ exit(1);
+}
+#else
+
+#include <my_sys.h>
+#include <my_pthread.h>
+#include "mysql.h"
+#include <my_getopt.h>
+
+static my_bool version, verbose, tty_password= 0;
+static uint thread_count,number_of_tests=1000,number_of_threads=2;
+static pthread_cond_t COND_thread_count;
+static pthread_mutex_t LOCK_thread_count;
+
+static char *database,*host,*user,*password,*unix_socket,*query;
+uint tcp_port;
+
+#ifndef __WIN__
+void *test_thread(void *arg)
+#else
+unsigned __stdcall test_thread(void *arg)
+#endif
+{
+ MYSQL *mysql;
+ uint count;
+
+ mysql=mysql_init(NULL);
+ if (!mysql_real_connect(mysql,host,user,password,database,tcp_port,
+ unix_socket,0))
+ {
+ fprintf(stderr,"Couldn't connect to engine!\n%s\n\n",mysql_error(mysql));
+ perror("");
+ goto end;
+ }
+ if (verbose) { putchar('*'); fflush(stdout); }
+ for (count=0 ; count < number_of_tests ; count++)
+ {
+ MYSQL_RES *res;
+ if (mysql_query(mysql,query))
+ {
+ fprintf(stderr,"Query failed (%s)\n",mysql_error(mysql));
+ goto end;
+ }
+ if (!(res=mysql_store_result(mysql)))
+ {
+ fprintf(stderr,"Couldn't get result from %s\n", mysql_error(mysql));
+ goto end;
+ }
+ mysql_free_result(res);
+ if (verbose) { putchar('.'); fflush(stdout); }
+ }
+end:
+ if (verbose) { putchar('#'); fflush(stdout); }
+ mysql_close(mysql);
+ pthread_mutex_lock(&LOCK_thread_count);
+ thread_count--;
+ VOID(pthread_cond_signal(&COND_thread_count)); /* Tell main we are ready */
+ pthread_mutex_unlock(&LOCK_thread_count);
+ pthread_exit(0);
+ return 0;
+}
+
+
+static struct my_option my_long_options[] =
+{
+ {"help", '?', "Display this help and exit", 0, 0, 0, GET_NO_ARG, NO_ARG, 0,
+ 0, 0, 0, 0, 0},
+ {"database", 'D', "Database to use", (gptr*) &database, (gptr*) &database,
+ 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
+ {"host", 'h', "Connect to host", (gptr*) &host, (gptr*) &host, 0, GET_STR,
+ REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
+ {"password", 'p',
+ "Password to use when connecting to server. If password is not given it's asked from the tty.",
+ 0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
+ {"user", 'u', "User for login if not current user", (gptr*) &user,
+ (gptr*) &user, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
+ {"version", 'V', "Output version information and exit",
+ 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
+ {"verbose", 'v', "Write some progress indicators", (gptr*) &verbose,
+ (gptr*) &verbose, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
+ {"query", 'Q', "Query to execute in each threads", (gptr*) &query,
+ (gptr*) &query, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
+ {"port", 'P', "Port number to use for connection", (gptr*) &tcp_port,
+ (gptr*) &tcp_port, 0, GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
+ {"socket", 'S', "Socket file to use for connection", (gptr*) &unix_socket,
+ (gptr*) &unix_socket, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
+ {"test-count", 'c', "Run test count times (default %d)",
+ (gptr*) &number_of_tests, (gptr*) &number_of_tests, 0, GET_UINT,
+ REQUIRED_ARG, 1000, 0, 0, 0, 0, 0},
+ {"thread-count", 't', "Number of threads to start",
+ (gptr*) &number_of_threads, (gptr*) &number_of_threads, 0, GET_UINT,
+ REQUIRED_ARG, 2, 0, 0, 0, 0, 0},
+ { 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
+};
+
+
+static const char *load_default_groups[]= { "client",0 };
+
+static void usage()
+{
+ printf("Connection to a mysql server with multiple threads\n");
+ if (version)
+ return;
+ puts("This software comes with ABSOLUTELY NO WARRANTY.\n");
+ printf("Usage: %s [OPTIONS] [database]\n", my_progname);
+
+ my_print_help(my_long_options);
+ print_defaults("my",load_default_groups);
+ my_print_variables(my_long_options);
+ printf("\nExample usage:\n\n\
+%s -Q 'select * from mysql.user' -c %d -t %d\n",
+ my_progname, number_of_tests, number_of_threads);
+}
+
+
+static my_bool
+get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
+ char *argument)
+{
+ switch (optid) {
+ case 'p':
+ if (argument)
+ {
+ my_free(password, MYF(MY_ALLOW_ZERO_PTR));
+ password= my_strdup(argument, MYF(MY_FAE));
+ while (*argument) *argument++= 'x'; /* Destroy argument */
+ }
+ else
+ tty_password= 1;
+ break;
+ case 'V':
+ version= 1;
+ usage();
+ exit(0);
+ break;
+ case '?':
+ case 'I': /* Info */
+ usage();
+ exit(1);
+ break;
+ }
+ return 0;
+}
+
+
+static void get_options(int argc, char **argv)
+{
+ int ho_error;
+
+ load_defaults("my",load_default_groups,&argc,&argv);
+
+ if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option)))
+ exit(ho_error);
+
+ free_defaults(argv);
+ if (tty_password)
+ password=get_tty_password(NullS);
+ return;
+}
+
+
+int main(int argc, char **argv)
+{
+ pthread_t tid;
+ pthread_attr_t thr_attr;
+ int i,error;
+ MY_INIT(argv[0]);
+ get_options(argc,argv);
+
+ if ((error=pthread_cond_init(&COND_thread_count,NULL)))
+ {
+ fprintf(stderr,"Got error: %d from pthread_cond_init (errno: %d)",
+ error,errno);
+ exit(1);
+ }
+ pthread_mutex_init(&LOCK_thread_count,MY_MUTEX_INIT_FAST);
+
+ if ((error=pthread_attr_init(&thr_attr)))
+ {
+ fprintf(stderr,"Got error: %d from pthread_attr_init (errno: %d)",
+ error,errno);
+ exit(1);
+ }
+ if ((error=pthread_attr_setdetachstate(&thr_attr,PTHREAD_CREATE_DETACHED)))
+ {
+ fprintf(stderr,
+ "Got error: %d from pthread_attr_setdetachstate (errno: %d)",
+ error,errno);
+ exit(1);
+ }
+
+ printf("Init ok. Creating %d threads\n",number_of_threads);
+ for (i=1 ; i <= number_of_threads ; i++)
+ {
+ int *param= &i;
+
+ if (verbose) { putchar('+'); fflush(stdout); }
+ pthread_mutex_lock(&LOCK_thread_count);
+ if ((error=pthread_create(&tid,&thr_attr,test_thread,(void*) param)))
+ {
+ fprintf(stderr,"\nGot error: %d from pthread_create (errno: %d) when creating thread: %i\n",
+ error,errno,i);
+ pthread_mutex_unlock(&LOCK_thread_count);
+ exit(1);
+ }
+ thread_count++;
+ pthread_mutex_unlock(&LOCK_thread_count);
+ }
+
+ printf("Waiting for threads to finnish\n");
+ error=pthread_mutex_lock(&LOCK_thread_count);
+ while (thread_count)
+ {
+ if ((error=pthread_cond_wait(&COND_thread_count,&LOCK_thread_count)))
+ fprintf(stderr,"\nGot error: %d from pthread_cond_wait\n",error);
+ }
+ pthread_mutex_unlock(&LOCK_thread_count);
+ pthread_attr_destroy(&thr_attr);
+ printf("\nend\n");
+
+ my_end(0);
+ return 0;
+
+ exit(0);
+ return 0; /* Keep some compilers happy */
+}
+
+#endif /* THREAD */