diff options
Diffstat (limited to 'ext/mysql/tests/mysql_max_persistent.phpt')
-rw-r--r-- | ext/mysql/tests/mysql_max_persistent.phpt | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/ext/mysql/tests/mysql_max_persistent.phpt b/ext/mysql/tests/mysql_max_persistent.phpt new file mode 100644 index 0000000..ac35cd1 --- /dev/null +++ b/ext/mysql/tests/mysql_max_persistent.phpt @@ -0,0 +1,99 @@ +--TEST-- +mysql_[p]connect() - max_links/max_persistent +--SKIPIF-- +<?php +require_once('skipif.inc'); +require_once('skipifconnectfailure.inc'); +require_once('table.inc'); + +mysql_query('DROP USER pcontest', $link); +if (!mysql_query('CREATE USER pcontest IDENTIFIED BY "pcontest"', $link)) { + printf("skip Cannot create second DB user [%d] %s", mysql_errno($link), mysql_error($link)); + mysql_close($link); + die(); +} + +// we might be able to specify the host using CURRENT_USER(), but... +if (!mysql_query(sprintf("GRANT SELECT ON TABLE %s.test TO pcontest@'%%'", $db), $link)) { + printf("skip Cannot GRANT SELECT to second DB user [%d] %s", mysql_errno($link), mysql_error($link)); + mysql_query('REVOKE ALL PRIVILEGES, GRANT OPTION FROM pcontest', $link); + mysql_query('DROP USER pcontest', $link); + mysql_close($link); + die(); +} +mysql_close($link); +?> +--INI-- +mysql.max_links=2 +mysql.allow_persistent=1 +mysql.max_persistent=1 +--FILE-- +<?php +require_once('connect.inc'); + +function my_connect($offset, $host, $user, $passwd, $db, $port, $socket) { + if ($socket) + $host = sprintf("%s:%s", $host, $socket); + else if ($port) + $host = sprintf("%s:%s", $host, $port); + + + $link = mysql_pconnect($host, $user, $passwd); + if (!$link) { + printf("[%03d] Cannot connect using host '%s', user '%s', password '****', [%d] %s\n", + $offset, $host, $user, $passwd, + mysql_errno(), mysql_error()); + return false; + } + + if (!mysql_select_db($db, $link)) + return false; + + return $link; +} + +$links = array(); + +// try to open 2 links +$links[0] = my_connect(10, $host, $user, $passwd, $db, $port, $socket); +$links[1] = my_connect(20, $host, 'pcontest', 'pcontest', $db, $port, $socket); +if (false !== $links[1]) + printf("[030] Last connection should not have been allowed!\n"); + +// free some links but let index 1 remain +unset($links[1]); +mysql_close($links[0]); +unset($links[0]); + +// should be allowed -> only open connection +$links[0] = my_connect(40, $host, $user, $passwd, $db, $port, $socket); +var_dump($links); + +mysql_query('REVOKE ALL PRIVILEGES, GRANT OPTION FROM pcontest', $links[0]); +mysql_query('DROP USER pcontest', $links[0]); + +mysql_close($links[0]); +print "done!\n"; +?> +--CLEAN-- +<?php +// connect + select_db +require_once("connect.inc"); +if (!$link = my_mysql_connect($host, $user, $passwd, $db, $port, $socket)) { + printf("[c001] Cannot connect to the server using host=%s/%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n", + $host, $myhost, $user, $db, $port, $socket); +} + +@mysql_query('REVOKE ALL PRIVILEGES, GRANT OPTION FROM pcontest', $link); +@mysql_query('DROP USER pcontest', $link); + +mysql_close($link); +?> +--EXPECTF-- +Warning: mysql_pconnect(): Too many open persistent links (1) in %s on line %d +[020] Cannot connect using host '%s', user '%s', password '****', [0] 0 +array(1) { + [0]=> + resource(%d) of type (mysql link persistent) +} +done!
\ No newline at end of file |