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 + -
显示快捷键?