[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