From 25bddd93c3c2333a23e31c991bb8f9b044d61ede Mon Sep 17 00:00:00 2001
From: Sven Sandberg <sven@mysql.com>
Date: Mon, 26 May 2008 15:06:49 +0200
Subject: [PATCH] BUG#36826: rpl_slave_status fails sporadically in pushbuild
 rpl_slave_status failed on pushbuild. The slave stopped with an error. Adding
 sync_slave_with_master fixes the problem. Updated test case.

---
 .../suite/rpl/r/rpl_slave_status.result       | 56 ++++-----------
 mysql-test/suite/rpl/t/rpl_slave_status.test  | 71 +++++++++++--------
 2 files changed, 57 insertions(+), 70 deletions(-)

diff --git a/mysql-test/suite/rpl/r/rpl_slave_status.result b/mysql-test/suite/rpl/r/rpl_slave_status.result
index 08f79d01e7a..b435af499df 100644
--- a/mysql-test/suite/rpl/r/rpl_slave_status.result
+++ b/mysql-test/suite/rpl/r/rpl_slave_status.result
@@ -4,59 +4,33 @@ reset master;
 reset slave;
 drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
 start slave;
+==== Create new replication user ====
+[on master]
 grant replication slave on *.* to rpl@127.0.0.1 identified by 'rpl';
+[on slave]
 stop slave;
 change master to master_user='rpl',master_password='rpl';
 start slave;
-drop table if exists t1;
+==== Do replication as new user ====
+[on master]
 create table t1 (n int);
 insert into t1 values (1);
+[on slave]
 select * from t1;
 n
 1
-delete from mysql.user where user='rpl';
+==== Delete new replication user ====
+[on master]
+drop user rpl@127.0.0.1;
 flush privileges;
+[on slave]
+==== Restart slave without privileges =====
 stop slave;
 start slave;
-show slave status;
-Slave_IO_State	#
-Master_Host	127.0.0.1
-Master_User	rpl
-Master_Port	MASTER_MYPORT
-Connect_Retry	1
-Master_Log_File	master-bin.000001
-Read_Master_Log_Pos	#
-Relay_Log_File	#
-Relay_Log_Pos	#
-Relay_Master_Log_File	master-bin.000001
-Slave_IO_Running	No
-Slave_SQL_Running	Yes
-Replicate_Do_DB	
-Replicate_Ignore_DB	
-Replicate_Do_Table	
-Replicate_Ignore_Table	
-Replicate_Wild_Do_Table	
-Replicate_Wild_Ignore_Table	
-Last_Errno	0
-Last_Error	
-Skip_Counter	0
-Exec_Master_Log_Pos	#
-Relay_Log_Space	#
-Until_Condition	None
-Until_Log_File	
-Until_Log_Pos	0
-Master_SSL_Allowed	No
-Master_SSL_CA_File	
-Master_SSL_CA_Path	
-Master_SSL_Cert	
-Master_SSL_Cipher	
-Master_SSL_Key	
-Seconds_Behind_Master	NULL
-Master_SSL_Verify_Server_Cert	No
-Last_IO_Errno	#
-Last_IO_Error	#
-Last_SQL_Errno	0
-Last_SQL_Error	
+==== Verify that Slave_IO_Running = No ====
+Slave_IO_Running = No (should be No)
+==== Cleanup (Note that slave IO thread is not running) ====
 drop table t1;
 delete from mysql.user where user='rpl';
+[on master]
 drop table t1;
diff --git a/mysql-test/suite/rpl/t/rpl_slave_status.test b/mysql-test/suite/rpl/t/rpl_slave_status.test
index 10da6733c39..46836382ac4 100644
--- a/mysql-test/suite/rpl/t/rpl_slave_status.test
+++ b/mysql-test/suite/rpl/t/rpl_slave_status.test
@@ -1,60 +1,73 @@
---source include/master-slave.inc
-
-############################################################################
-# Test case for BUG#10780
+# ==== Purpose ====
+#
+# Verify that a slave without replication privileges has
+# Slave_IO_Running = No
+#
+# ==== Method ====
+#
+# We do the following steps:
+# - Create a new replication user on master
+# - Connect to slave and start replication as this user.
+# - Verify that slave can replicate well, by creating a table and
+#   inserting a row into it.
+# - Delete the user from the master.
+# - Stop and start the slave (this should fail).
+# - Check the Slave_IO_Running column of SHOW SLAVE STATUS.
+#
+# ==== Related bugs ====
 #
-# REQUIREMENT
-#   A slave without replication privileges should have Slave_IO_Running = No
+# BUG#10780: slave can't connect to master - IO and SQL threads running
 
-# 1. Create new replication user
+--source include/master-slave.inc
+
+--echo ==== Create new replication user ====
+--echo [on master]
 connection master;
 grant replication slave on *.* to rpl@127.0.0.1 identified by 'rpl';
 
-connection slave;
+--echo [on slave]
+sync_slave_with_master;
 stop slave;
+source include/wait_for_slave_to_stop.inc;
 change master to master_user='rpl',master_password='rpl';
 start slave;
+source include/wait_for_slave_to_start.inc;
 
-# 2. Do replication as new user
+--echo ==== Do replication as new user ====
+--echo [on master]
 connection master;
---disable_warnings
-drop table if exists t1;
---enable_warnings
 create table t1 (n int);
 insert into t1 values (1);
-save_master_pos;
-connection slave;
-sync_with_master;
+--echo [on slave]
+sync_slave_with_master;
 select * from t1;
 
-# 3. Delete new replication user
+--echo ==== Delete new replication user ====
+--echo [on master]
 connection master;
-delete from mysql.user where user='rpl';
+drop user rpl@127.0.0.1;
 flush privileges;
-connection slave;
 
-# 4. Restart slave without privileges
+--echo [on slave]
+sync_slave_with_master;
+
+--echo ==== Restart slave without privileges =====
 # (slave.err will contain access denied error for this START SLAVE command)
 stop slave;
 source include/wait_for_slave_to_stop.inc;
 start slave;
 source include/wait_for_slave_sql_to_start.inc;
 
-# 5. Make sure Slave_IO_Running = No
---replace_result $MASTER_MYPORT MASTER_MYPORT
-# Column 1 is replaced, since the output can be either
-# "Connecting to master" or "Waiting for master update"
---replace_column 1 # 7 # 8 # 9 # 22 # 23 # 35 # 36 #
-query_vertical show slave status;
+--echo ==== Verify that Slave_IO_Running = No ====
+let $result= query_get_value("SHOW SLAVE STATUS", Slave_IO_Running, 1);
+--echo Slave_IO_Running = $result (should be No)
 
-# Cleanup (Note that slave IO thread is not running)
-connection slave;
+--echo ==== Cleanup (Note that slave IO thread is not running) ====
 drop table t1;
 delete from mysql.user where user='rpl';
 # cleanup: slave io thread has been stopped "irrecoverably"
 # so we clean up mess manually
 
+--echo [on master]
 connection master;
 drop table t1;
-
-# end of 4.1 tests
-- 
2.30.9