driver_test.php

来自「视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.」· PHP 代码 · 共 1,687 行 · 第 1/4 页

PHP
1,687
字号
<?php/* * driver_test.php * * @(#) $Header: /repository/pear/MDB/tests/driver_test.php,v 1.21 2003/01/16 16:05:06 lsmith Exp $ * * This is a script intended to be used by Metabase DBMS driver class * developers or other users to verify if the implementation of a given * driver works in conformance with the documented behavior of the driver * class functions. * * Driver classes that are not compliant may lead to bugs in the Metabase * applications that use such drivers.  Make sure that new or updated * drivers pass all tests performed by this script before releasing the * driver classes to Metabase users.  In the future this script will be * updated to perform conformance tests. * * To use this script, edit the driver_test_configuration.php script and * adjust any database setup values that may be needed to use the driver * class being tested in your environment.  Read Metabase documentation * about the MetabaseSetupDatabase section to learn more about these * database setup arguments. * */// BC hack to define PATH_SEPARATOR for version of PHP prior 4.3if(!defined('PATH_SEPARATOR')) {	if(defined('DIRECTORY_SEPARATOR') && DIRECTORY_SEPARATOR == "\\") {		define('PATH_SEPARATOR', ';');	} else {		define('PATH_SEPARATOR', ':');	}}ini_set('include_path', '..'.PATH_SEPARATOR.ini_get('include_path'));require_once 'MDB.php';MDB::loadFile('metabase_wrapper');MDB::loadFile('Manager');Function VerifyFetchedValues($database,$result,$row,&$data,&$value,&$field){	return(strcmp($value=MetabaseFetchResult($database,$result,$row,"user_name"),$data[$field="user_name"])	|| strcmp($value=MetabaseFetchResult($database,$result,$row,"user_password"),$data[$field="user_password"])	|| strcmp($value=MetabaseFetchBooleanResult($database,$result,$row,"subscribed"),$data[$field="subscribed"])	|| strcmp($value=MetabaseFetchResult($database,$result,$row,"user_id"),$data[$field="user_id"])	|| ($value=MetabaseFetchDecimalResult($database,$result,$row,"quota"))!=$data[$field="quota"]	|| strcmp($value=MetabaseFetchFloatResult($database,$result,$row,"weight"),$data[$field="weight"])	|| strcmp($value=MetabaseFetchDateResult($database,$result,$row,"access_date"),$data[$field="access_date"])	|| strcmp($value=MetabaseFetchTimeResult($database,$result,$row,"access_time"),$data[$field="access_time"])	|| strcmp($value=MetabaseFetchTimestampResult($database,$result,$row,"approved"),$data[$field="approved"]));}Function InsertTestValues($database,$prepared_query,&$data){	MetabaseQuerySetText($database,$prepared_query,1,$data["user_name"]);	MetabaseQuerySetText($database,$prepared_query,2,$data["user_password"]);	MetabaseQuerySetBoolean($database,$prepared_query,3,$data["subscribed"]);	MetabaseQuerySetInteger($database,$prepared_query,4,$data["user_id"]);	MetabaseQuerySetDecimal($database,$prepared_query,5,$data["quota"]);	MetabaseQuerySetFloat($database,$prepared_query,6,$data["weight"]);	MetabaseQuerySetDate($database,$prepared_query,7,$data["access_date"]);	MetabaseQuerySetTime($database,$prepared_query,8,$data["access_time"]);	MetabaseQuerySetTimestamp($database,$prepared_query,9,$data["approved"]);	return(MetabaseExecuteQuery($database,$prepared_query));}	$driver_arguments=array(	);	$database_variables=array(		"create"=>"1",		"name"=>"driver_test"	);	if(file_exists("driver_test_config.php"))		include("driver_test_config.php");	$eol=(IsSet($driver_arguments["LogLineBreak"]) ? $driver_arguments["LogLineBreak"] : "\n");	$default_tests=array(		"storage"=>1,		"bulkfetch"=>1,		"preparedqueries"=>1,		"metadata"=>1,		"nulls"=>1,		"escapesequences"=>1,		"ranges"=>1,		"sequences"=>1,		"affectedrows"=>1,		"transactions"=>1,		"replace"=>1,		"lobstorage"=>1,		"lobfiles"=>1,		"lobnulls"=>1	);	if($argc<=1)		$tests=$default_tests;	else	{		for($tests=array(),$argument=1;$argument<$argc;$argument++)		{			if(!IsSet($default_tests[$argv[$argument]]))			{				echo "Usage: ",$argv[0];				for(Reset($default_tests);Key($default_tests);Next($default_tests))					echo " [",Key($default_tests),"]";				echo $eol;				exit;			}			$tests[$argv[$argument]]=$default_tests[$argv[$argument]];		}	}	set_time_limit(0);	$input_file="driver_test.schema";	$manager=new metabase_manager_class;	$success=$manager->UpdateDatabase($input_file,$input_file.".before",$driver_arguments,$database_variables);	$debug_output="";	if(count($manager->warnings)>0)		$debug_output.="WARNING:$eol".implode($manager->warnings,"!$eol").$eol;	if($manager->database	&& IsSet($driver_arguments["CaptureDebug"]))		$debug_output.=MetabaseDebugOutput($manager->database);	$passed=$failed=0;	if($success)	{		if(!strcmp($error=MetabaseSetupDatabase($driver_arguments,$database),""))		{			if(IsSet($driver_arguments["CaptureDebug"]))				MetabaseCaptureDebugOutput($database,1);			MetabaseSetDatabase($database,$database_variables["name"]);			if(IsSet($tests["storage"])			&& $success)			{				$test="storage";				echo "Testing typed field storage and retrieval ... ";				flush();				$pass=1;				if(!MetabaseQuery($database,"DELETE FROM users"))					$success=0;				else				{					$row=1234;					$data=array();					$data["user_name"]="user_$row";					$data["user_password"]="somepassword";					$data["subscribed"]=$row % 2;					$data["user_id"]=$row;					$data["quota"]=strval($row/100);					$data["weight"]=sqrt($row);					$data["access_date"]=MetabaseToday();					$data["access_time"]=MetabaseTime();					$data["approved"]=MetabaseNow();					if(($prepared_query=MetabasePrepareQuery($database,"INSERT INTO users (user_name,user_password,subscribed,user_id,quota,weight,access_date,access_time,approved) VALUES (?,?,?,?,?,?,?,?,?)")))					{						if(!InsertTestValues($database,$prepared_query,$data))						{							$success=0;						}						MetabaseFreePreparedQuery($database,$prepared_query);						if($success)						{							if(!($result=MetabaseQuery($database,"SELECT user_name,user_password,subscribed,user_id,quota,weight,access_date,access_time,approved FROM users")))								$success=0;							else							{								if(VerifyFetchedValues($database,$result,0,$data,$value,$field))								{									$pass=0;									echo "FAILED!$eol";									$failed++;									echo "Test $test: the value retrieved for field \"$field\" ($value) doesn't match what was stored (".$data[$field].")$eol";								}								else								{									if(!MetabaseEndOfResult($database,$result))									{										$pass=0;										echo "FAILED!$eol";										$failed++;										echo "Test $test: the query result did not seem to have reached the end of result as expected$eol";									}								}								MetabaseFreeResult($database,$result);							}						}						if($success						&& $pass)						{							$passed++;							echo "OK.$eol";						}					}					else						$success=0;				}			}			if(IsSet($tests["bulkfetch"])			&& $success)			{				$test="bulkfetch";				echo "Testing query result data bulk fetching... ";				flush();				$pass=1;				if(!MetabaseQuery($database,"DELETE FROM users"))					$success=0;				else				{					if(($prepared_query=MetabasePrepareQuery($database,"INSERT INTO users (user_name,user_password,subscribed,user_id,quota,weight,access_date,access_time,approved) VALUES (?,?,?,?,?,?,?,?,?)")))					{						$data=array();						for($total_rows=5,$row=0;$row<$total_rows;$row++)						{							$data[$row]["user_name"]="user_$row";							$data[$row]["user_password"]="somepassword";							$data[$row]["subscribed"]=$row % 2;							$data[$row]["user_id"]=$row;							$data[$row]["quota"]=sprintf("%.2f",strval(1+($row+1)/100));							$data[$row]["weight"]=sqrt($row);							$data[$row]["access_date"]=MetabaseToday();							$data[$row]["access_time"]=MetabaseTime();							$data[$row]["approved"]=MetabaseNow();							if(!InsertTestValues($database,$prepared_query,$data[$row]))							{								$success=0;								break;							}						}						MetabaseFreePreparedQuery($database,$prepared_query);						$types=array(							"text",							"text",							"boolean",							"integer",							"decimal",							"float",							"date",							"time",							"timestamp"						);						if($success)						{							for($row=0;$row<$total_rows;$row++)							{								for(Reset($data[$row]),$column=0;$column<count($data[$row]);Next($data[$row]),$column++)								{									$field=Key($data[$row]);									$type=$types[$column];									if(!($success=MetabaseQueryField($database,"SELECT $field FROM users WHERE user_id=$row",$value,$type)))										break 2;									if(strcmp(strval($data[$row][$field]),strval($value)))									{										$pass=0;										echo "FAILED!$eol";										$failed++;										echo "Test $test: the query field \"$field\" of type $type for row $row was returned in \"$value\" unlike \"".$data[$row][$field]."\" as expected$eol";										break 2;									}								}							}						}						if($success						&& $pass)						{							for($fields="",Reset($data[0]),$column=0;$column<count($data[0]);Next($data[0]),$column++)							{								if($column>0)									$fields.=",";								$fields.=Key($data[0]);							}							for($row=0;$row<$total_rows;$row++)							{								if(!($success=MetabaseQueryRow($database,"SELECT $fields FROM users WHERE user_id=$row",$value,$types)))									break;								for(Reset($data[$row]),$column=0;$column<count($data[$row]);Next($data[$row]),$column++)								{									$field=Key($data[$row]);									if(strcmp(strval($data[$row][$field]),strval($value[$column])))									{										$pass=0;										echo "FAILED!$eol";										$failed++;										echo "Test $test: the query row field \"$field\" of for row $row was returned in \"".$value[$column]."\" unlike \"".$data[$row][$field]."\" as expected$eol";										break 2;									}								}							}						}						if($success						&& $pass)						{							for(Reset($data[0]),$column=0;$column<count($data[0]);Next($data[0]),$column++)							{								$field=Key($data[0]);								$type=$types[$column];								if(!($success=MetabaseQueryColumn($database,"SELECT $field,user_id FROM users ORDER BY 2",$value,$type)))									break;								for($row=0;$row<$total_rows;$row++)								{									if(strcmp(strval($data[$row][$field]),strval($value[$row])))									{										$pass=0;										echo "FAILED!$eol";										$failed++;										echo "Test $test: the query column field \"$field\" of type $type for row $row was returned in \"".$value[$row]."\" unlike \"".$data[$row][$field]."\" as expected$eol";										break 2;									}								}							}						}						if($success						&& $pass)						{							for($fields="",Reset($data[0]),$column=0;$column<count($data[0]);Next($data[0]),$column++)							{								if($column>0)									$fields.=",";								$fields.=Key($data[0]);							}							if(($success=MetabaseQueryAll($database,"SELECT $fields FROM users ORDER BY user_id",$value,$types)))							{								for($row=0;$row<$total_rows;$row++)								{									for(Reset($data[$row]),$column=0;$column<count($data[$row]);Next($data[$row]),$column++)									{										$field=Key($data[$row]);										if(strcmp(strval($data[$row][$field]),strval($value[$row][$column])))										{											$pass=0;											echo "FAILED!$eol";											$failed++;											echo "Test $test: the query all field \"$field\" of for row $row was returned in \"".$value[$row][$column]."\" unlike \"".$data[$row][$field]."\" as expected$eol";											break 2;										}									}								}							}						}						if($success						&& $pass)						{							$passed++;							echo "OK.$eol";						}					}					else						$success=0;				}			}			if(IsSet($tests["preparedqueries"])			&& $success)			{				$test="preparedqueries";				echo "Testing prepared queries ... ";				flush();				$pass=1;				if(!MetabaseQuery($database,"DELETE FROM users"))					$success=0;				else				{					$question_value=MetabaseGetTextFieldValue($database,"Does this work?");					if(($prepared_query=MetabasePrepareQuery($database,"INSERT INTO users (user_name,user_password,user_id) VALUES (?,$question_value,1)")))					{						MetabaseQuerySetText($database,$prepared_query,1,"Sure!");						if(!MetabaseExecuteQuery($database,$prepared_query))						{							$sucess=$pass=0;							echo "FAILED!$eol";							echo "Test $test: could not execute prepared query with a text value with a question mark. Error: ".MetabaseError($database).$eol;							echo "Testing prepared queries ... ";							flush();						}						MetabaseFreePreparedQuery($database,$prepared_query);					}					else					{						$sucess=$pass=0;						echo "FAILED!$eol";						echo "Test $test: could not execute prepared query with a text value with a question mark. Error: ".MetabaseError($database).$eol;						echo "Testing prepared queries ... ";						flush();					}					$question_value=MetabaseGetTextFieldValue($database,"Wouldn't it be great if this worked too?");					if(($prepared_query=MetabasePrepareQuery($database,"INSERT INTO users (user_name,user_password,user_id) VALUES (?,$question_value,2)")))					{						MetabaseQuerySetText($database,$prepared_query,1,"Sure!");						if(!MetabaseExecuteQuery($database,$prepared_query))						{							$sucess=$pass=0;							echo "FAILED!$eol";							echo "Test $test: could not execute prepared query with a text value with a quote character before a question mark. Error: ".MetabaseError($database).$eol;						}						MetabaseFreePreparedQuery($database,$prepared_query);					}					else					{						$sucess=$pass=0;						echo "FAILED!$eol";						echo "Test $test: could not execute prepared query with a text value with a quote character before a question mark. Error: ".MetabaseError($database).$eol;					}					if($success					&& $pass)					{						$passed++;						echo "OK.$eol";					}					else						$failed++;				}			}			if(IsSet($tests["metadata"])			&& $success)			{				$test="metadata";				echo "Testing retrieval of result metadata... ";				flush();				$pass=1;				if(!MetabaseQuery($database,"DELETE FROM users"))

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?