~ubuntu-branches/ubuntu/precise/mysql-5.1/precise

« back to all changes in this revision

Viewing changes to mysql-test/t/debug_sync.test

  • Committer: Bazaar Package Importer
  • Author(s): Norbert Tretkowski
  • Date: 2010-03-17 14:56:02 UTC
  • Revision ID: james.westby@ubuntu.com-20100317145602-x7e30l1b2sb5s6w6
Tags: upstream-5.1.45
ImportĀ upstreamĀ versionĀ 5.1.45

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
###################### t/debug_sync.test ###############################
 
2
#                                                                      #
 
3
# Testing of the Debug Sync Facility.                                  #
 
4
#                                                                      #
 
5
# There is important documentation within sql/debug_sync.cc            #
 
6
#                                                                      #
 
7
# Used objects in this test case:                                      #
 
8
# p0 - synchronization point 0. Non-existent dummy sync point.         #
 
9
# s1 - signal 1.                                                       #
 
10
# s2 - signal 2.                                                       #
 
11
#                                                                      #
 
12
# Creation:                                                            #
 
13
# 2008-02-18 istruewing                                                #
 
14
#                                                                      #
 
15
########################################################################
 
16
 
 
17
#
 
18
# We need the Debug Sync Facility.
 
19
#
 
20
--source include/have_debug_sync.inc
 
21
 
 
22
#
 
23
# We are checking privileges, which the embedded server cannot do.
 
24
#
 
25
--source include/not_embedded.inc
 
26
 
 
27
#
 
28
# Preparative cleanup.
 
29
#
 
30
--disable_warnings
 
31
SET DEBUG_SYNC= 'RESET';
 
32
DROP TABLE IF EXISTS t1;
 
33
--enable_warnings
 
34
 
 
35
#
 
36
# Show the special system variable.
 
37
# It shows ON or OFF depending on the command line option --debug-sync.
 
38
# The test case assumes it is ON (command line option present).
 
39
#
 
40
SHOW VARIABLES LIKE 'DEBUG_SYNC';
 
41
 
 
42
#
 
43
# Syntax. Valid forms.
 
44
#
 
45
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIT 3';
 
46
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2';
 
47
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6           HIT_LIMIT 3';
 
48
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6';
 
49
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2           EXECUTE 2 HIT_LIMIT 3';
 
50
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2           EXECUTE 2';
 
51
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2                     HIT_LIMIT 3';
 
52
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2';
 
53
SET DEBUG_SYNC='p0 SIGNAL s1                       EXECUTE 2 HIT_LIMIT 3';
 
54
SET DEBUG_SYNC='p0 SIGNAL s1                       EXECUTE 2';
 
55
SET DEBUG_SYNC='p0 SIGNAL s1                                 HIT_LIMIT 3';
 
56
SET DEBUG_SYNC='p0 SIGNAL s1';
 
57
SET DEBUG_SYNC='p0           WAIT_FOR s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIT 3';
 
58
SET DEBUG_SYNC='p0           WAIT_FOR s2 TIMEOUT 6 EXECUTE 2';
 
59
SET DEBUG_SYNC='p0           WAIT_FOR s2 TIMEOUT 6           HIT_LIMIT 3';
 
60
SET DEBUG_SYNC='p0           WAIT_FOR s2 TIMEOUT 6';
 
61
SET DEBUG_SYNC='p0           WAIT_FOR s2           EXECUTE 2 HIT_LIMIT 3';
 
62
SET DEBUG_SYNC='p0           WAIT_FOR s2           EXECUTE 2';
 
63
SET DEBUG_SYNC='p0           WAIT_FOR s2                     HIT_LIMIT 3';
 
64
SET DEBUG_SYNC='p0           WAIT_FOR s2';
 
65
SET DEBUG_SYNC='p0                                           HIT_LIMIT 3';
 
66
SET DEBUG_SYNC='p0 CLEAR';
 
