summaryrefslogtreecommitdiff
path: root/ext/mysql/tests/mysql_max_persistent.phpt
diff options
context:
space:
mode:
Diffstat (limited to 'ext/mysql/tests/mysql_max_persistent.phpt')
-rw-r--r--ext/mysql/tests/mysql_max_persistent.phpt99
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