summaryrefslogtreecommitdiff
path: root/mysql-test/include/check-testcase.test
blob: 1038ff30c11e65ca8e1f565fd0974379007098b0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# ==== Purpose ====
#
# This test is executed twice for each test case. Before every
# testcase it is run with mysqltest in record mode and will thus
# produce an output file that can be compared to output from after the
# tescase.  In that way, it is possible to check that a testcase does
# not have any unwanted side affects.

--disable_query_log

# We want to ensure all slave configuration is restored.  But SHOW
# SLAVE STATUS returns nothing for servers not configured as slaves,
# and (after BUG#28796 was fixed) there is no way to de-configure a
# slave.  Hence, it's impossible to clean up the replication state at
# the end.  But we want to check that the slave is stopped, there is
# no error, and a few other invariants.  So we issue SHOW SLAVE
# STATUS, and if it returns no rows we fake the result.
--let $tmp= query_get_value(SHOW SLAVE STATUS, Slave_IO_Running, 1)
--let $tmp= `SELECT '$tmp' = 'No such row'`
if ($tmp)
{
  # Note: after WL#5177, fields 13-18 shall not be filtered-out.
  --echo Slave_IO_State	
  --echo Master_Host	127.0.0.1
  --echo Master_User	root
  --echo Master_Port	#
  --echo Connect_Retry	#
  --echo Master_Log_File	#
  --echo Read_Master_Log_Pos	#
  --echo Relay_Log_File	#
  --echo Relay_Log_Pos	#
  --echo Relay_Master_Log_File	#
  --echo Slave_IO_Running	No
  --echo Slave_SQL_Running	No
  --echo Replicate_Rewrite_DB	#
  --echo Replicate_Do_DB	#
  --echo Replicate_Ignore_DB	#
  --echo Replicate_Do_Table	#
  --echo Replicate_Ignore_Table	#
  --echo Replicate_Wild_Do_Table	#
  --echo Replicate_Wild_Ignore_Table	#
  --echo Last_Errno	0
  --echo Last_Error	
  --echo Skip_Counter	0
  --echo Exec_Master_Log_Pos	#
  --echo Relay_Log_Space	#
  --echo Until_Condition	#
  --echo Until_Log_File	#
  --echo Until_Log_Pos	#
  --echo Master_SSL_Allowed	No
  --echo Master_SSL_CA_File	
  --echo Master_SSL_CA_Path	
  --echo Master_SSL_Cert	
  --echo Master_SSL_Cipher	
  --echo Master_SSL_Key	
  --echo Seconds_Behind_Master	NULL
  --echo Master_SSL_Verify_Server_Cert	No
  --echo Last_IO_Errno	0
  --echo Last_IO_Error	
  --echo Last_SQL_Errno	0
  --echo Last_SQL_Error	
  --echo Replicate_Ignore_Server_Ids	
  --echo Master_Server_Id	#
  --echo Master_SSL_Crl	#
  --echo Master_SSL_Crlpath	#
  --echo Using_Gtid	Slave_Pos
  --echo Gtid_IO_Pos	#
  --echo Replicate_Do_Domain_Ids	
  --echo Replicate_Ignore_Domain_Ids	
  --echo Parallel_Mode	optimistic
  --echo SQL_Delay	0
  --echo SQL_Remaining_Delay	NULL
  --echo Slave_SQL_Running_State	
  --echo Slave_DDL_Groups	#
  --echo Slave_Non_Transactional_Groups	#
  --echo Slave_Transactional_Groups	#
}
if (!$tmp) {
  # Note: after WL#5177, fields 13-18 shall not be filtered-out.
  --replace_column 4 # 5 # 6 # 7 # 8 # 9 # 10 # 13 # 14 # 15 # 16 # 17 # 18 # 19 # 23 # 24 # 25 # 26 # 27 # 41 # 42 # 43 # 45 # 52 # 53 # 54 #
  query_vertical
  SHOW SLAVE STATUS;
}

#
# Ensure that we don't get warnings from mysql.proc (used by check_mysqld)
#

--disable_query_log
--disable_warnings
--disable_result_log
select count(*) from mysql.proc;
--enable_result_log
--enable_warnings
--enable_query_log

call mtr.check_testcase();

let $datadir=`select @@datadir`;
list_files $datadir mariadb_upgrade_info;
list_files $datadir/test #sql*;
list_files $datadir/mysql #sql*;

#
# Check that SHOW ENGINE INNODB STATUS does not show any active transactions
# We do this only if wsrep provider is loaded, to avoid disturbing any non-Galera MTR tests
#
if (`SELECT COUNT(*)=1 FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'wsrep' AND PLUGIN_STATUS='ACTIVE'`) {
  if (`SELECT @@wsrep_on`) {
    if (`SELECT COUNT(*) FROM information_schema.innodb_trx WHERE trx_mysql_thread_id != 0`) {
      if ($before) {
        --echo Before test start.
      }
      if (!$before) {
        --echo After test end.
      }
      --echo There is one or more active InnoDB transaction(s) when there should be none. Dumping some diagnostics.

      --let $status_locks = `SELECT @@innodb_status_output_locks`
      --let $status_output = `SELECT @@innodb_status_output`
      --enable_query_log
      SET GLOBAL innodb_status_output_locks=ON;
      SHOW ENGINE INNODB STATUS;
      --disable_query_log
      --eval SET GLOBAL innodb_status_output_locks=$status_locks;
      --eval SET GLOBAL innodb_status_output=$status_output;
      --enable_query_log

      --vertical_results
      if ($before) {
        --replace_regex /$/ /
      }
      SELECT * FROM information_schema.processlist;

      if ($before) {
        --replace_regex /$/ /
      }
      SELECT * FROM information_schema.innodb_trx;

      if ($before) {
        --replace_regex /$/ /
      }
      SELECT * FROM information_schema.innodb_locks;

      if ($before) {
        --replace_regex /$/ /
      }
      SELECT * FROM information_schema.innodb_lock_waits;
      --horizontal_results
      --disable_query_log
    }
  }
}

--enable_query_log