67
SET DEBUG_SYNC='p0 TEST';
 
68
SET DEBUG_SYNC='RESET';
 
69
 
 
70
#
 
71
# Syntax. Valid forms. Lower case.
 
72
#
 
73
set debug_sync='p0 signal s1 wait_for s2 timeout 6 execute 2 hit_limit 3';
 
74
set debug_sync='p0 signal s1 wait_for s2 timeout 6 execute 2';
 
75
set debug_sync='p0 signal s1 wait_for s2 timeout 6           hit_limit 3';
 
76
set debug_sync='p0 signal s1 wait_for s2 timeout 6';
 
77
set debug_sync='p0 signal s1 wait_for s2           execute 2 hit_limit 3';
 
78
set debug_sync='p0 signal s1 wait_for s2           execute 2';
 
79
set debug_sync='p0 signal s1 wait_for s2                     hit_limit 3';
 
80
set debug_sync='p0 signal s1 wait_for s2';
 
81
set debug_sync='p0 signal s1                       execute 2 hit_limit 3';
 
82
set debug_sync='p0 signal s1                       execute 2';
 
83
set debug_sync='p0 signal s1                                 hit_limit 3';
 
84
set debug_sync='p0 signal s1';
 
85
set debug_sync='p0           wait_for s2 timeout 6 execute 2 hit_limit 3';
 
86
set debug_sync='p0           wait_for s2 timeout 6 execute 2';
 
87
set debug_sync='p0           wait_for s2 timeout 6           hit_limit 3';
 
88
set debug_sync='p0           wait_for s2 timeout 6';
 
89
set debug_sync='p0           wait_for s2           execute 2 hit_limit 3';
 
90
set debug_sync='p0           wait_for s2           execute 2';
 
91
set debug_sync='p0           wait_for s2                     hit_limit 3';
 
92
set debug_sync='p0           wait_for s2';
 
93
set debug_sync='p0                                           hit_limit 3';
 
94
set debug_sync='p0 clear';
 
95
set debug_sync='p0 test';
 
96
set debug_sync='reset';
 
97
 
 
98
#
 
99
# Syntax. Valid forms. Line wrap, leading, mid, trailing space.
 
100
#
 
101
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6
 
102
                EXECUTE 2 HIT_LIMIT 3';
 
103
SET DEBUG_SYNC='   p0 SIGNAL s1 WAIT_FOR s2';
 
104
SET DEBUG_SYNC='p0    SIGNAL    s1    WAIT_FOR    s2';
 
105
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2   ';
 
106
SET DEBUG_SYNC='   p0 SIGNAL s1 WAIT_FOR s2   ';
 
107
SET DEBUG_SYNC='   p0    SIGNAL    s1    WAIT_FOR    s2   ';
 
108
 
 
109
#
 
110
# Syntax. Invalid forms.
 
111
#
 
112
--error ER_PARSE_ERROR
 
113
SET DEBUG_SYNC='';
 
114
--error ER_PARSE_ERROR
 
115
SET DEBUG_SYNC=' ';
 
116
--error ER_PARSE_ERROR
 
117
SET DEBUG_SYNC='p0';
 
118
--error ER_PARSE_ERROR
 
119
SET DEBUG_SYNC='p0                                          EXECUTE 2';
 
120
--error ER_PARSE_ERROR
 
121
SET DEBUG_SYNC='p0                                TIMEOUT 6 EXECUTE 2';
 
122
--error ER_PARSE_ERROR
 
123
SET DEBUG_SYNC='p0                                TIMEOUT 6';
 
124
--error ER_PARSE_ERROR
 
125
SET DEBUG_SYNC='p0 WAIT_FOR s2 SIGNAL s1';
 
126
--error ER_PARSE_ERROR
 
127
SET DEBUG_SYNC='p0 WAIT_FOR s2 SIGNAL s1           EXECUTE 2';
 
128
--error ER_PARSE_ERROR
 
