Files
namaste/stubs/testPDO.php
gramps 373ebc8c93 Archive: Namaste PHP AMQP framework v1.0 (2017-2020)
952 days continuous production uptime, 40k+ tp/s single node.
Original corpo Bitbucket history not included — clean archive commit.
2026-04-05 09:49:30 -07:00

333 lines
13 KiB
PHP

<?php
/**
* testPDO.php -- object-oriented testing
*/
require_once(dirname(__DIR__) . '/config/sneakerstrap.inc');
const OP_CREATE = 1;
const OP_FETCH = 2;
const OP_UPDATE = 3;
const OP_DELETE = 4;
const OP_CALL_SP = 5;
const OP_CALL_SF = 6;
const OP_FETCH_BY_GUID = 7;
const OP_AUDIT_RESTORE = 8;
const OP_BAD_FETCH = 9;
const OP_UPDATE_DELETE = 10;
const OP_UPDATE_MANY = 11;
const OP_FETCH_IN = 12;
const OP_FETCH_ANY = 13;
$thisOperation = OP_CREATE;
// test that we can init a PDO connector
//$mdbConnector = gasResourceManager::fetchResource(RESOURCE_PDO_MASTER);
$res = 'tPDO: ';
$errors = array();
$jayne = "Ten percent of nothin' is ... let me do the math here ... nothin' into nothin' ... carry the nothin' ... ";
$meta = [
META_TEMPLATE => TEMPLATE_CLASS_TEST_PDO,
META_CLIENT => CLIENT_CLIENT,
META_CLIENT_IP => STRING_SESSION_HOME,
META_EVENT_GUID => guid(), // simulate a broker event by generating the event guid
];
if ($thisOperation != OP_FETCH_BY_GUID and $thisOperation != OP_AUDIT_RESTORE) {
$objFactory = new gacFactory($meta, FACTORY_EVENT_NEW_CLASS, '', $errors);
if (!$objFactory->status or !empty($errors)) {
consoleLog($res, CON_ERROR, ERROR_TEMPLATE_INSTANTIATE . $meta[META_TEMPLATE]);
foreach ($errors as $error) consoleLog($res, CON_ERROR, $error);
exit;
}
/** @var gacPDO $objTest */
$objTest = $objFactory->widget;
if (is_object($objFactory)) $objFactory->__destruct();
unset($objFactory);
}
switch ($thisOperation) {
case OP_CREATE :
$data = $objTest->template->buildTestData(100, true);
$brokerPayload = [
BROKER_REQUEST => BROKER_REQUEST_FETCH,
BROKER_DATA => $data,
BROKER_META_DATA => $meta
];
if (!validateMetaData($brokerPayload, $errors)) exit('meta data validation failed');
$objTest->_createRecord($data);
if ($objTest->status) {
if (gasCache::mapOutboundPayload($objTest, $errors)) {
var_export($objTest->getCK());
echo $eos;
} else {
var_export($objTest->eventMessages);
echo $eos;
}
} else {
var_export($objTest->eventMessages);
echo $eos . ERROR_NOSQL_CREATE . $eos;
}
break;
case OP_FETCH :
$data = $objTest->template->buildTestData(1);
//$objTest->_fetchRecords($data);
$query = [ CM_TST_FIELD_TEST_STRING => [ OPERAND_NULL => [ OPERATOR_DNE => [ $jayne ] ] ] ];
$projection = [ CM_TST_TOKEN, CM_TST_FIELD_TEST_STATUS ];
$request = [ STRING_QUERY_DATA => $query, STRING_RETURN_DATA => $projection ];
$objTest->addMeta(META_LIMIT, 1);
$brokerPayload = [
BROKER_REQUEST => BROKER_REQUEST_FETCH,
BROKER_DATA => $request,
BROKER_META_DATA => $meta
];
//$query = null;
if (!validateMetaData($brokerPayload, $errors)) exit('meta data validation failed');
$objTest->_fetchRecords($brokerPayload[BROKER_DATA]);
if ($objTest->status) {
if (gasCache::mapOutboundPayload($objTest, $errors)) {
var_export($objTest->getCK());
echo $eos;
} else {
var_export($objTest->eventMessages);
echo $eos;
}
} else {
var_export($objTest->eventMessages);
echo $eos . ERROR_NOSQL_CREATE . $eos;
}
break;
case OP_FETCH_ANY :
$query = null;
$objTest->addMeta(META_LIMIT,2);
$meta[META_LIMIT] = 1;
$request = [ STRING_QUERY_DATA => $query ];
$brokerPayload = [
BROKER_REQUEST => BROKER_REQUEST_FETCH,
BROKER_DATA => $request,
BROKER_META_DATA => $meta
];
if (!validateMetaData($brokerPayload, $errors)) exit('meta data validation failed');
$objTest->_fetchRecords($brokerPayload[BROKER_DATA]);
if ($objTest->status) {
if (gasCache::mapOutboundPayload($objTest, $errors)) {
var_export($objTest->getCK());
echo $eos;
} else {
var_export($objTest->eventMessages);
echo $eos;
}
} else {
var_export($objTest->eventMessages);
echo $eos . ERROR_NOSQL_CREATE . $eos;
}
break;
case OP_FETCH_IN :
// get any three active records;
$query = null;
$recordList = null;
$projection = [ CM_TST_TOKEN ];
$request = [ STRING_QUERY_DATA => $query, STRING_RETURN_DATA => $projection ];
$brokerPayload = [
BROKER_REQUEST => BROKER_REQUEST_FETCH,
BROKER_DATA => $request,
BROKER_META_DATA => $meta
];
$objTest->addMeta(META_LIMIT, 3);
if (!validateMetaData($brokerPayload, $errors)) exit('meta data validation failure');
$objTest->_fetchRecords($brokerPayload[BROKER_DATA]);
if (!$objTest->status) {
echo 'failed to fetch records' . PHP_EOL;
var_export($objTest->eventMessages);
echo PHP_EOL;
exit;
}
foreach ($objTest->getData() as $record)
$recordList[] = $record[DB_TOKEN . $objTest->ext];
// build the IN query
$query = [ CM_TST_TOKEN => [ OPERAND_NULL => [ OPERATOR_IN => $recordList ]]];
$brokerPayload = [
BROKER_REQUEST => BROKER_REQUEST_FETCH,
BROKER_DATA => [ STRING_QUERY_DATA => $query ],
BROKER_META_DATA => $meta
];
if (!validateMetaData($brokerPayload, $errors)) exit('meta data validation failure');
$objTest->_fetchRecords($brokerPayload[BROKER_DATA]);
if (!$objTest->status) {
echo 'failed to fetch records' . PHP_EOL;
var_export($objTest->eventMessages);
echo PHP_EOL;
exit;
}
break;
case OP_BAD_FETCH :
$query = [ CM_TST_FIELD_TEST_STRING => [ OPERAND_NULL => [ OPERATOR_EQ => ["some string"] ] ] ];
$request = [
BROKER_REQUEST => BROKER_REQUEST_FETCH,
BROKER_DATA => [STRING_QUERY_DATA => $query],
BROKER_META_DATA => $meta
];
if (!validateMetaData($request, $errors)) {
var_export($errors);
exit;
}
$objTest->_fetchRecords($request[STRING_QUERY_DATA]);
if (!$objTest->status) var_export($objTest->eventMessages);
break;
case OP_DELETE :
// fetch any one active record
$query = [ CM_TST_FIELD_TEST_STATUS => [ OPERAND_NULL => [ OPERATOR_EQ => [ STATUS_ACTIVE ]]]];
$request = [ STRING_QUERY_DATA => $query];
$objTest->addMeta(META_DONUT_FILTER, 1);
$objTest->addMeta(META_LIMIT, 1);
$objTest->_fetchRecords($request);
$data = $objTest->getData();
$query = [ DB_TOKEN => [ OPERAND_NULL => [ OPERATOR_EQ => [ $data[0][STRING_TOKEN . $objTest->ext ]]]]];
$data = [ STRING_QUERY_DATA => $query ];
// $objTest->useDeletes = true; // uncomment this line to test hard-deletes
$objTest->_deleteRecord($data);
consoleLog($res, CON_SUCCESS, $objTest->queryResults);
break;
case OP_FETCH_BY_GUID :
// for this, you need to provide the GUID string of the record you wish to fetch
// this section is provided to test for loading a record via instantiation
$guid = 'FBF9C067-4B20-0F6D-B8EE-FD891D80EF7C';
if (empty($guid) or !validateGUID($guid)) {
echo 'Missing or invalid guid for fetch by guid test' . $eos;
exit;
}
// delete the pre-existing object and re-create so we can instantiate with a guid
if (isset($objTest) and is_object($objTest)) {
$objTest->__destruct();
unset($objTest);
}
$objFactory = new gacFactory($meta, FACTORY_EVENT_NEW_CLASS, $guid, $errors);
if (!$objFactory->status) {
var_export($objFactory->eventMessages);
exit;
}
/** @var gatTestMySQL $objTest->template */
/** @var gacPDO $objTest */
$objTest = $objFactory->widget;
$objFactory->__destruct();
unset($objFactory);
$query = [ DB_TOKEN => [ OPERAND_NULL => [ OPERATOR_EQ => [ $guid ]]]];
$request = [ STRING_QUERY_DATA => $query ];
$objTest->_fetchRecords($request);
if (!$objTest->status) {
var_export($objTest->eventMessages);
echo $eos;
exit;
}
var_export($objTest->getData());
break;
case OP_AUDIT_RESTORE :
$query = null;
$errors = [];
$retData = [];
// pre-determined DB_TOKEN of targeted audit record
$queryData = [ STRING_KEY => "9E4CC946-BA7D-F329-AAA4-2471DB0AA829" ];
$meta[META_USER_INFO] = basename(__FILE__);
$meta[JOURNAL_HISTORY_RESTORED_REASON] = 'testing journal recovery';
$meta[META_TEMPLATE] = TEMPLATE_CLASS_AUDIT;
// instantiate the audit record
$objFactory = new gacFactory($meta, FACTORY_EVENT_NEW_CLASS, $queryData[STRING_KEY], $errors);
if (!$objFactory->status) {
echo ERROR_FACTORY_LOAD_BROKER . TEMPLATE_CLASS_AUDIT . $eos;
var_export($objFactory->eventMessages);
exit;
}
$objAudit = $objFactory->widget;
if (is_object($objFactory)) $objFactory->__destruct();
unset($objFactory);
// launch the audit process
$startTime = gasStatic::doingTime();
$rc = $objAudit->restoreAuditRecord($retData);
$totalTime = gasStatic::doingTime($startTime);
if ($rc === true) echo 'Audit record recovered in: ' . (string) $totalTime . ' seconds' . $eos;
elseif (is_null($rc)) echo 'Audit method returned null' . $eos;
else echo 'Audit request failed';
var_export($objAudit->eventMessages);
break;
case OP_UPDATE :
$query = [ CM_TST_FIELD_TEST_STATUS => [ OPERAND_NULL => [ OPERATOR_EQ => [ STATUS_ACTIVE ]]]];
$update = [ CM_TST_FIELD_TEST_INT => 1319, CM_TST_FIELD_TEST_BOOL => true, CM_TST_FIELD_TEST_STRING => $jayne ];
$orderBy = [ CM_TST_FIELD_TEST_CDATE => STRING_SORT_DESC ];
$data = [ STRING_QUERY_DATA => $query, STRING_UPDATE_DATA => $update, STRING_ORDER_BY_DATA => $orderBy ];
$metaCopy = $meta;
// limit the update to five records
$metaCopy[META_LIMIT] = 5;
$request = [
BROKER_REQUEST => BROKER_REQUEST_UPDATE,
BROKER_DATA => $data,
BROKER_META_DATA => $metaCopy
];
if (!validateMetaData($request, $errors)) {
var_export($errors);
exit;
}
$objTest->_updateRecord($request[BROKER_DATA]);
$queryResults = (!gasCache::mapOutboundPayload($objTest, $errors)) ? $objTest->getData() : $objTest->getCK();
var_export($queryResults);
break;
case OP_CALL_SP :
$query = [ STRING_PROCEDURE_NAME => 'testProc1', STRING_PARAM_LIST => [ 70 ]];
$query = [ STRING_PROCEDURE_NAME => 'testProc0', STRING_PARAM_LIST => null ];
$query = [ STRING_PROCEDURE_NAME => 'testProc2', STRING_PARAM_LIST => [12]];
$objTest->execSP($query);
break;
case OP_UPDATE_DELETE :
$recordToken = '9A49D075-70B3-8087-407A-ADE7EBB06246';
$query = [ DB_TOKEN => [ OPERAND_NULL => [ OPERATOR_EQ => [ $recordToken ]]]];
$update = [ DB_STATUS => STATUS_DELETED ];
$objTest->addMeta(META_AUDIT_EVENT, 1); // simulate call to AdminIn broker audit restore event
$objTest->_updateRecord([ STRING_QUERY_DATA => $query, STRING_UPDATE_DATA => $update]);
var_export($objTest->eventMessages);
break;
case OP_UPDATE_MANY :
$newMeta = $meta;
$newMeta[META_LIMIT] = 3;
// $query = [ CM_TST_FIELD_TEST_STATUS => [ OPERAND_NULL => [ OPERATOR_EQ => [ STATUS_ACTIVE ]]]];
$query = [ CM_TST_FIELD_TEST_STRING => [ OPERAND_NULL => [ OPERATOR_DNE => [ $jayne ]]]];
$update = [CM_TST_FIELD_TEST_STRING => $jayne, CM_TST_FIELD_TEST_INT => 12345 ];
$orderBy = [ CM_TST_FIELD_TEST_CDATE => STRING_SORT_DESC ];
$request = [
BROKER_REQUEST => BROKER_REQUEST_UPDATE,
BROKER_DATA => [
STRING_QUERY_DATA => $query,
STRING_UPDATE_DATA => $update,
STRING_SORT_DATA => $orderBy
],
BROKER_META_DATA => $newMeta
];
if (!validateMetaData($request, $errors)) {
var_export($errors);
exit;
}
// $bc = new gacBrokerClient(BROKER_QUEUE_W, basename(__FILE__) . AT . __LINE__);
// if (!$bc->status) exit(ERROR_BROKER_CLIENT_DECLARE . BROKER_QUEUE_W);
// $payload = gzcompress(json_encode($request));
// $response = json_decode(gzuncompress($bc->call($payload)), true);
// var_export($response);
$objTest->replaceMeta($newMeta);
$objTest->_updateRecord($request[BROKER_DATA]);
$queryResults = (!gasCache::mapOutboundPayload($objTest, $errors)) ? $objTest->getData() : $objTest->getCK();
var_export($queryResults);
break;
}
if (!empty($objTest->eventMessages)) var_export($objTest->eventMessages);
if (!$objTest->status) {
echo 'test failed... ' . PHP_EOL;
if (!empty($objTest->eventMessages))
foreach ($objTest->eventMessages as $msg) consoleLog($res, CON_ERROR, $msg);
else
echo 'no messages in error stack...';
} else {
echo 'Test successfully completed' . $eos;
}