summaryrefslogtreecommitdiff
path: root/ext/pdo_mysql/tests/pdo_mysql_pconnect.phpt
diff options
context:
space:
mode:
Diffstat (limited to 'ext/pdo_mysql/tests/pdo_mysql_pconnect.phpt')
-rw-r--r--ext/pdo_mysql/tests/pdo_mysql_pconnect.phpt97
1 files changed, 97 insertions, 0 deletions
diff --git a/ext/pdo_mysql/tests/pdo_mysql_pconnect.phpt b/ext/pdo_mysql/tests/pdo_mysql_pconnect.phpt
new file mode 100644
index 0000000..eb0fff1
--- /dev/null
+++ b/ext/pdo_mysql/tests/pdo_mysql_pconnect.phpt
@@ -0,0 +1,97 @@
+--TEST--
+MySQL PDO->__construct(), PDO::ATTR_PERSISTENT
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'skipif.inc');
+require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
+MySQLPDOTest::skip();
+?>
+--FILE--
+<?php
+ require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
+
+ try {
+
+ $dsn = MySQLPDOTest::getDSN();
+ $user = PDO_MYSQL_TEST_USER;
+ $pass = PDO_MYSQL_TEST_PASS;
+
+ $db1 = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true));
+ $db2 = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true));
+ $db1->exec('SET @pdo_persistent_connection=1');
+ $stmt = $db2->query('SELECT @pdo_persistent_connection as _pers');
+ $tmp = $stmt->fetch(PDO::FETCH_ASSOC);
+ if ($tmp['_pers'] !== '1')
+ printf("[001] Both handles should use the same connection.");
+
+ $stmt = $db1->query('SELECT CONNECTION_ID() as _con1');
+ $tmp = $stmt->fetch(PDO::FETCH_ASSOC);
+ $con1 = $tmp['_con1'];
+
+ $stmt = $db2->query('SELECT CONNECTION_ID() as _con2');
+ $tmp = $stmt->fetch(PDO::FETCH_ASSOC);
+ $con2 = $tmp['_con2'];
+
+ if ($con1 !== $con2)
+ printf("[002] Both handles should report the same MySQL thread ID");
+
+ $db1 = NULL; /* should be equal to closing to my understanding */
+ $db1 = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true));
+ $stmt = $db1->query('SELECT CONNECTION_ID() as _con1');
+ $tmp = $stmt->fetch(PDO::FETCH_ASSOC);
+ $con1 = $tmp['_con1'];
+
+ if ($con1 !== $con2)
+ printf("[003] Both handles should report the same MySQL thread ID");
+
+ $affected = $db1->exec(sprintf('KILL %d', $con1));
+ // Server needs some think-time sometimes
+ sleep(1);
+ if ('00000' == $db1->errorCode()) {
+ // looks like KILL has worked ? Or not... TODO: why no warning with libmysql?!
+ @$db1->exec("SET @pdo_persistent_connection=2");
+ // but now I want to see some error...
+ if ('HY000' != $db1->errorCode())
+ printf("[004] Wrong error code %s\n", $db1->errorCode());
+
+ $tmp = implode(' ', $db1->errorInfo());
+ if (!strstr($tmp, '2006'))
+ printf("[005] Wrong error info %s\n", $tmp);
+ }
+
+ $db1 = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => false));
+ $stmt = $db1->query('SELECT CONNECTION_ID() as _con1');
+ $tmp = $stmt->fetch(PDO::FETCH_ASSOC);
+ $con1 = $tmp['_con1'];
+
+ $db2 = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true));
+ $stmt = $db2->query('SELECT CONNECTION_ID() as _con2');
+ $tmp = $stmt->fetch(PDO::FETCH_ASSOC);
+ $con2 = $tmp['_con2'];
+
+ if ($con1 == $con2)
+ printf("[006] Looks like the persistent and the non persistent connection are using the same link?!\n");
+
+ // lets go crazy and create a few pconnections...
+ $connections = array();
+ for ($i = 0; $i <= 20; $i++) {
+ $connections[$i] = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true));
+ }
+ do {
+ $i = mt_rand(0, 20);
+ if (isset($connections[$i]))
+ unset($connections[$i]);
+ } while (!empty($connections));
+
+
+ } catch (PDOException $e) {
+ printf("[001] %s, [%s] %s\n",
+ $e->getMessage(),
+ (is_object($db)) ? $db->errorCode() : 'n/a',
+ (is_object($db)) ? implode(' ', $db->errorInfo()) : 'n/a');
+ }
+
+ print "done!";
+?>
+--EXPECTF--
+done! \ No newline at end of file