129
SET DEBUG_SYNC='p0 WAIT_FOR s2 SIGNAL s1 TIMEOUT 6 EXECUTE 2';
 
130
--error ER_PARSE_ERROR
 
131
SET DEBUG_SYNC='p0 WAIT_FOR s2 SIGNAL s1 TIMEOUT 6';
 
132
--error ER_PARSE_ERROR
 
133
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 6 SIGNAL s1 EXECUTE 2';
 
134
--error ER_PARSE_ERROR
 
135
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 6 SIGNAL s1';
 
136
--error ER_PARSE_ERROR
 
137
SET DEBUG_SYNC='p0 TIMEOUT 6 WAIT_FOR s2 EXECUTE 2';
 
138
--error ER_PARSE_ERROR
 
139
SET DEBUG_SYNC='p0 TIMEOUT 6 WAIT_FOR s2';
 
140
--error ER_PARSE_ERROR
 
141
SET DEBUG_SYNC='p0                  SIGNAL s1 TIMEOUT 6 EXECUTE 2';
 
142
--error ER_PARSE_ERROR
 
143
SET DEBUG_SYNC='p0                  SIGNAL s1 TIMEOUT 6';
 
144
--error ER_PARSE_ERROR
 
145
SET DEBUG_SYNC='p0 EXECUTE 2 SIGNAL s1 TIMEOUT 6';
 
146
--error ER_PARSE_ERROR
 
147
SET DEBUG_SYNC='p0 TIMEOUT 6 SIGNAL s1';
 
148
--error ER_PARSE_ERROR
 
149
SET DEBUG_SYNC='p0 EXECUTE 2 TIMEOUT 6 SIGNAL s1';
 
150
--error ER_PARSE_ERROR
 
151
SET DEBUG_SYNC='p0 CLEAR HIT_LIMIT 3';
 
152
--error ER_PARSE_ERROR
 
153
SET DEBUG_SYNC='CLEAR';
 
154
--error ER_PARSE_ERROR
 
155
SET DEBUG_SYNC='p0 CLEAR p0';
 
156
--error ER_PARSE_ERROR
 
157
SET DEBUG_SYNC='TEST';
 
158
--error ER_PARSE_ERROR
 
159
SET DEBUG_SYNC='p0 TEST p0';
 
160
--error ER_PARSE_ERROR
 
161
SET DEBUG_SYNC='p0 RESET';
 
162
--error ER_PARSE_ERROR
 
163
SET DEBUG_SYNC='RESET p0';
 
164
--error ER_PARSE_ERROR
 
165
SET DEBUG_SYNC='p0 RESET p0';
 
166
--error ER_PARSE_ERROR
 
167
SET DEBUG_SYNC='p0 SIGNAL ';
 
168
--error ER_PARSE_ERROR
 
169
SET DEBUG_SYNC='p0 WAIT_FOR ';
 
170
--error ER_PARSE_ERROR
 
171
SET DEBUG_SYNC='p0 SIGNAL s1 EXECUTE ';
 
172
 
 
173
#
 
174
# Syntax. Invalid keywords used.
 
175
#
 
176
--error ER_UNKNOWN_SYSTEM_VARIABLE
 
177
SET DEBUG_SYNCx='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIT 3';
 
178
--error ER_PARSE_ERROR
 
179
SET DEBUG_SYNC='p0 SIGNAx s1 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIT 3';
 
180
--error ER_PARSE_ERROR
 
181
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOx s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIT 3';
 
182
--error ER_PARSE_ERROR
 
183
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUx 0 EXECUTE 2 HIT_LIMIT 3';
 
184
--error ER_PARSE_ERROR
 
185
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 EXECUTx 2 HIT_LIMIT 3';
 
186
--error ER_PARSE_ERROR
 
187
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIx 3';
 
188
--error ER_PARSE_ERROR
 
189
SET DEBUG_SYNC='p0 CLEARx';
 
190
--error ER_PARSE_ERROR
 
