Annotation of embedaddon/php/ext/mysqli/tests/mysqli_pconn_max_links.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: Persistent connections and mysqli.max_links
3: --SKIPIF--
4: <?php
5: require_once('skipif.inc');
6: require_once('skipifemb.inc');
7: require_once('skipifconnectfailure.inc');
8: require_once('table.inc');
9:
10: mysqli_query($link, 'DROP USER pcontest');
11: mysqli_query($link, 'DROP USER pcontest@localhost');
12:
13: if (!mysqli_query($link, 'CREATE USER pcontest@"%" IDENTIFIED BY "pcontest"') ||
14: !mysqli_query($link, 'CREATE USER pcontest@localhost IDENTIFIED BY "pcontest"')) {
15: printf("skip Cannot create second DB user [%d] %s", mysqli_errno($link), mysqli_error($link));
16: mysqli_close($link);
17: die("skip CREATE USER failed");
18: }
19:
20: // we might be able to specify the host using CURRENT_USER(), but...
21: if (!mysqli_query($link, sprintf("GRANT SELECT ON TABLE %s.test TO pcontest@'%%'", $db)) ||
22: !mysqli_query($link, sprintf("GRANT SELECT ON TABLE %s.test TO pcontest@'localhost'", $db))) {
23: printf("skip Cannot GRANT SELECT to second DB user [%d] %s", mysqli_errno($link), mysqli_error($link));
24: mysqli_query($link, 'REVOKE ALL PRIVILEGES, GRANT OPTION FROM pcontest');
25: mysqli_query($link, 'REVOKE ALL PRIVILEGES, GRANT OPTION FROM pcontest@localhost');
26: mysqli_query($link, 'DROP USER pcontest@localhost');
27: mysqli_query($link, 'DROP USER pcontest');
28: mysqli_close($link);
29: die("skip GRANT failed");
30: }
31:
32: if (!($link_pcontest = @my_mysqli_connect($host, 'pcontest', 'pcontest', $db, $port, $socket))) {
33: mysqli_query($link, 'REVOKE ALL PRIVILEGES, GRANT OPTION FROM pcontest');
34: mysqli_query($link, 'REVOKE ALL PRIVILEGES, GRANT OPTION FROM pcontest@localhost');
35: mysqli_query($link, 'DROP USER pcontest@localhost');
36: mysqli_query($link, 'DROP USER pcontest');
37: mysqli_close($link);
38: die("skip CONNECT using new user failed");
39: }
40: mysqli_close($link);
41: ?>
42: --INI--
43: mysqli.allow_persistent=1
44: mysqli.max_persistent=2
45: --FILE--
46: <?php
47: require_once("connect.inc");
48: require_once('table.inc');
49:
50:
51: if (!mysqli_query($link, 'DROP USER pcontest') ||
52: !mysqli_query($link, 'DROP USER pcontest@localhost') ||
53: !mysqli_query($link, 'CREATE USER pcontest@"%" IDENTIFIED BY "pcontest"') ||
54: !mysqli_query($link, 'CREATE USER pcontest@localhost IDENTIFIED BY "pcontest"') ||
55: !mysqli_query($link, sprintf("GRANT SELECT ON TABLE %s.test TO pcontest@'%%'", $db)) ||
56: !mysqli_query($link, sprintf("GRANT SELECT ON TABLE %s.test TO pcontest@'localhost'", $db))) {
57: printf("[000] Init failed, [%d] %s\n",
58: mysqli_errno($plink), mysqli_error($plink));
59: }
60:
61: if (!$plink = my_mysqli_connect('p:' . $host, 'pcontest', 'pcontest', $db, $port, $socket))
62: printf("[001] Cannot connect using the second DB user created during SKIPIF, [%d] %s\n",
63: mysqli_connect_errno(), mysqli_connect_error());
64:
65: ob_start();
66: phpinfo();
67: $phpinfo = strip_tags(ob_get_contents());
68: ob_end_clean();
69:
70: $phpinfo = substr($phpinfo, strpos($phpinfo, 'MysqlI Support => enabled'), 500);
71: if (!preg_match('@Active Persistent Links\s+=>\s+(\d+)@ismU', $phpinfo, $matches))
72: printf("[002] Cannot get # active persistent links from phpinfo()\n");
73: $num_plinks = $matches[1];
74:
75: if (!$res = mysqli_query($plink, 'SELECT id, label FROM test WHERE id = 1'))
76: printf("[003] Cannot run query on persistent connection of second DB user, [%d] %s\n",
77: mysqli_errno($plink), mysqli_error($plink));
78:
79: if (!$row = mysqli_fetch_assoc($res))
80: printf("[004] Cannot run fetch result, [%d] %s\n",
81: mysqli_errno($plink), mysqli_error($plink));
82: mysqli_free_result($res);
83: var_dump($row);
84:
85: // change the password for the second DB user and kill the persistent connection
86: if (!mysqli_query($link, 'SET PASSWORD FOR pcontest = PASSWORD("newpass")') ||
87: !mysqli_query($link, 'FLUSH PRIVILEGES'))
88: printf("[005] Cannot change PW of second DB user, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
89:
90: // change the password for the second DB user and kill the persistent connection
91: if (!mysqli_query($link, 'SET PASSWORD FOR pcontest@localhost = PASSWORD("newpass")') ||
92: !mysqli_query($link, 'FLUSH PRIVILEGES'))
93: printf("[006] Cannot change PW of second DB user, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
94:
95: // persistent connections cannot be closed but only be killed
96: $pthread_id = mysqli_thread_id($plink);
97: if (!mysqli_query($link, sprintf('KILL %d', $pthread_id)))
98: printf("[007] Cannot KILL persistent connection of second DB user, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
99: // give the server a second to really kill the thread
100: sleep(1);
101:
102: if (!$res = mysqli_query($link, "SHOW FULL PROCESSLIST"))
103: printf("[008] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
104:
105: $running_threads = array();
106: while ($row = mysqli_fetch_assoc($res))
107: $running_threads[$row['Id']] = $row;
108: mysqli_free_result($res);
109:
110: if (isset($running_threads[$pthread_id]))
111: printf("[009] Persistent connection has not been killed\n");
112:
113: // this fails and we have 0 (<= $num_plinks) connections
114: if ($plink = @my_mysqli_connect('p:' . $host, 'pcontest', 'pcontest', $db, $port, $socket))
115: printf("[010] Can connect using the old password, [%d] %s\n",
116: mysqli_connect_errno($link), mysqli_connect_error($link));
117:
118: ob_start();
119: phpinfo();
120: $phpinfo = strip_tags(ob_get_contents());
121: ob_end_clean();
122: $phpinfo = substr($phpinfo, stripos($phpinfo, 'MysqlI Support => enabled'), 500);
123: if (!preg_match('@Active Persistent Links\s+=>\s+(\d+)@ismU', $phpinfo, $matches))
124: printf("[010] Cannot get # of active persistent links from phpinfo()\n");
125:
126: $num_plinks_kill = $matches[1];
127: if ($num_plinks_kill > $num_plinks)
128: printf("[011] Expecting Active Persistent Links < %d, got %d\n", $num_plinks, $num_plinks_kill);
129:
130: if (!$plink = my_mysqli_connect('p:' . $host, 'pcontest', 'newpass', $db, $port, $socket))
131: printf("[012] Cannot connect using the new password, [%d] %s\n",
132: mysqli_connect_errno(), mysqli_connect_error());
133:
134: if (!$res = mysqli_query($plink, 'SELECT id, label FROM test WHERE id = 1'))
135: printf("[013] Cannot run query on persistent connection of second DB user, [%d] %s\n",
136: mysqli_errno($plink), mysqli_error($plink));
137:
138: if (!$row = mysqli_fetch_assoc($res))
139: printf("[014] Cannot run fetch result, [%d] %s\n",
140: mysqli_errno($plink), mysqli_error($plink));
141: mysqli_free_result($res);
142: var_dump($row);
143:
144: if ($plink2 = my_mysqli_connect('p:' . $host, 'pcontest', 'newpass', $db, $port, $socket))
145: printf("[015] Can open more persistent connections than allowed, [%d] %s\n",
146: mysqli_connect_errno(), mysqli_connect_error());
147:
148: ob_start();
149: phpinfo();
150: $phpinfo = strip_tags(ob_get_contents());
151: ob_end_clean();
152: $phpinfo = substr($phpinfo, stripos($phpinfo, 'MysqlI Support => enabled'), 500);
153: if (!preg_match('@Active Persistent Links\s+=>\s+(\d+)@ismU', $phpinfo, $matches))
154: printf("[016] Cannot get # of active persistent links from phpinfo()\n");
155:
156: $num_plinks = $matches[1];
157: if ($num_plinks > (int)ini_get('mysqli.max_persistent'))
158: printf("[017] mysqli.max_persistent=%d allows %d open connections!\n", ini_get('mysqli.max_persistent'),$num_plinks);
159:
160: mysqli_query($link, 'REVOKE ALL PRIVILEGES, GRANT OPTION FROM pcontest');
161: mysqli_query($link, 'DROP USER pcontest');
162: mysqli_close($link);
163: print "done!";
164: ?>
165: --CLEAN--
166: <?php
167: require_once("connect.inc");
168: if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
169: printf("[c001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
170:
171: if (!mysqli_query($link, "DROP TABLE IF EXISTS test"))
172: printf("[c002] Cannot drop table, [%d] %s\n", mysqli_errno($link), mysqli_error($link));
173:
174: mysqli_query($link, 'REVOKE ALL PRIVILEGES, GRANT OPTION FROM pcontest');
175: mysqli_query($link, 'REVOKE ALL PRIVILEGES, GRANT OPTION FROM pcontest@localhost');
176: mysqli_query($link, 'DROP USER pcontest@localhost');
177: mysqli_query($link, 'DROP USER pcontest');
178:
179: mysqli_close($link);
180: ?>
181: --EXPECTF--
182: array(2) {
183: [%u|b%"id"]=>
184: %unicode|string%(1) "1"
185: [%u|b%"label"]=>
186: %unicode|string%(1) "a"
187: }
188: array(2) {
189: [%u|b%"id"]=>
190: %unicode|string%(1) "1"
191: [%u|b%"label"]=>
192: %unicode|string%(1) "a"
193: }
194:
195: Warning: %s: Too many open persistent links (%d) in %s on line %d
196: done!
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>