952 days continuous production uptime, 40k+ tp/s single node. Original corpo Bitbucket history not included — clean archive commit.
333 lines
13 KiB
PHP
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;
|
|
}
|