191
SET DEBUG_SYNC='p0 TESTx';
 
192
--error ER_PARSE_ERROR
 
193
SET DEBUG_SYNC='RESETx';
 
194
 
 
195
#
 
196
# Syntax. Invalid numbers. Decimal only.
 
197
#
 
198
--error ER_PARSE_ERROR
 
199
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 0x6 EXECUTE 2 HIT_LIMIT 3';
 
200
--error ER_PARSE_ERROR
 
201
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 6 EXECUTE 0x2 HIT_LIMIT 3';
 
202
--error ER_PARSE_ERROR
 
203
SET DEBUG_SYNC='p0 WAIT_FOR s2 TIMEOUT 7 EXECUTE 2 HIT_LIMIT 0x3';
 
204
 
 
205
#
 
206
# Syntax. Invalid value type.
 
207
#
 
208
--error ER_WRONG_TYPE_FOR_VAR
 
209
SET DEBUG_SYNC= 7;
 
210
 
 
211
#
 
212
# Syntax. DEBUG_SYNC is a SESSION-only variable.
 
213
#
 
214
--error ER_LOCAL_VARIABLE
 
215
SET GLOBAL DEBUG_SYNC= 'p0 CLEAR';
 
216
 
 
217
#
 
218
# Syntax. The variable value does not need to be a string literal.
 
219
#
 
220
SET @myvar= 'now SIGNAL from_myvar';
 
221
SET DEBUG_SYNC= @myvar;
 
222
SHOW VARIABLES LIKE 'DEBUG_SYNC';
 
223
#
 
224
SET DEBUG_SYNC= LEFT('now SIGNAL from_function_cut_here', 24);
 
225
SHOW VARIABLES LIKE 'DEBUG_SYNC';
 
226
 
 
227
#
 
228
# Functional tests.
 
229
#
 
230
# NOTE: There is the special synchronization point 'now'. It is placed
 
231
#       immediately after setting of the DEBUG_SYNC variable.
 
232
#       So it is executed before the SET statement ends.
 
233
#
 
234
# NOTE: There is only one global signal (say "signal post" or "flag mast").
 
235
#       A SIGNAL action writes its signal into it ("sets a flag").
 
236
#       The signal persists until explicitly overwritten.
 
237
#       To avoid confusion for later tests, it is recommended to clear
 
238
#       the signal by signalling "empty" ("setting the 'empty' flag"):
 
239
#       SET DEBUG_SYNC= 'now SIGNAL empty';
 
240
#       Preferably you can reset the whole facility with:
 
241
#       SET DEBUG_SYNC= 'RESET';
 
242
#       The signal is then '' (really empty) which connot be done otherwise.
 
243
#
 
244
 
 
245
#
 
246
# Time out immediately. This gives just a warning.
 
247
#
 
248
SET DEBUG_SYNC= 'now SIGNAL something';
 
249
SHOW VARIABLES LIKE 'DEBUG_SYNC';
 
250
# Suppress warning number
 
251
--replace_column 2 ####
 
252
SET DEBUG_SYNC= 'now WAIT_FOR nothing TIMEOUT 0';
 
253
#
 
254
# If signal is present already, TIMEOUT 0 does not give a warning.
 
255
#
 
256
SET DEBUG_SYNC= 'now SIGNAL nothing';
 
257
SHOW VARIABLES LIKE 'DEBUG_SYNC';
 
258
SET DEBUG_SYNC= 'now WAIT_FOR nothing TIMEOUT 0';
 
259
 
 
260
#
 
261
# EXECUTE 0 is effectively a no-op.
 
262
#
 
263
SET DEBUG_SYNC= 'now SIGNAL something EXECUTE 0';
 
264
SHOW VARIABLES LIKE 'DEBUG_SYNC';
 
265
SET DEBUG_SYNC= 'now WAIT_FOR anotherthing TIMEOUT 0 EXECUTE 0';
 
266
 
 
267
#
 
