[prev in list] [next in list] [prev in thread] [next in thread]
List: pecl-cvs
Subject: [PECL-CVS] =?utf-8?q?svn:_/pecl/mysqlnd=5Fms/trunk/_php=5Fmysqlnd=5Fms.c_tests/mysqlnd=5Fms=5Ffilter
From: Ulf_Wendel <uw () php ! net>
Date: 2011-11-29 10:42:28
Message-ID: svn-uw-1322563348-320148-387931071 () svn ! php ! net
[Download RAW message or body]
uw Tue, 29 Nov 2011 10:42:28 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=320148
Log:
Detect if no MS connection is used when calling function and better testing
Changed paths:
U pecl/mysqlnd_ms/trunk/php_mysqlnd_ms.c
U pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_filter_qos_rt_gtid.phpt
U pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_filter_qos_runtime.phpt
A pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_set_qos_params.phpt
["svn-diffs-320148.txt" (text/x-diff)]
Modified: pecl/mysqlnd_ms/trunk/php_mysqlnd_ms.c
===================================================================
--- pecl/mysqlnd_ms/trunk/php_mysqlnd_ms.c 2011-11-29 10:41:21 UTC (rev 320147)
+++ pecl/mysqlnd_ms/trunk/php_mysqlnd_ms.c 2011-11-29 10:42:28 UTC (rev 320148)
@@ -450,7 +450,7 @@
{
zval * handle;
double option;
- zval * option_value;
+ zval * option_value = NULL;
long gtid_or_age = 0;
double service_level;
MYSQLND * proxy_conn;
@@ -466,26 +466,28 @@
case QOS_OPTION_GTID:
if (service_level != CONSISTENCY_SESSION) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "GTID option value must be used \
with MYSQLND_MS_QOS_CONSISTENCY_SESSION only");
- return;
+ RETURN_FALSE;
}
if (!option_value) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Option value required");
- return;
+ RETURN_FALSE;
}
+
/* TODO: For 32bit systems, do we need to store a GTID BIGINT in char* ?
Maybe char* is better anyway for GTIDs? */
+
convert_to_long(option_value);
gtid_or_age = Z_LVAL_P(option_value);
if (gtid_or_age < 0L) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "GTID must have a positive value");
- return;
+ RETURN_FALSE;
}
break;
case QOS_OPTION_AGE:
default:
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid option");
- return;
+ RETURN_FALSE;
break;
}
} else {
@@ -496,6 +498,15 @@
RETURN_FALSE;
}
+ {
+ MYSQLND_MS_CONN_DATA ** conn_data = NULL;
+ conn_data = (MYSQLND_MS_CONN_DATA **) \
mysqlnd_plugin_get_plugin_connection_data_data(proxy_conn->data, \
mysqlnd_ms_plugin_id); + if (!conn_data || !(*conn_data)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, MYSQLND_MS_ERROR_PREFIX " No \
mysqlnd_ms connection"); + RETURN_FALSE;
+ }
+ }
+
switch ((int)service_level)
{
case CONSISTENCY_STRONG:
Modified: pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_filter_qos_rt_gtid.phpt
===================================================================
--- pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_filter_qos_rt_gtid.phpt 2011-11-29 \
10:41:21 UTC (rev 320147)
+++ pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_filter_qos_rt_gtid.phpt 2011-11-29 \
10:42:28 UTC (rev 320148) @@ -120,7 +120,7 @@
string(1) "1"
}
}
-GTID '5'
+GTID '%d'
array(1) {
[0]=>
array(1) {
Modified: pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_filter_qos_runtime.phpt
===================================================================
--- pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_filter_qos_runtime.phpt 2011-11-29 \
10:41:21 UTC (rev 320147)
+++ pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_filter_qos_runtime.phpt 2011-11-29 \
10:42:28 UTC (rev 320148) @@ -81,8 +81,9 @@
printf("[clean] Cannot unlink ini file \
'test_mysqlnd_ms_filter_qos_runtime.ini'.\n"); ?>
--EXPECTF--
+Warning: mysqlnd_ms_set_qos(): (mysqlnd_ms) No mysqlnd_ms connection in %s on line \
%d +bool(false)
bool(true)
-bool(true)
array(1) {
["@myrole"]=>
NULL
Added: pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_set_qos_params.phpt
===================================================================
--- pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_set_qos_params.phpt \
(rev 0)
+++ pecl/mysqlnd_ms/trunk/tests/mysqlnd_ms_set_qos_params.phpt 2011-11-29 10:42:28 \
UTC (rev 320148) @@ -0,0 +1,166 @@
+--TEST--
+mysqlnd_ms_set_qos(), params
+--SKIPIF--
+<?php
+if (version_compare(PHP_VERSION, '5.3.99-dev', '<'))
+ die(sprintf("SKIP Requires PHP >= 5.3.99, using " . PHP_VERSION));
+
+require_once('skipif.inc');
+require_once("connect.inc");
+
+if (($master_host == $slave_host)) {
+ die("SKIP master and slave seem to the the same, see tests/README");
+}
+
+_skipif_check_extensions(array("mysqli"));
+_skipif_connect($master_host_only, $user, $passwd, $db, $master_port, \
$master_socket); +_skipif_connect($slave_host_only, $user, $passwd, $db, $slave_port, \
$slave_socket); +
+include_once("util.inc");
+$sql = mst_get_gtid_sql($db);
+if ($error = mst_mysqli_setup_gtid_table($master_host_only, $user, $passwd, $db, \
$master_port, $master_socket)) + die(sprintf("SKIP Failed to setup GTID on master, \
%s\n", $error)); +
+
+$settings = array(
+ "myapp" => array(
+ 'master' => array(
+ "master1" => array(
+ 'host' => $master_host_only,
+ 'port' => (int)$master_port,
+ 'socket' => $master_socket,
+ ),
+ ),
+ 'slave' => array(
+ "slave1" => array(
+ 'host' => $slave_host_only,
+ 'port' => (int)$slave_port,
+ 'socket' => $slave_socket,
+ ),
+ ),
+
+ 'global_transaction_id_injection' => array(
+ 'on_commit' => $sql['update'],
+ 'fetch_last_gtid' => $sql['fetch_last_gtid'],
+ 'check_for_gtid' => $sql['check_for_gtid'],
+ 'report_error' => true,
+ ),
+
+ ),
+
+);
+if ($error = mst_create_config("test_mysqlnd_ms_set_qos_params.ini", $settings))
+ die(sprintf("SKIP %s\n", $error));
+
+msg_mysqli_init_emulated_id_skip($slave_host, $user, $passwd, $db, $slave_port, \
$slave_socket, "slave1"); +msg_mysqli_init_emulated_id_skip($master_host, $user, \
$passwd, $db, $master_port, $master_socket, "master1"); +?>
+--INI--
+mysqlnd_ms.enable=1
+ mysqlnd_ms.ini_file=test_mysqlnd_ms_set_qos_params.ini
+--FILE--
+<?php
+ require_once("connect.inc");
+ require_once("util.inc");
+
+ $link = null;
+ if (NULL !== ($ret = @mysqlnd_ms_set_qos()))
+ printf("[001] Expecting NULL got %s\n", var_export($ret, true));
+
+ if (NULL !== ($ret = @mysqlnd_ms_set_qos($link)))
+ printf("[002] Expecting NULL got %s\n", var_export($ret, true));
+
+ if (NULL !== ($ret = @mysqlnd_ms_set_qos($link, $link, $link, $link, $link)))
+ printf("[003] Expecting NULL got %s\n", var_export($ret, true));
+
+ $link = mst_mysqli_connect($master_host_only, $user, $passwd, $db, $master_port, \
$master_socket); + if (mysqli_connect_errno()) {
+ printf("[004] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
+ }
+
+ if (false !== ($ret = mysqlnd_ms_set_qos($link, \
MYSQLND_MS_QOS_CONSISTENCY_STRONG))) + printf("[005] Expecting false got %s\n", \
var_export($ret, true)); +
+ $link = mst_mysqli_connect("myapp", $user, $passwd, $db, $port, $socket);
+ if (mysqli_connect_errno()) {
+ printf("[006] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
+ }
+
+ $valid_service_levels = array(
+ MYSQLND_MS_QOS_CONSISTENCY_STRONG => true,
+ MYSQLND_MS_QOS_CONSISTENCY_SESSION => true,
+ MYSQLND_MS_QOS_CONSISTENCY_EVENTUAL => true,
+ );
+ do {
+ $invalid_service_level = mt_rand(10, 100);
+ } while (isset($valid_service_levels[$invalid_service_level]));
+
+ if (false !== ($ret = mysqlnd_ms_set_qos($link, $invalid_service_level)))
+ printf("[007] Expecting false got %s\n", var_export($ret, true));
+
+
+ $valid_options = array(
+ MYSQLND_MS_QOS_OPTION_GTID => MYSQLND_MS_QOS_CONSISTENCY_SESSION,
+ MYSQLND_MS_QOS_OPTION_AGE => NULL,
+ );
+ do {
+ $invalid_option = mt_rand(10, 100);
+ } while (isset($valid_options[$invalid_option]));
+
+ foreach ($valid_options as $option => $service_level) {
+ if (is_null($service_level))
+ continue;
+
+ ob_start();
+ $ret = mysqlnd_ms_set_qos($link, $service_level, $invalid_option);
+ $tmp = ob_get_contents();
+ ob_end_clean();
+
+ if (!stristr($tmp, "Warning")) {
+ printf("[008] Can't find warning about invalid option %d for service level %d\n",
+ $invalid_option, $service_level);
+ }
+
+ if (false !== $ret)
+ printf("[009] Expecting false got %s with invalid option %d for service level \
%d\n", + var_export($ret, true), $invalid_option, $service_level);
+ }
+
+ /* GTID */
+ if (false !== ($ret = mysqlnd_ms_set_qos($link, MYSQLND_MS_QOS_CONSISTENCY_SESSION, \
MYSQLND_MS_QOS_OPTION_GTID))) { + printf("[010] Expecting false got %s\n", \
var_export($ret, true)); + }
+
+ /* casted to 0 */
+ if (true !== ($ret = mysqlnd_ms_set_qos($link, MYSQLND_MS_QOS_CONSISTENCY_SESSION, \
MYSQLND_MS_QOS_OPTION_GTID, array()))) { + printf("[011] Expecting true got %s\n", \
var_export($ret, true)); + }
+
+ if (false !== ($ret = mysqlnd_ms_set_qos($link, MYSQLND_MS_QOS_CONSISTENCY_SESSION, \
MYSQLND_MS_QOS_OPTION_GTID, (-1 * PHP_INT_MAX) + 1))) { + printf("[012] Expecting \
false got %s\n", var_export($ret, true)); + }
+
+ print "done!";
+?>
+--CLEAN--
+<?php
+ if (!unlink("test_mysqlnd_ms_set_qos_params.ini"))
+ printf("[clean] Cannot unlink ini file 'test_mysqlnd_ms_set_qos_params.ini'.\n");
+
+ require_once("connect.inc");
+ require_once("util.inc");
+ if ($error = mst_mysqli_drop_test_table($master_host_only, $user, $passwd, $db, \
$master_port, $master_socket)) + printf("[clean] %s\n");
+
+ if ($error = mst_mysqli_drop_gtid_table($master_host_only, $user, $passwd, $db, \
$master_port, $master_socket)) + printf("[clean] %s\n", $error));
+?>
+--EXPECTF--
+Warning: mysqlnd_ms_set_qos(): (mysqlnd_ms) No mysqlnd_ms connection in %s on line \
%d +
+Warning: mysqlnd_ms_set_qos(): Invalid service level in %s on line %d
+
+Warning: mysqlnd_ms_set_qos(): Option value required in %s on line %d
+
+Warning: mysqlnd_ms_set_qos(): GTID must have a positive value in %s on line %d
+done!
\ No newline at end of file
--
PECL CVS Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic