Annotation of embedaddon/php/ext/mysqli/tests/mysqli_no_reconnect.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: Trying implicit reconnect after wait_timeout and KILL using mysqli_ping()
3: --SKIPIF--
4: <?php
5: require_once('skipif.inc');
6: require_once('skipifemb.inc');
7: require_once('skipifconnectfailure.inc');
8: ?>
9: --INI--
10: mysqli.reconnect=0
11: --FILE--
12: <?php
13: require_once("connect.inc");
14: require_once("table.inc");
15:
16: if (!$link2 = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
17: printf("[001] Cannot create second database connection, [%d] %s\n",
18: mysqli_connect_errno(), mysqli_connect_error());
19:
20: $thread_id_timeout = mysqli_thread_id($link);
21: $thread_id_control = mysqli_thread_id($link2);
22:
23: if (!$res = mysqli_query($link2, "SHOW FULL PROCESSLIST"))
24: printf("[002] Cannot get full processlist, [%d] %s\n",
25: mysqli_errno($link2), mysqli_error($link));
26:
27: $running_threads = array();
28: while ($row = mysqli_fetch_assoc($res))
29: $running_threads[$row['Id']] = $row;
30: mysqli_free_result($res);
31:
32: if (!isset($running_threads[$thread_id_timeout]) ||
33: !isset($running_threads[$thread_id_control]))
34: printf("[003] Processlist is borked, [%d] %s\n",
35: mysqli_errno($link2), mysqli_error($link));
36:
37: if (!mysqli_query($link, "SET SESSION wait_timeout = 2"))
38: printf("[004] Cannot set wait_timeout, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
39:
40: if (!$res = mysqli_query($link, "SHOW VARIABLES LIKE 'wait_timeout'"))
41: printf("[005] Cannot check if wait_timeout has been set, [%d] %s\n",
42: mysqli_errno($link), mysqli_error($link));
43:
44: if (!$row = mysqli_fetch_assoc($res))
45: printf("[006] Cannot get wait_timeout, [%d] %s\n",
46: mysqli_errno($link), mysqli_error($link));
47: mysqli_free_result($res);
48:
49: if ($row['Value'] != 2)
50: printf("[007] Failed setting the wait_timeout, test will not work, [%d] %s\n",
51: mysqli_errno($link), mysqli_error($link));
52:
53: // after 2+ seconds the server should kill the connection
54: sleep(3);
55:
56: if (!$res = mysqli_query($link2, "SHOW FULL PROCESSLIST"))
57: printf("[008] Cannot get full processlist, [%d] %s\n",
58: mysqli_errno($link2), mysqli_error($link));
59:
60: $running_threads = array();
61: while ($row = mysqli_fetch_assoc($res))
62: $running_threads[$row['Id']] = $row;
63: mysqli_free_result($res);
64:
65: if (isset($running_threads[$thread_id_timeout]))
66: printf("[009] Server should have killed the timeout connection, [%d] %s\n",
67: mysqli_errno($link2), mysqli_error($link));
68:
69: if (false !== @mysqli_ping($link))
70: printf("[010] Reconnect should not have happened");
71:
72: if ($res = @mysqli_query($link, "SELECT DATABASE() as _dbname"))
73: printf("[011] Executing a query should not be possible, connection should be closed, [%d] %s\n",
74: mysqli_errno($link), mysqli_error($link));
75:
76: if (!$link = @my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
77: printf("[012] Cannot create database connection, [%d] %s\n",
78: mysqli_connect_errno(), mysqli_connect_error());
79:
80: $thread_id_timeout = mysqli_thread_id($link);
81: /*
82: Don't test for the mysqli_query() return value here.
83: It is undefined if the server replies to the query and how.
84: For example, it seems that on Linux when connecting to MySQL 5.1,
85: the server always manages to send a full a reply. Whereas MySQl 5.5
86: may not. The behaviour is undefined. Any return value is fine.
87: */
88: if ($IS_MYSQLND) {
89: /*
90: mysqlnd is a bit more verbose than libmysql. mysqlnd should print:
91: Warning: mysqli_query(): MySQL server has gone away in %s on line %d
92:
93: Warning: mysqli_query(): Error reading result set's header in %d on line %d
94: */
95: @mysqli_query($link, sprintf('KILL %d', $thread_id_timeout));
96: } else {
97: mysqli_query($link, sprintf('KILL %d', $thread_id_timeout));
98: }
99: // Give the server a second to really kill the other thread...
100: sleep(1);
101:
102: if (!$res = mysqli_query($link2, "SHOW FULL PROCESSLIST"))
103: printf("[014] Cannot get full processlist, [%d] %s\n",
104: mysqli_errno($link2), mysqli_error($link));
105:
106: $running_threads = array();
107: while ($row = mysqli_fetch_assoc($res))
108: $running_threads[$row['Id']] = $row;
109: mysqli_free_result($res);
110:
111: if (isset($running_threads[$thread_id_timeout]) ||
112: !isset($running_threads[$thread_id_control]))
113: printf("[015] Processlist is borked, [%d] %s\n",
114: mysqli_errno($link2), mysqli_error($link));
115:
116: if (false !== ($tmp = @mysqli_ping($link)))
117: printf("[016] Expecting boolean/false got %s/%s\n", gettype($tmp), $tmp);
118:
119: if ($res = @mysqli_query($link, "SELECT DATABASE() as _dbname"))
120: printf("[017] Running a query should not be possible, connection should be gone, [%d] %s\n",
121: mysqli_errno($link), mysqli_error($link));
122:
123: mysqli_close($link2);
124: print "done!";
125: ?>
126: --EXPECTF--
127: done!
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>