diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Makefile.am | 2 | ||||
-rwxr-xr-x | tests/big_record.pl | 57 | ||||
-rwxr-xr-x | tests/fork2_test.pl | 2 | ||||
-rwxr-xr-x | tests/fork_big.pl | 2 | ||||
-rw-r--r-- | tests/function.res | 6 | ||||
-rw-r--r-- | tests/function.tst | 2 | ||||
-rw-r--r-- | tests/grant.pl | 71 | ||||
-rw-r--r-- | tests/grant.res | 133 | ||||
-rwxr-xr-x | tests/insert_and_repair.pl | 2 | ||||
-rwxr-xr-x | tests/mail_to_db.pl | 110 | ||||
-rw-r--r-- | tests/myisam-big-rows.tst | 72 | ||||
-rwxr-xr-x | tests/rename_test.pl | 2 | ||||
-rwxr-xr-x | tests/test_delayed_insert.pl | 2 | ||||
-rwxr-xr-x | tests/truncate.pl | 125 |
14 files changed, 491 insertions, 97 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am index cdb623fa2a0..356da61ed57 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -24,7 +24,7 @@ EXTRA_DIST = auto_increment.res auto_increment.tst \ insert_and_repair.pl \ grant.pl grant.res test_delayed_insert.pl \ pmail.pl mail_to_db.pl table_types.pl \ - udf_test udf_test.res + udf_test udf_test.res myisam-big-rows.tst # Don't update the files from bitkeeper %::SCCS/s.% diff --git a/tests/big_record.pl b/tests/big_record.pl index 52d3dca5f7b..08547b50823 100755 --- a/tests/big_record.pl +++ b/tests/big_record.pl @@ -1,58 +1,69 @@ #!/usr/bin/perl -# This is a test with stores big records in a blob +# This is a test with stores big records in a blob. # Note that for the default test the mysql server should have been -# started with at least 'mysqld -O max_allowed_packet=200k' - -$host= shift || ""; -$test_db="test"; -$opt_user=$opt_password=""; +# started with at least 'mysqld -O max_allowed_packet=30M' and you should have +# at least 256M memory in your computer. use DBI; -$|= 1; # Autoflush +use Getopt::Long; + +$opt_host=""; +$opt_user=$opt_password=""; +$opt_db="test"; +$opt_rows=200; # Test of blobs up to ($rows-1)*100000+1 bytes +$opt_compress=0; +$opt_table="test_big_record"; -$table="test_big_record"; -$rows=20; # Test of blobs up to ($rows-1)*10000+1 bytes +GetOptions("host=s","db=s","user=s", "password=s", "table=s", "rows=i", + "compress") || die "Aborted"; print "Connection to database $test_db\n"; -$dbh = DBI->connect("DBI:mysql:$test_db:$host",$opt_user,$opt_password) || die "Can't connect: $DBI::errstr\n"; +$extra_options=""; +$extra_options.=":mysql_compression=1" if ($opt_compress); -$dbh->do("drop table if exists $table"); +$dbh = DBI->connect("DBI:mysql:$opt_db:$host$extra_options",$opt_user,$opt_password) || die "Can't connect: $DBI::errstr\n"; -print "Creating table $table\n"; +$dbh->do("drop table if exists $opt_table"); + +print "Creating table $opt_table\n"; ($dbh->do("\ -CREATE TABLE $table ( +CREATE TABLE $opt_table ( auto int(5) unsigned NOT NULL DEFAULT '0' auto_increment, - test mediumblob, + test longblob, PRIMARY KEY (auto))")) or die $DBI::errstr; -print "Inserting $rows records\n"; +print "Inserting $opt_rows records\n"; + +$|=1; # Flush output to stdout to be able to monitor process -for ($i=0 ; $i < $rows ; $i++) +for ($i=0 ; $i < $opt_rows ; $i++) { - $tmp= chr(65+$i) x ($i*10000+1); + $tmp= chr(65+($i % 16)) x ($i*100000+1); + print $i," ",length($tmp),"\n"; $tmp= $dbh->quote($tmp); - $dbh->do("insert into $table (test) values ($tmp)") or die $DBI::errstr; + $dbh->do("insert into $opt_table (test) values ($tmp)") or die $DBI::errstr; } -print "Testing records\n"; +print "Reading records\n"; + +$sth=$dbh->prepare("select * from $opt_table", { "mysql_use_result" => 1}) or die $dbh->errstr; -$sth=$dbh->prepare("select * from $table") or die $dbh->errstr; $sth->execute() or die $sth->errstr; $i=0; while (($row = $sth->fetchrow_arrayref)) { print $row->[0]," ",length($row->[1]),"\n"; - die "Record $i had wrong data in blob" if ($row->[1] ne (chr(65+$i)) x ($i*10000+1)); + die "Record $i had wrong data in blob" if ($row->[1] ne (chr(65+($i % 16)) x ($i*100000+1))); $i++; } -die "Didn't get all rows from server" if ($i != $rows); +die "Didn't get all rows from server" if ($i != $opt_rows); -$dbh->do("drop table $table") or die $DBI::errstr; +$dbh->do("drop table $opt_table") or die $DBI::errstr; print "Test ok\n"; exit 0; diff --git a/tests/fork2_test.pl b/tests/fork2_test.pl index b5564e99c3f..19fab5a67d6 100755 --- a/tests/fork2_test.pl +++ b/tests/fork2_test.pl @@ -92,7 +92,7 @@ $errors=0; while (($pid=wait()) != -1) { $ret=$?/256; - print "thread '" . $work{$pid} . "' finnished with exit code $ret\n"; + print "thread '" . $work{$pid} . "' finished with exit code $ret\n"; $errors++ if ($ret != 0); } diff --git a/tests/fork_big.pl b/tests/fork_big.pl index e082225604c..c72eb59946b 100755 --- a/tests/fork_big.pl +++ b/tests/fork_big.pl @@ -106,7 +106,7 @@ $running_insert_threads=$opt_threads+$numtables; while (($pid=wait()) != -1) { $ret=$?/256; - print "thread '" . $work{$pid} . "' finnished with exit code $ret\n"; + print "thread '" . $work{$pid} . "' finished with exit code $ret\n"; if ($work{$pid} =~ /^insert/) { if (!--$running_insert_threads) diff --git a/tests/function.res b/tests/function.res index a2322020d74..acd34f41a3e 100644 --- a/tests/function.res +++ b/tests/function.res @@ -11,11 +11,11 @@ select floor(5.5),floor(-5.5),ceiling(5.5),ceiling(-5.5),round(5.5),round(-5.5) floor(5.5) floor(-5.5) ceiling(5.5) ceiling(-5.5) round(5.5) round(-5.5) 5 -6 6 -5 6 -6 -------------- -select abs(-10),log(exp(10)),exp(log(sqrt(10))*2),pow(10,log10(10)),rand(999999),rand() +select abs(-10),log(exp(10)),ln(exp(10)),log2(65535),log(2,65535),exp(log(sqrt(10))*2),pow(10,log10(10)),rand(999999),rand() -------------- -abs(-10) log(exp(10)) exp(log(sqrt(10))*2) pow(10,log10(10)) rand(999999) rand() -10 10.000000 10.000000 10.000000 0.1844 0.7637 +abs(-10) log(exp(10)) ln(exp(10)) log2(65535) log(2,65535) exp(log(sqrt(10))*2) pow(10,log10(10)) rand(999999) rand() +10 10.000000 10.000000 2.000000 2.000000 10.000000 10.000000 0.1844 0.7637 -------------- select least(6,1.0,2.0),greatest(3,4,5,0) -------------- diff --git a/tests/function.tst b/tests/function.tst index 5b8746e8d3c..17e1cb6c8ac 100644 --- a/tests/function.tst +++ b/tests/function.tst @@ -7,7 +7,7 @@ # select 1+1,1-1,1+1*2,8/5,8%5,mod(8,5),mod(8,5)|0,-(1+1)*-2,sign(-5) ; select floor(5.5),floor(-5.5),ceiling(5.5),ceiling(-5.5),round(5.5),round(-5.5); -select abs(-10),log(exp(10)),exp(log(sqrt(10))*2),pow(10,log10(10)),rand(999999),rand(); +select abs(-10),log(exp(10)),ln(exp(10)),log2(65535),log(2,65535),exp(log(sqrt(10))*2),pow(10,log10(10)),rand(999999),rand(); select least(6,1.0,2.0),greatest(3,4,5,0) ; select 1 | (1+1),5 & 3,bit_count(7) ; # diff --git a/tests/grant.pl b/tests/grant.pl index c41b22157bd..ba95d78d068 100644 --- a/tests/grant.pl +++ b/tests/grant.pl @@ -11,7 +11,7 @@ use strict; use vars qw($dbh $user_dbh $opt_help $opt_Information $opt_force $opt_debug $opt_verbose $opt_server $opt_root_user $opt_password $opt_user $opt_database $opt_host $version $user $tables_cols $columns_cols - $opt_silent); + $tmp_table $opt_silent); $version="1.1"; $opt_help=$opt_Information=$opt_force=$opt_debug=$opt_verbose=$opt_silent=0; @@ -36,6 +36,8 @@ $|=1; $tables_cols="Host, Db, User, Table_name, Grantor, Table_priv, Column_priv"; $columns_cols="Host, Db, User, Table_name, Column_name, Column_priv"; +$tmp_table="/tmp/mysql-grant.test"; # Can't use $$ as we are logging result +unlink($tmp_table); # # clear grant tables @@ -73,6 +75,7 @@ user_connect(0); user_query("select * from mysql.user where user = '$opt_user'"); user_query("select * from mysql.db where user = '$opt_user'"); safe_query("grant select on *.* to $user,$user"); +safe_query("show grants for $user"); # The following should fail user_query("insert into mysql.user (host,user) values ('error','$opt_user')",1); @@ -295,6 +298,7 @@ safe_query("select $tables_cols from mysql.tables_priv"); safe_query("revoke ALL PRIVILEGES on $opt_database.test from $user"); safe_query("select $tables_cols from mysql.tables_priv"); safe_query("revoke GRANT OPTION on $opt_database.test from $user",1); + # # Test grants on database level # @@ -379,20 +383,81 @@ safe_query("select $tables_cols from mysql.tables_priv where user = '$opt_user'" safe_query("select $columns_cols from mysql.columns_priv where user = '$opt_user'"); # -# Test IDENTIFIED BY -# +# Clear up privileges to make future tests easier safe_query("delete from user where user='$opt_user'"); +safe_query("delete from db where user='$opt_user'"); safe_query("flush privileges"); +safe_query("show grants for $user",1); + +# +# Test IDENTIFIED BY +# + safe_query("grant ALL PRIVILEGES on $opt_database.test to $user identified by 'dummy', ${opt_user}\@127.0.0.1 identified by 'dummy2'"); user_connect(0,"dummy"); safe_query("grant SELECT on $opt_database.* to $user identified by ''"); user_connect(0); +safe_query("revoke ALL PRIVILEGES on $opt_database.test from $user identified by ''"); +safe_query("revoke ALL PRIVILEGES on $opt_database.* from $user identified by ''"); +safe_query("show grants for $user"); + +# +# Test bug reported in SELECT INTO OUTFILE +# + +safe_query("create table $opt_database.test3 (a int)"); +safe_query("grant SELECT on $opt_database.test3 to $user"); +safe_query("grant FILE on *.* to $user"); +safe_query("insert into $opt_database.test3 values (1)"); +user_connect(0); +user_query("select * into outfile '$tmp_table' from $opt_database.test3"); +safe_query("revoke SELECT on $opt_database.test3 from $user"); +safe_query("revoke FILE on *.* from $user"); +safe_query("drop table $opt_database.test3"); + +# +# Test privileges needed for LOCK TABLES +# + +safe_query("create table $opt_database.test3 (a int)"); +user_connect(1); +safe_query("grant INSERT on $opt_database.test3 to $user"); +user_connect(0); +user_query("select * into outfile '$tmp_table' from $opt_database.test3",1); +safe_query("grant SELECT on $opt_database.test3 to $user"); +user_connect(0); +user_query("LOCK TABLES $opt_database.test3 READ",1); +safe_query("grant LOCK TABLES on *.* to $user"); +safe_query("show grants for $user"); +safe_query("select * from mysql.user where user='$opt_user'"); +user_connect(0); +user_query("LOCK TABLES $opt_database.test3 READ"); +user_query("UNLOCK TABLES"); +safe_query("revoke SELECT,INSERT,UPDATE,DELETE on $opt_database.test3 from $user"); +user_connect(0); +safe_query("revoke LOCK TABLES on *.* from $user"); +user_connect(1); +safe_query("drop table $opt_database.test3"); + +# +# test new privileges in 4.0.2 +# + +safe_query("show grants for $user"); +safe_query("grant all on *.* to $user WITH MAX_QUERIES_PER_HOUR 1 MAX_UPDATES_PER_HOUR 2 MAX_CONNECTIONS_PER_HOUR 3"); +safe_query("show grants for $user"); +safe_query("revoke LOCK TABLES on *.* from $user"); +safe_query("flush privileges"); +safe_query("show grants for $user"); +safe_query("revoke ALL PRIVILEGES on *.* from $user"); +safe_query("show grants for $user"); # # Clean up things # +unlink($tmp_table); safe_query("drop database $opt_database"); safe_query("delete from user where user='$opt_user'"); safe_query("delete from db where user='$opt_user'"); diff --git a/tests/grant.res b/tests/grant.res index 1c74e5b1d1b..822e9320f53 100644 --- a/tests/grant.res +++ b/tests/grant.res @@ -19,16 +19,19 @@ Error on connect: Access denied for user: 'grant_user@localhost' (Using password set password FOR grant_user='' Connecting grant_user select * from mysql.user where user = 'grant_user' -localhost grant_user Y N N N N N N N N N N N N N +localhost grant_user Y N N N N N N N N N N N N N N N N N N N N 0 0 0 select * from mysql.db where user = 'grant_user' grant select on *.* to grant_user@localhost,grant_user@localhost +show grants for grant_user@localhost +GRANT SELECT ON *.* TO 'grant_user'@'localhost' + insert into mysql.user (host,user) values ('error','grant_user') -Error in execute: Access denied for user: 'grant_user@localhost' to database 'mysql' +Error in execute: insert command denied to user: 'grant_user@localhost' for table 'user' update mysql.user set host='error' WHERE user='grant_user' -Error in execute: Access denied for user: 'grant_user@localhost' to database 'mysql' +Error in execute: update command denied to user: 'grant_user@localhost' for table 'user' create table grant_test.test (a int,b int) -Error in execute: Access denied for user: 'grant_user@localhost' to database 'grant_test' +Error in execute: create command denied to user: 'grant_user@localhost' for table 'test' grant select on *.* to grant_user2@localhost Error in execute: Access denied for user: 'grant_user@localhost' (Using password: NO) revoke select on grant_test.test from grant_user@opt_host @@ -93,31 +96,31 @@ delete from user where user='grant_user' flush privileges grant select on grant_test.* to grant_user@localhost select * from mysql.user where user = 'grant_user' -localhost grant_user N N N N N N N N N N N N N N +localhost grant_user N N N N N N N N N N N N N N N N N N N N N 0 0 0 select * from mysql.db where user = 'grant_user' -localhost grant_test grant_user Y N N N N N N N N N +localhost grant_test grant_user Y N N N N N N N N N N N Connecting grant_user select count(*) from grant_test.test 2 select * from mysql.user where user = 'grant_user' -Error in execute: Access denied for user: 'grant_user@localhost' to database 'mysql' +Error in execute: select command denied to user: 'grant_user@localhost' for table 'user' insert into grant_test.test values (4,0) -Error in execute: Access denied for user: 'grant_user@localhost' to database 'grant_test' +Error in execute: insert command denied to user: 'grant_user@localhost' for table 'test' update grant_test.test set a=1 -Error in execute: Access denied for user: 'grant_user@localhost' to database 'grant_test' +Error in execute: update command denied to user: 'grant_user@localhost' for table 'test' delete from grant_test.test -Error in execute: Access denied for user: 'grant_user@localhost' to database 'grant_test' +Error in execute: delete command denied to user: 'grant_user@localhost' for table 'test' create table grant_test.test2 (a int) -Error in execute: Access denied for user: 'grant_user@localhost' to database 'grant_test' +Error in execute: create command denied to user: 'grant_user@localhost' for table 'test2' ALTER TABLE grant_test.test add c int -Error in execute: Access denied for user: 'grant_user@localhost' to database 'grant_test' +Error in execute: alter command denied to user: 'grant_user@localhost' for table 'test' CREATE INDEX dummy ON grant_test.test (a) -Error in execute: Access denied for user: 'grant_user@localhost' to database 'grant_test' +Error in execute: index command denied to user: 'grant_user@localhost' for table 'test' drop table grant_test.test -Error in execute: Access denied for user: 'grant_user@localhost' to database 'grant_test' +Error in execute: drop command denied to user: 'grant_user@localhost' for table 'test' grant ALL PRIVILEGES on grant_test.* to grant_user2@localhost Error in execute: Access denied for user: 'grant_user@localhost' to database 'grant_test' grant ALL PRIVILEGES on grant_test.* to grant_user@localhost WITH GRANT OPTION @@ -130,14 +133,14 @@ REVOKE ALL PRIVILEGES on grant_test.* from grant_user@localhost REVOKE ALL PRIVILEGES on grant_test.* from grant_user@localhost Connecting grant_user insert into grant_test.test values (6,0) -Error in execute: Access denied for user: 'grant_user@localhost' to database 'grant_test' +Error in execute: insert command denied to user: 'grant_user@localhost' for table 'test' REVOKE GRANT OPTION on grant_test.* from grant_user@localhost Connecting grant_user Error on connect: Access denied for user: 'grant_user@localhost' to database 'grant_test' grant ALL PRIVILEGES on grant_test.* to grant_user@localhost Connecting grant_user select * from mysql.user where user = 'grant_user' -Error in execute: Access denied for user: 'grant_user@localhost' to database 'mysql' +Error in execute: select command denied to user: 'grant_user@localhost' for table 'user' insert into grant_test.test values (7,0) update grant_test.test set a=3 where a=2 delete from grant_test.test where a=3 @@ -149,10 +152,10 @@ show tables from grant_test test insert into mysql.user (host,user) values ('error','grant_user',0) -Error in execute: Access denied for user: 'grant_user@localhost' to database 'mysql' +Error in execute: insert command denied to user: 'grant_user@localhost' for table 'user' revoke ALL PRIVILEGES on grant_test.* from grant_user@localhost select * from mysql.user where user = 'grant_user' -localhost grant_user N N N N N N N N N N N N N N +localhost grant_user N N N N N N N N N N N N N N N N N N N N N 0 0 0 select * from mysql.db where user = 'grant_user' Connecting grant_user @@ -187,11 +190,11 @@ delete from grant_test.test Error in execute: delete command denied to user: 'grant_user@localhost' for table 'test' grant delete on grant_test.test to grant_user@localhost delete from grant_test.test where a=1 -Error in execute: select command denied to user: 'grant_user@localhost' for column 'a' in table 'test' +Error in execute: SELECT command denied to user: 'grant_user@localhost' for column 'a' in table 'test' update grant_test.test set b=3 where b=1 -Error in execute: select command denied to user: 'grant_user@localhost' for column 'b' in table 'test' +Error in execute: SELECT command denied to user: 'grant_user@localhost' for column 'b' in table 'test' update grant_test.test set b=b+1 -Error in execute: select command denied to user: 'grant_user@localhost' for column 'b' in table 'test' +Error in execute: SELECT command denied to user: 'grant_user@localhost' for column 'b' in table 'test' select * from test Error in execute: select command denied to user: 'grant_user@localhost' for table 'test' grant select on grant_test.test to grant_user@localhost @@ -264,7 +267,7 @@ Error in execute: Access denied for user: 'grant_user@localhost' to database 'gr drop database grant_test Error in execute: Access denied for user: 'grant_user@localhost' to database 'grant_test' flush tables -Error in execute: Access denied for user: 'grant_user@localhost' (Using password: NO) +Error in execute: Access denied. You need the RELOAD privilege for this operation flush privileges select Host, Db, User, Table_name, Grantor, Table_priv, Column_priv from mysql.tables_priv localhost grant_test grant_user test2 root@localhost Update,Delete,Create,Grant,Index,Alter Insert @@ -288,15 +291,15 @@ grant update(b),delete on grant_test.test to grant_user@localhost revoke update(a) on grant_test.test from grant_user@localhost Error in execute: There is no such grant defined for user 'grant_user' on host 'localhost' on table 'test' delete from grant_test.test where a=2 -Error in execute: select command denied to user: 'grant_user@localhost' for column 'a' in table 'test' +Error in execute: SELECT command denied to user: 'grant_user@localhost' for column 'a' in table 'test' update test set b=5 where b>0 -Error in execute: select command denied to user: 'grant_user@localhost' for column 'b' in table 'test' +Error in execute: SELECT command denied to user: 'grant_user@localhost' for column 'b' in table 'test' grant select(a),select(b) on grant_test.test to grant_user@localhost delete from grant_test.test where a=2 delete from grant_test.test where A=2 update test set b=5 where b>0 update test set a=11 where b>5 -Error in execute: update command denied to user: 'grant_user@localhost' for column 'a' in table 'test' +Error in execute: UPDATE command denied to user: 'grant_user@localhost' for column 'a' in table 'test' select a,A from test 8 8 5 5 @@ -330,19 +333,19 @@ update test set b=3 where a > 0 select * from test Error in execute: select command denied to user: 'grant_user@localhost' for column 'b' in table 'test' select b from test -Error in execute: select command denied to user: 'grant_user@localhost' for column 'b' in table 'test' +Error in execute: SELECT command denied to user: 'grant_user@localhost' for column 'b' in table 'test' select a from test where b > 0 -Error in execute: select command denied to user: 'grant_user@localhost' for column 'b' in table 'test' +Error in execute: SELECT command denied to user: 'grant_user@localhost' for column 'b' in table 'test' insert into test (a) values (10) -Error in execute: insert command denied to user: 'grant_user@localhost' for column 'a' in table 'test' +Error in execute: INSERT command denied to user: 'grant_user@localhost' for column 'a' in table 'test' insert into test (b) values (b) -Error in execute: select command denied to user: 'grant_user@localhost' for column 'b' in table 'test' +Error in execute: SELECT command denied to user: 'grant_user@localhost' for column 'b' in table 'test' insert into test (a,b) values (1,5) -Error in execute: insert command denied to user: 'grant_user@localhost' for column 'a' in table 'test' +Error in execute: INSERT command denied to user: 'grant_user@localhost' for column 'a' in table 'test' insert into test (b) values (1),(b) -Error in execute: select command denied to user: 'grant_user@localhost' for column 'b' in table 'test' +Error in execute: SELECT command denied to user: 'grant_user@localhost' for column 'b' in table 'test' update test set b=3 where b > 0 -Error in execute: select command denied to user: 'grant_user@localhost' for column 'b' in table 'test' +Error in execute: SELECT command denied to user: 'grant_user@localhost' for column 'b' in table 'test' select Host, Db, User, Table_name, Grantor, Table_priv, Column_priv from mysql.tables_priv localhost grant_test grant_user test root@localhost Select,Insert,Update @@ -376,13 +379,13 @@ localhost grant_test grant_user test b Select,Insert,Update localhost grant_test grant_user test a Select,Update insert into test (a,b) values (12,12) -Error in execute: insert command denied to user: 'grant_user@localhost' for column 'a' in table 'test' +Error in execute: INSERT command denied to user: 'grant_user@localhost' for column 'a' in table 'test' grant insert on grant_test.* to grant_user@localhost Connecting grant_user insert into test (a,b) values (13,13) revoke select(b) on grant_test.test from grant_user@localhost select count(a) from test where a+b > 0 -Error in execute: select command denied to user: 'grant_user@localhost' for column 'b' in table 'test' +Error in execute: SELECT command denied to user: 'grant_user@localhost' for column 'b' in table 'test' update test set b=5 where a=2 grant select on grant_test.test to grant_user@localhost Connecting grant_user @@ -399,7 +402,7 @@ select count(a) from test where a+b > 0 Error in execute: select command denied to user: 'grant_user@localhost' for table 'test' grant select(a) on grant_test.test to grant_user@localhost select count(a) from test where a+b > 0 -Error in execute: select command denied to user: 'grant_user@localhost' for column 'b' in table 'test' +Error in execute: SELECT command denied to user: 'grant_user@localhost' for column 'b' in table 'test' grant select on *.* to grant_user@localhost Connecting grant_user select count(a) from test where a+b > 0 @@ -412,7 +415,7 @@ select count(a) from test where a+b > 0 4 select * from mysql.db where user = 'grant_user' -localhost grant_test grant_user N Y N N N N N N N N +localhost grant_test grant_user N Y N N N N N N N N N N select Host, Db, User, Table_name, Grantor, Table_priv, Column_priv from mysql.tables_priv where user = 'grant_user' localhost grant_test grant_user test root@localhost Select,Insert,Update @@ -427,16 +430,72 @@ Error in execute: select command denied to user: 'grant_user@localhost' for tabl select * from mysql.user Error in execute: select command denied to user: 'grant_user@localhost' for table 'user' select * from mysql.db where user = 'grant_user' -localhost grant_test grant_user N Y N N N N N N N N +localhost grant_test grant_user N Y N N N N N N N N N N select Host, Db, User, Table_name, Grantor, Table_priv, Column_priv from mysql.tables_priv where user = 'grant_user' select Host, Db, User, Table_name, Column_name, Column_priv from mysql.columns_priv where user = 'grant_user' delete from user where user='grant_user' +delete from db where user='grant_user' flush privileges +show grants for grant_user@localhost +Error in execute: There is no such grant defined for user 'grant_user' on host 'localhost' grant ALL PRIVILEGES on grant_test.test to grant_user@localhost identified by 'dummy', grant_user@127.0.0.1 identified by 'dummy2' Connecting grant_user grant SELECT on grant_test.* to grant_user@localhost identified by '' Connecting grant_user +revoke ALL PRIVILEGES on grant_test.test from grant_user@localhost identified by '' +revoke ALL PRIVILEGES on grant_test.* from grant_user@localhost identified by '' +show grants for grant_user@localhost +create table grant_test.test3 (a int) +grant SELECT on grant_test.test3 to grant_user@localhost +grant FILE on *.* to grant_user@localhost +insert into grant_test.test3 values (1) +Connecting grant_user +select * into outfile '/tmp/mysql-grant.test' from grant_test.test3 +revoke SELECT on grant_test.test3 from grant_user@localhost +revoke FILE on *.* from grant_user@localhost +drop table grant_test.test3 +create table grant_test.test3 (a int) +Connecting grant_user +Access denied for user: 'grant_user@localhost' to database 'grant_test' +grant INSERT on grant_test.test3 to grant_user@localhost +Connecting grant_user +select * into outfile '/tmp/mysql-grant.test' from grant_test.test3 +Error in execute: Access denied for user: 'grant_user@localhost' (Using password: NO) +grant SELECT on grant_test.test3 to grant_user@localhost +Connecting grant_user +LOCK TABLES grant_test.test3 READ +Error in execute: Access denied for user: 'grant_user@localhost' to database 'grant_test' +grant LOCK TABLES on *.* to grant_user@localhost +show grants for grant_user@localhost +GRANT LOCK TABLES ON *.* TO 'grant_user'@'localhost' +GRANT SELECT, INSERT ON grant_test.test3 TO 'grant_user'@'localhost' + +select * from mysql.user where user='grant_user' +127.0.0.1 grant_user 7f70e8b858ee6782 N N N N N N N N N N N N N N N N N N N N N 0 0 0 +localhost grant_user N N N N N N N N N N N N N N N N N Y N N N 0 0 0 + +Connecting grant_user +LOCK TABLES grant_test.test3 READ +UNLOCK TABLES +revoke SELECT,INSERT,UPDATE,DELETE on grant_test.test3 from grant_user@localhost +Connecting grant_user +revoke LOCK TABLES on *.* from grant_user@localhost +Connecting grant_user +Access denied for user: 'grant_user@localhost' to database 'grant_test' +drop table grant_test.test3 +show grants for grant_user@localhost +grant all on *.* to grant_user@localhost WITH MAX_QUERIES_PER_HOUR 1 MAX_UPDATES_PER_HOUR 2 MAX_CONNECTIONS_PER_HOUR 3 +show grants for grant_user@localhost +GRANT ALL PRIVILEGES ON *.* TO 'grant_user'@'localhost' WITH MAX_QUERIES_PER_HOUR 1 MAX_UPDATES_PER_HOUR 2 MAX_CONNECTIONS_PER_HOUR 3 + +revoke LOCK TABLES on *.* from grant_user@localhost +flush privileges +show grants for grant_user@localhost +GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'grant_user'@'localhost' WITH MAX_QUERIES_PER_HOUR 1 MAX_UPDATES_PER_HOUR 2 MAX_CONNECTIONS_PER_HOUR 3 + +revoke ALL PRIVILEGES on *.* from grant_user@localhost +show grants for grant_user@localhost drop database grant_test delete from user where user='grant_user' delete from db where user='grant_user' diff --git a/tests/insert_and_repair.pl b/tests/insert_and_repair.pl index 4d68c2ab9a0..1c7186bb651 100755 --- a/tests/insert_and_repair.pl +++ b/tests/insert_and_repair.pl @@ -56,7 +56,7 @@ $errors=0; while (($pid=wait()) != -1) { $ret=$?/256; - print "thread '" . $work{$pid} . "' finnished with exit code $ret\n"; + print "thread '" . $work{$pid} . "' finished with exit code $ret\n"; $errors++ if ($ret != 0); } diff --git a/tests/mail_to_db.pl b/tests/mail_to_db.pl index b758a171c77..671e8b23599 100755 --- a/tests/mail_to_db.pl +++ b/tests/mail_to_db.pl @@ -17,7 +17,7 @@ use DBI; use Getopt::Long; $| = 1; -$VER = "2.3"; +$VER = "2.6"; $opt_help = 0; $opt_version = 0; @@ -152,19 +152,77 @@ sub main $dbh->disconnect if (!$opt_test); $ignored = ($mail_no_from_f + $mail_no_subject_f + $mail_no_txt_f + - $mail_too_big + $mail_duplicates); - print "Mails inserted:\t\t\t$mail_inserted\n"; - print "Mails ignored:\t\t\t$ignored\n"; - print "Mails without \"From:\" -field:\t$mail_no_from_f\n"; - print "Mails without message:\t\t$mail_no_txt_f\n"; - print "Mails without subject:\t\t$mail_no_subject_f\n"; - print "Too big mails (> $opt_max_mail_size):\t$mail_too_big\n"; - print "Duplicate mails:\t\t$mail_duplicates\n"; - print "Forwarded mails:\t\t$mail_forwarded\n"; - print "Total number of mails:\t\t"; + $mail_too_big + $mail_duplicates + $mail_fixed); + print "################################ Mail Report #################################\n\n"; + print "Mails inserted:\t\t\t\t\t$mail_inserted\n"; + print "--------------- "; + print "=" . "=" x length("$mail_inserted") . "=\n\n"; + if ($ignored) + { + print "Ignored mails\n"; + print "-------------\n"; + if ($mail_no_from_f) + { + print "Reason: mail without \"From:\" -field:\t\t$mail_no_from_f\n"; + } + else + { + print ""; + } + if ($mail_no_txt_f) + { + print "Reason: mail without message:\t\t\t$mail_no_txt_f\n"; + } + else + { + print ""; + } + if ($mail_no_subject_f) + { + print "Reason: mail without subject:\t\t\t$mail_no_subject_f\n"; + } + else + { + print ""; + } + if ($mail_too_big) + { + print "Reason: mail too big, over $opt_max_mail_size bytes:\t\t"; + print $mail_too_big; + print " (see --max_mail_size=#)\n"; + } + else + { + print ""; + } + if ($mail_duplicates) + { + print "Reason: duplicate mail, or in db already:\t$mail_duplicates\n"; + } + else + { + print ""; + } + if ($mail_fixed) + { + print "Reason: mail was an unsubscribe - mail:\t\t$mail_fixed\n"; + } + else + { + print ""; + } + print " "; + print "=" . "=" x length("$ignored") . "=\n"; + print "Total number of ignored mails:\t\t\t$ignored\n\n"; + } + print "Total number of mails:\t\t\t\t"; print $mail_inserted + $ignored; - print "\n"; - print "Mails with unsubscribe removed:\t$mail_fixed\n"; + print " (OK: "; + print sprintf("%.1f", (($mail_inserted / ($mail_inserted+$ignored)) * 100)); + print "% Ignored: "; + print sprintf("%.1f", (($ignored / ($mail_inserted + $ignored)) * 100)); + print "%)\n"; + print "################################ End Report ##################################\n"; exit(0); } @@ -213,10 +271,10 @@ sub process_mail_file %values = (); $type = ""; $check = 0; - while (<FILE>) { chop; + chop if (substr($_, -1, 1) eq "\r"); if ($type ne "message") { if (/^Reply-To: (.*)/i) @@ -269,7 +327,8 @@ sub process_mail_file $values{$type} .= "\n" . $_; $check--; } - elsif (/^From .* \d\d:\d\d:\d\d\s\d\d\d\d$/) + elsif (/^From .* \d\d:\d\d:\d\d\s\d\d\d\d/ || + /^From .* \d\d\d\d\s\d\d:\d\d:\d\d/) { $values{'hash'} = checksum("$values{'message'}"); update_table($dbh, $file_name, \%values); @@ -288,8 +347,11 @@ sub process_mail_file $values{$type} .= "\n" . $_; } } - $values{'hash'} = checksum("$values{'message'}"); - update_table($dbh, $file_name, \%values); + if (defined($values{'message'})) + { + $values{'hash'} = checksum("$values{'message'}"); + update_table($dbh, $file_name, \%values); + } } #### @@ -335,26 +397,26 @@ sub date_parser sub update_table { my($dbh, $file_name, $values) = @_; - my($q,$tail,$message); + my($q, $tail, $message); if (!defined($values->{'subject'}) || !defined($values->{'to'})) { $mail_no_subject_f++; return; # Ignore these } - $message=$values->{'message'}; - $message =~ s/^\s*//; #removes whitespaces from the beginning + $message = $values->{'message'}; + $message =~ s/^\s*//; # removes whitespaces from the beginning restart: - $message =~ s/[\s\n>]*$//; #removes whitespaces and '>' from the end - $values->{'message'}=$message; + $message =~ s/[\s\n>]*$//; # removes whitespaces and '>' from the end + $values->{'message'} = $message; foreach $tail (@remove_tail) { $message =~ s/$tail//; } if ($message ne $values->{'message'}) { - $message =~ s/\s*$//; #removes whitespaces from the end + $message =~ s/\s*$//; # removes whitespaces from the end $mail_fixed++; goto restart; # Some mails may have duplicated messages } @@ -442,7 +504,7 @@ sub update_table sub checksum { my ($txt)= @_; - my ($crc,$i,$count); + my ($crc, $i, $count); $count = length($txt); for ($crc = $i = 0; $i < $count ; $i++) { diff --git a/tests/myisam-big-rows.tst b/tests/myisam-big-rows.tst new file mode 100644 index 00000000000..56c06f4820f --- /dev/null +++ b/tests/myisam-big-rows.tst @@ -0,0 +1,72 @@ +# +# Test rows with length above > 16M +# Note that for this to work, you should start mysqld with +# -O max_allowed_packet=32M +# + +drop table if exists t1; +create table t1 (a tinyint not null auto_increment, b longblob not null, primary key (a)) checksum=1; + +insert into t1 (b) values(repeat(char(65),10)); +insert into t1 (b) values(repeat(char(66),10)); +insert into t1 (b) values(repeat(char(67),10)); +update t1 set b=repeat(char(68),16777216) where a=1; +check table t1; +update t1 set b=repeat(char(69),16777000) where a=2; +update t1 set b=repeat(char(70),167) where a=3; +update t1 set b=repeat(char(71),16778000) where a=1; +update t1 set b=repeat(char(72),16778000) where a=3; +select a,length(b) from t1; +set @a=1; +insert into t1 (b) values (repeat(char(73+@a),16777200+@a)); +set @a=@a+1; +insert into t1 (b) values (repeat(char(73+@a),16777200+@a)); +set @a=@a+1; +insert into t1 (b) values (repeat(char(73+@a),16777200+@a)); +set @a=@a+1; +insert into t1 (b) values (repeat(char(73+@a),16777200+@a)); +set @a=@a+1; +insert into t1 (b) values (repeat(char(73+@a),16777200+@a)); +set @a=@a+1; +insert into t1 (b) values (repeat(char(73+@a),16777200+@a)); +set @a=@a+1; +insert into t1 (b) values (repeat(char(73+@a),16777200+@a)); +set @a=@a+1; +insert into t1 (b) values (repeat(char(73+@a),16777200+@a)); +set @a=@a+1; +insert into t1 (b) values (repeat(char(73+@a),16777200+@a)); +set @a=@a+1; +insert into t1 (b) values (repeat(char(73+@a),16777200+@a)); +set @a=@a+1; +insert into t1 (b) values (repeat(char(73+@a),16777200+@a)); +set @a=@a+1; +insert into t1 (b) values (repeat(char(73+@a),16777200+@a)); +set @a=@a+1; +insert into t1 (b) values (repeat(char(73+@a),16777200+@a)); +set @a=@a+1; +insert into t1 (b) values (repeat(char(73+@a),16777200+@a)); +set @a=@a+1; +insert into t1 (b) values (repeat(char(73+@a),16777200+@a)); +set @a=@a+1; +insert into t1 (b) values (repeat(char(73+@a),16777200+@a)); +set @a=@a+1; +insert into t1 (b) values (repeat(char(73+@a),16777200+@a)); +set @a=@a+1; +insert into t1 (b) values (repeat(char(73+@a),16777200+@a)); +update t1 set b=('A') where a=5; +delete from t1 where a=7; +set @a=@a+1; +insert into t1 (b) values (repeat(char(73+@a),16777200+@a)); +update t1 set b=repeat(char(73+@a+1),17000000+@a) where a=last_insert_id(); + +select a,mid(b,1,5),length(b) from t1; +check table t1; +repair table t1; +check table t1; +select a from table where b<>repeat(mid(b,1,1),length(b)); +delete from t1 where (a & 1); +select a from table where b<>repeat(mid(b,1,1),length(b)); +check table t1; +repair table t1; +check table t1; +drop table t1; diff --git a/tests/rename_test.pl b/tests/rename_test.pl index bdfb14be927..edf3216a62f 100755 --- a/tests/rename_test.pl +++ b/tests/rename_test.pl @@ -79,7 +79,7 @@ print "Total time: " . exit(0); # -# Insert records in the table. Delete table when test is finnished +# Insert records in the table. Delete table when test is finished # sub test_insert diff --git a/tests/test_delayed_insert.pl b/tests/test_delayed_insert.pl index e49d73a19bd..c7a8f0ca4b7 100755 --- a/tests/test_delayed_insert.pl +++ b/tests/test_delayed_insert.pl @@ -65,7 +65,7 @@ $errors=0; while (($pid=wait()) != -1) { $ret=$?/256; - print "thread '" . $work{$pid} . "' finnished with exit code $ret\n"; + print "thread '" . $work{$pid} . "' finished with exit code $ret\n"; $errors++ if ($ret != 0); } diff --git a/tests/truncate.pl b/tests/truncate.pl new file mode 100755 index 00000000000..57b50cf96b6 --- /dev/null +++ b/tests/truncate.pl @@ -0,0 +1,125 @@ +#!/usr/bin/perl -w +# +# This is a test with uses many processes to test a MySQL server. +# + +$opt_loop_count=10000; # Change this to make test harder/easier + +##################### Standard benchmark inits ############################## + +use DBI; +use Getopt::Long; +use Benchmark; + +package main; + +$opt_skip_create=$opt_skip_in=$opt_verbose=$opt_fast_insert= +$opt_lock_tables=$opt_debug=$opt_skip_delete=$opt_fast=$opt_force=0; +$opt_threads=2; +$opt_host=$opt_user=$opt_password=""; $opt_db="test"; + +GetOptions("host=s","db=s","user=s","password=s","loop-count=i","skip-create","skip-in","skip-delete","verbose","fast-insert","lock-tables","debug","fast","force","threads=i") || die "Aborted"; +$opt_verbose=$opt_debug=$opt_lock_tables=$opt_fast_insert=$opt_fast=$opt_skip_in=$opt_force=undef; # Ignore warnings from these + +print "Testing truncate from $opt_threads multiple connections $opt_loop_count times\n"; + +@testtables = ( ["bench_f31", "type=heap"]); + +#### +#### Start timeing and start test +#### + +$start_time=new Benchmark; +$dbh = DBI->connect("DBI:mysql:$opt_db:$opt_host", + $opt_user, $opt_password, + { PrintError => 0}) || die $DBI::errstr; +if (!$opt_skip_create) +{ + my $table_def; + foreach $table_def (@testtables) + { + my ($table,$extra)= ($table_def->[0], $table_def->[1]); + print "Creating table $table in database $opt_db\n"; + $dbh->do("drop table if exists $table"); + $dbh->do("create table $table". + " (id int(6) not null,". + " info varchar(32)," . + " marker timestamp," . + " flag int not null," . + " primary key(id)) $extra") + + or die $DBI::errstr; + } +} + +$dbh->disconnect; $dbh=0; # Close handler +$|= 1; # Autoflush + +#### +#### Start the tests +#### + +for ($i=0 ; $i < $opt_threads ; $i ++) +{ + test_truncate() if (($pid=fork()) == 0); $work{$pid}="truncate"; +} + +print "Started $opt_threads threads\n"; + +$errors=0; +$running_insert_threads=$opt_threads; +while (($pid=wait()) != -1) +{ + $ret=$?/256; + print "thread '" . $work{$pid} . "' finished with exit code $ret\n"; + --$running_insert_threads; + $errors++ if ($ret != 0); +} + +# +# Cleanup +# + +if (!$opt_skip_delete && !$errors) +{ + my $table_def; + $dbh = DBI->connect("DBI:mysql:$opt_db:$opt_host", + $opt_user, $opt_password, + { PrintError => 0}) || die $DBI::errstr; + + foreach $table_def (@testtables) + { + $dbh->do("drop table " . $table_def->[0]); + } + $dbh->disconnect; $dbh=0; # Close handler +} + +print ($errors ? "Test failed\n" :"Test ok\n"); +$end_time=new Benchmark; +print "Total time: " . + timestr(timediff($end_time, $start_time),"noc") . "\n"; + +exit(0); + + +# +# Insert records in the table +# + +sub test_truncate +{ + my ($dbh,$i,$j,$count,$table_def,$table); + + $dbh = DBI->connect("DBI:mysql:$opt_db:$opt_host", + $opt_user, $opt_password, + { PrintError => 0}) || die $DBI::errstr; + + for ($count=0; $count < $opt_loop_count ; $count++) + { + my ($table)= ($testtables[0]->[0]); + $dbh->do("truncate table $table") || die "Got error on truncate: $DBI::errstr\n"; + } + $dbh->disconnect; $dbh=0; + print "Test_truncate: Run $count times\n"; + exit(0); +} |