Test fixes

This commit is contained in:
David Puglielli 2018-03-14 21:21:14 -07:00
parent c4a6068533
commit b68befa939
2 changed files with 44 additions and 51 deletions

View file

@ -20,13 +20,7 @@ function FormulateSetupQuery($tableName, &$dataTypes, &$columns, &$insertQuery,
for ($i = 0; $i < $numTypes; ++$i) {
// Replace parentheses for column names
$colname = str_replace("($strsize)", "_$strsize", $dataTypes[$i]);
$colname = str_replace("($strsize2)", "_$strsize2", $colname);
$colname = str_replace("(max)", "_max", $colname);
$colname = str_replace("(5)", "_5", $colname);
$colname = str_replace("(36,4)", "_36_4", $colname);
$colname = str_replace("(32,4)", "_32_4", $colname);
$colname = str_replace("(28,4)", "_28_4", $colname);
$colname = str_replace(array("(", ",", ")"), array("_", "_", ""), $dataTypes[$i]);
$columns[] = new AE\ColumnMeta($dataTypes[$i], "c_".$colname."_AE");
$columns[] = new AE\ColumnMeta($dataTypes[$i], "c_".$colname, null, true, true);
$queryTypes .= "c_"."$colname, ";
@ -77,7 +71,6 @@ if (!$conn) {
}
$tableName = "type_conversion_table";
$stmt = sqlsrv_query($conn, "IF OBJECT_ID('$tableName', 'U') IS NOT NULL DROP TABLE $tableName");
$columns = array();
$insertQuery = "";
@ -129,19 +122,18 @@ for ($v = 0; $v < sizeof($values);++$v)
fatalError("Second sqlsrv_prepare failed\n");
}
$metadata = sqlsrv_field_metadata($stmt);
$numFields = count($metadata);
$numFields = sqlsrv_num_fields($stmt);
$i = 0;
$valueAE = null;
$valueArrayAE = null;
$valueFromArrayAE = null;
while ($result = sqlsrv_fetch($stmt)) {
$dataArray = sqlsrv_fetch_array($stmt2, SQLSRV_FETCH_NUMERIC);
for ($j = 0; $j < $numFields; $j++) {
$value = sqlsrv_get_field($stmt, $j, $SQLSRV_PHPTYPE_CONST[$i]);
$valueArray = $dataArray[$j];
$valueFromArray = $dataArray[$j];
// PHPTYPE_STREAM returns a PHP resource, so check the type
if (is_resource($value)) $value = get_resource_type($value);
@ -150,7 +142,7 @@ for ($v = 0; $v < sizeof($values);++$v)
// So let's do the comparison every second field
if ($j%2 == 0) {
$valueAE = $value;
$valueArrayAE = $valueArray;
$valueFromArrayAE = $valueFromArray;
} elseif ($j%2 == 1) {
// If returning a DateTime PHP type from a date only SQL type,
// PHP adds the current timestamp to make a DateTime object,
@ -160,8 +152,9 @@ for ($v = 0; $v < sizeof($values);++$v)
// below the DateTime objects are made equal again for the next if
// block.
if ($value instanceof DateTime) {
// date_diff returns a DateInterval object, and f is
// the difference expressed as a fraction of a second
// date_diff returns a DateInterval object, and s is
// the difference in seconds. s should be zero because
// the difference should be just a fraction of a second.
$datediff = date_diff($value, $valueAE);
$diff = $datediff->s;
@ -170,12 +163,12 @@ for ($v = 0; $v < sizeof($values);++$v)
}
}
if ($valueAE != $value or $valueArrayAE != $valueArray) {
if ($valueAE != $value or $valueFromArrayAE != $valueFromArray) {
echo "Values do not match! PHPType $i Field $j\n";
print_r($valueAE);echo "\n";
print_r($value);echo "\n";
print_r($valueArrayAE);echo "\n";
print_r($valueArray);echo "\n";
print_r($valueFromArrayAE);echo "\n";
print_r($valueFromArray);echo "\n";
print_r(sqlsrv_errors());
fatalError("Test failed, values do not match.\n");
}

View file

@ -8,35 +8,53 @@ require_once('MsCommon.inc');
require_once('tools.inc');
require_once('values.php');
// These are the errors we expect to see if a conversion fails.
// 22001 String data is right-truncated
// 22003 Numeric value out of range/Overflow converting to numeric type
// 22007 Conversion (date/time from string) failed
// 22018 Conversion not allowed
// 42S22 Column not found
// 6522 .NET Framework error in hierarchyId construction
// 8114 Error converting binary/string type to numeric type
// 8169 Error converting from string to uniqueID
function checkAcceptableErrors(&$convError)
{
if ($convError[0][0] != '22018' and
$convError[0][0] != '22001' and
$convError[0][0] != '22003' and
$convError[0][0] != '22007' and
$convError[0][0] != '42S22' and
$convError[0][1] != '6522' and
$convError[0][1] != '8114' and
$convError[0][1] != '8169') {
print_r($convError);
fatalError("Conversion failed with unexpected error message. i=$i, j=$j, v=$v\n");
}
}
// Set up the columns and build the insert query. Each data type has an
// AE-encrypted and a non-encrypted column side by side in the table.
function FormulateSetupQuery($tableName, &$dataTypes, &$columns, &$insertQuery, $strsize, $strsize2)
{
$columns = array();
$queryTypes = "(";
$columnsInQuery = "(";
$valuesString = "VALUES (";
$numTypes = sizeof($dataTypes);
for ($i = 0; $i < $numTypes; ++$i) {
// Replace parentheses for column names
$colname = str_replace("($strsize)", "_$strsize", $dataTypes[$i]);
$colname = str_replace("($strsize2)", "_$strsize2", $colname);
$colname = str_replace("(max)", "_max", $colname);
$colname = str_replace("(5)", "_5", $colname);
$colname = str_replace("(36,4)", "_36_4", $colname);
$colname = str_replace("(32,4)", "_32_4", $colname);
$colname = str_replace("(28,4)", "_28_4", $colname);
$colname = str_replace(array("(", ",", ")"), array("_", "_", ""), $dataTypes[$i]);
$columns[] = new AE\ColumnMeta($dataTypes[$i], "c_".$colname."_AE"); // encrypted column
$columns[] = new AE\ColumnMeta($dataTypes[$i], "c_".$colname, null, true, true);// non-encrypted column
$queryTypes .= "c_"."$colname, ";
$queryTypes .= "c_"."$colname"."_AE, ";
$columnsInQuery .= "c_"."$colname, ";
$columnsInQuery .= "c_"."$colname"."_AE, ";
$valuesString .= "?, ?, ";
}
$queryTypes = substr($queryTypes, 0, -2).")";
$columnsInQuery = substr($columnsInQuery, 0, -2).")";
$valuesString = substr($valuesString, 0, -2).")";
$insertQuery = "INSERT INTO $tableName ".$queryTypes." ".$valuesString;
$insertQuery = "INSERT INTO $tableName ".$columnsInQuery." ".$valuesString;
}
// Build the select queries. We want every combination of types for conversion
@ -48,14 +66,9 @@ function FormulateSelectQuery($tableName, &$selectQuery, &$selectQueryAE, &$data
for ($i = 0; $i < $numTypes; ++$i) {
$selectQuery[] = array();
$colnamei = str_replace(array("(", ",", ")"), array("_", "_", ""), $dataTypes[$i]);
for ($j = 0; $j < sizeof($dataTypes); ++$j) {
$colnamei = str_replace("($strsize)", "_$strsize", $dataTypes[$i]);
$colnamei = str_replace("($strsize2)", "_$strsize2", $colnamei);
$colnamei = str_replace("(max)", "_max", $colnamei);
$colnamei = str_replace("(5)", "_5", $colnamei);
$colnamei = str_replace("(36,4)", "_36_4", $colnamei);
$colnamei = str_replace("(32,4)", "_32_4", $colnamei);
$colnamei = str_replace("(28,4)", "_28_4", $colnamei);
$selectQuery[$i][] = "SELECT CAST(c_".$colnamei." AS $dataTypes[$j]) FROM $tableName";
$selectQueryAE[$i][] = "SELECT CAST(c_".$colnamei."_AE AS $dataTypes[$j]) FROM $tableName";
}
@ -176,7 +189,6 @@ if (!$conn) {
}
$tableName = "type_conversion_table";
$stmt = sqlsrv_query($conn, "IF OBJECT_ID('$tableName', 'U') IS NOT NULL DROP TABLE $tableName");
$columns = array();
$insertQuery = "";
@ -223,19 +235,7 @@ for ($v = 2; $v < sizeof($values); ++$v)
if ($stmt == false) {
$convError = sqlsrv_errors();
// These are the errors we expect to see if a conversion fails.
if ($convError[0][0] != '22018' and
$convError[0][0] != '22001' and
$convError[0][0] != '22003' and
$convError[0][0] != '22007' and
$convError[0][0] != '42S22' and
$convError[0][1] != '6234' and
$convError[0][1] != '6522' and
$convError[0][1] != '8114' and
$convError[0][1] != '8169') {
print_r($convError);
fatalError("Conversion failed with unexpected error message. i=$i, j=$j, v=$v\n");
}
checkAcceptableErrors($convError);
if (AE\isDataEncrypted()) {
$stmtAE = sqlsrv_query($conn, $selectQueryAE[$i][$j]);