Annotation of embedaddon/php/ext/mysqli/tests/mysqli_pconn_max_links.phpt, revision 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>