268
# Run into HIT_LIMIT. This gives an error.
 
269
#
 
270
--error ER_DEBUG_SYNC_HIT_LIMIT
 
271
SET DEBUG_SYNC= 'now HIT_LIMIT 1';
 
272
 
 
273
#
 
274
# Many actions. Watch the array growing and shrinking in the debug trace:
 
275
# egrep 'query:|debug_sync_action:' mysql-test/var/log/master.trace
 
276
#
 
277
SET DEBUG_SYNC= 'RESET';
 
278
SHOW VARIABLES LIKE 'DEBUG_SYNC';
 
279
SET DEBUG_SYNC= 'p1abcd   SIGNAL s1 EXECUTE 2';
 
280
SET DEBUG_SYNC= 'p2abc    SIGNAL s2 EXECUTE 2';
 
281
SET DEBUG_SYNC= 'p9abcdef SIGNAL s9 EXECUTE 2';
 
282
SET DEBUG_SYNC= 'p4a      SIGNAL s4 EXECUTE 2';
 
283
SET DEBUG_SYNC= 'p5abcde  SIGNAL s5 EXECUTE 2';
 
284
SET DEBUG_SYNC= 'p6ab     SIGNAL s6 EXECUTE 2';
 
285
SET DEBUG_SYNC= 'p7       SIGNAL s7 EXECUTE 2';
 
286
SET DEBUG_SYNC= 'p8abcdef SIGNAL s8 EXECUTE 2';
 
287
SET DEBUG_SYNC= 'p3abcdef SIGNAL s3 EXECUTE 2';
 
288
#
 
289
# Execute some actions to show they exist. Each sets a distinct signal.
 
290
#
 
291
SET DEBUG_SYNC= 'p4a      TEST';
 
292
SHOW VARIABLES LIKE 'DEBUG_SYNC';
 
293
SET DEBUG_SYNC= 'p1abcd   TEST';
 
294
SHOW VARIABLES LIKE 'DEBUG_SYNC';
 
295
SET DEBUG_SYNC= 'p7       TEST';
 
296
SHOW VARIABLES LIKE 'DEBUG_SYNC';
 
297
SET DEBUG_SYNC= 'p9abcdef TEST';
 
298
SHOW VARIABLES LIKE 'DEBUG_SYNC';
 
299
SET DEBUG_SYNC= 'p3abcdef TEST';
 
300
SHOW VARIABLES LIKE 'DEBUG_SYNC';
 
301
#
 
302
# Clear the actions.
 
303
#
 
304
SET DEBUG_SYNC= 'p1abcd   CLEAR';
 
305
SET DEBUG_SYNC= 'p2abc    CLEAR';
 
306
SET DEBUG_SYNC= 'p5abcde  CLEAR';
 
307
SET DEBUG_SYNC= 'p6ab     CLEAR';
 
308
SET DEBUG_SYNC= 'p8abcdef CLEAR';
 
309
SET DEBUG_SYNC= 'p9abcdef CLEAR';
 
310
SET DEBUG_SYNC= 'p3abcdef CLEAR';
 
311
SET DEBUG_SYNC= 'p4a      CLEAR';
 
312
SET DEBUG_SYNC= 'p7       CLEAR';
 
313
#
 
314
# Execute some actions to show they have gone.
 
315
#
 
316
SET DEBUG_SYNC= 'p1abcd   TEST';
 
317
SHOW VARIABLES LIKE 'DEBUG_SYNC';
 
318
SET DEBUG_SYNC= 'p7       TEST';
 
319
SHOW VARIABLES LIKE 'DEBUG_SYNC';
 
320
SET DEBUG_SYNC= 'p9abcdef TEST';
 
321
SHOW VARIABLES LIKE 'DEBUG_SYNC';
 
322
#
 
323
# Now cleanup. Actions are clear already, but signal needs to be cleared.
 
324
#
 
325
SET DEBUG_SYNC= 'RESET';
 
