Annotation of embedaddon/php/ext/mysqli/tests/mysqli_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: if (stristr(mysqli_get_client_info(), 'mysqlnd'))
9: die("skip: test for libmysql");
10: ?>
11: --INI--
12: mysqli.reconnect=1
13: --FILE--
14: <?php
15: require_once("connect.inc");
16: require_once("table.inc");
17:
18: if (!$link2 = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
19: printf("[001] Cannot create second database connection, [%d] %s\n",
20: mysqli_connect_errno(), mysqli_connect_error());
21:
22: $thread_id_timeout = mysqli_thread_id($link);
23: $thread_id_control = mysqli_thread_id($link2);
24:
25: if (!$res = mysqli_query($link2, "SHOW FULL PROCESSLIST"))
26: printf("[002] Cannot get full processlist, [%d] %s\n",
27: mysqli_errno($link2), mysqli_error($link));
28:
29: $running_threads = array();
30: while ($row = mysqli_fetch_assoc($res))
31: $running_threads[$row['Id']] = $row;
32: mysqli_free_result($res);
33:
34: if (!isset($running_threads[$thread_id_timeout]) ||
35: !isset($running_threads[$thread_id_control]))
36: printf("[003] Processlist is borked, [%d] %s\n",
37: mysqli_errno($link2), mysqli_error($link));
38:
39: if (!mysqli_query($link, "SET SESSION wait_timeout = 2"))
40: printf("[004] Cannot set wait_timeout, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
41:
42: if (!$res = mysqli_query($link, "SHOW VARIABLES LIKE 'wait_timeout'"))
43: printf("[005] Cannot check if wait_timeout has been set, [%d] %s\n",
44: mysqli_errno($link), mysqli_error($link));
45:
46: if (!$row = mysqli_fetch_assoc($res))
47: printf("[006] Cannot get wait_timeout, [%d] %s\n",
48: mysqli_errno($link), mysqli_error($link));
49: mysqli_free_result($res);
50:
51: if ($row['Value'] != 2)
52: printf("[007] Failed setting the wait_timeout, test will not work, [%d] %s\n",
53: mysqli_errno($link), mysqli_error($link));
54:
55: // after 2+ seconds the server should kill the connection
56: sleep(3);
57:
58: if (!$res = mysqli_query($link2, "SHOW FULL PROCESSLIST"))
59: printf("[008] Cannot get full processlist, [%d] %s\n",
60: mysqli_errno($link2), mysqli_error($link));
61:
62: $running_threads = array();
63: while ($row = mysqli_fetch_assoc($res))
64: $running_threads[$row['Id']] = $row;
65: mysqli_free_result($res);
66:
67: if (isset($running_threads[$thread_id_timeout]))
68: printf("[009] Server should have killed the timeout connection, [%d] %s\n",
69: mysqli_errno($link2), mysqli_error($link));
70:
71: if (true !== mysqli_ping($link))
72: printf("[010] Reconnect should have happened");
73:
74: if (!$res = mysqli_query($link, "SELECT DATABASE() as _dbname"))
75: printf("[011] Cannot get database name, [%d] %s\n",
76: mysqli_errno($link), mysqli_error($link));
77:
78: if (!$row = mysqli_fetch_assoc($res))
79: printf("[012] Cannot get database name, [%d] %s\n",
80: mysqli_errno($link), mysqli_error($link));
81:
82: mysqli_free_result($res);
83: if ($row['_dbname'] != $db)
84: printf("[013] Connection should has been made to DB/Schema '%s', expecting '%s', [%d] %s\n",
85: $row['_dbname'], $db, mysqli_errno($link), mysqli_error($link));
86:
87: // ... and now we try KILL
88: $thread_id_timeout = mysqli_thread_id($link);
89:
90: if (!mysqli_query($link2, sprintf('KILL %d', $thread_id_timeout)))
91: printf("[014] Cannot KILL timeout connection, [%d] %s\n", mysqli_errno($link2), mysqli_error($link2));
92: // Give the server a second to really kill the other thread...
93: sleep(1);
94:
95: if (!$res = mysqli_query($link2, "SHOW FULL PROCESSLIST"))
96: printf("[015] Cannot get full processlist, [%d] %s\n",
97: mysqli_errno($link2), mysqli_error($link));
98:
99: $running_threads = array();
100: while ($row = mysqli_fetch_assoc($res))
101: $running_threads[$row['Id']] = $row;
102: mysqli_free_result($res);
103:
104: if (isset($running_threads[$thread_id_timeout]) ||
105: !isset($running_threads[$thread_id_control]))
106: printf("[016] Processlist is borked, [%d] %s\n",
107: mysqli_errno($link2), mysqli_error($link));
108:
109: if (true !== ($tmp = mysqli_ping($link)))
110: printf("[017] Expecting boolean/true got %s/%s\n", gettype($tmp), $tmp);
111:
112: if (!$res = mysqli_query($link, "SELECT DATABASE() as _dbname"))
113: printf("[018] Cannot get database name, [%d] %s\n",
114: mysqli_errno($link), mysqli_error($link));
115:
116: if (!$row = mysqli_fetch_assoc($res))
117: printf("[019] Cannot get database name, [%d] %s\n",
118: mysqli_errno($link), mysqli_error($link));
119:
120: mysqli_free_result($res);
121: if ($row['_dbname'] != $db)
122: printf("[020] Connection should has been made to DB/Schema '%s', expecting '%s', [%d] %s\n",
123: $row['_dbname'], $db, mysqli_errno($link), mysqli_error($link));
124:
125: mysqli_close($link);
126: mysqli_close($link2);
127: print "done!";
128: ?>
129: --EXPECTF--
130: done!
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>