326
SHOW VARIABLES LIKE 'DEBUG_SYNC';
 
327
 
 
328
#
 
329
# Facility requires SUPER privilege.
 
330
#
 
331
CREATE USER mysqltest_1@localhost;
 
332
GRANT SUPER ON *.* TO mysqltest_1@localhost;
 
333
--echo connection con1, mysqltest_1
 
334
connect (con1,localhost,mysqltest_1,,);
 
335
SET DEBUG_SYNC= 'RESET';
 
336
disconnect con1;
 
337
--echo connection default
 
338
connection default;
 
339
DROP USER mysqltest_1@localhost;
 
340
#
 
341
CREATE USER mysqltest_2@localhost;
 
342
GRANT ALL ON *.* TO mysqltest_2@localhost;
 
343
REVOKE SUPER ON *.* FROM mysqltest_2@localhost;
 
344
--echo connection con1, mysqltest_2
 
345
connect (con1,localhost,mysqltest_2,,);
 
346
--error ER_SPECIFIC_ACCESS_DENIED_ERROR
 
347
SET DEBUG_SYNC= 'RESET';
 
348
disconnect con1;
 
349
--echo connection default
 
350
connection default;
 
351
DROP USER mysqltest_2@localhost;
 
352
 
 
353
#
 
354
# Example 1.
 
355
#
 
356
# Preparative cleanup.
 
357
--disable_warnings
 
358
SET DEBUG_SYNC= 'RESET';
 
359
DROP TABLE IF EXISTS t1;
 
360
--enable_warnings
 
361
#
 
362
# Test.
 
363
CREATE TABLE t1 (c1 INT);
 
364
    --echo connection con1
 
365
    connect (con1,localhost,root,,);
 
366
    SET DEBUG_SYNC= 'before_lock_tables_takes_lock
 
367
      SIGNAL opened WAIT_FOR flushed';
 
368
    send INSERT INTO t1 VALUES(1);
 
369
--echo connection default
 
370
connection default;
 
371
SET DEBUG_SYNC= 'now WAIT_FOR opened';
 
372
SET DEBUG_SYNC= 'after_flush_unlock SIGNAL flushed';
 
373
FLUSH TABLE t1;
 
374
    --echo connection con1
 
375
    connection con1;
 
376
    reap;
 
377
    disconnect con1;
 
378
--echo connection default
 
379
connection default;
 
380
DROP TABLE t1;
 
381
 
 
382
#
 
383
# Example 2.
 
384
#
 
385
# Preparative cleanup.
 
386
--disable_warnings
 
387
SET DEBUG_SYNC= 'RESET';
 
388
DROP TABLE IF EXISTS t1;
 
389
--enable_warnings
 
390
#
 
391
# Test.
 
392
CREATE TABLE t1 (c1 INT);
 
393
LOCK TABLE t1 WRITE;
 
394
    --echo connection con1
 
395
    connect (con1,localhost,root,,);
 
396
    # Retain action after use. First used by general_log.
 
397
    SET DEBUG_SYNC= 'wait_for_lock SIGNAL locked EXECUTE 2';
 
398
    send INSERT INTO t1 VALUES (1);
 
399
--echo connection default
 
400
connection default;
 
401
# Wait until INSERT waits for lock.
 
402
SET DEBUG_SYNC= 'now WAIT_FOR locked';
 
403
# let INSERT continue.
 
404
UNLOCK TABLES;
 
405
    --echo connection con1
 
406
    connection con1;
 
407
    --echo retrieve INSERT result.
 
408
    reap;
 
409
    disconnect con1;
 
410
--echo connection default
 
411
connection default;
 
412
DROP TABLE t1;
 
413
 
 
414
#
 
415
# Cleanup after test case.
 
416
# Otherwise signal would contain 'flushed' here,
 
417
# which could confuse the next test.
 
418
#
 
419
SET DEBUG_SYNC= 'RESET';
 
420