$data1, 'one' => $data1, 'two' => $data1, 'three' => $data1, 'four' => $data1, 'five' => $data1, 'six' => $data1, 'seven' => $data1, 'eight' => $data1, 'nine' => $data1); $data = array($data2, $data2, $data2, $data2, $data2, $data2, $data2, $data2, $data2, $data2); $keys = array('zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'); // Begin execution $test_results=array(); $is_web = isset($_SERVER['REQUEST_METHOD']); $xd = extension_loaded('xdebug') && ini_get('xdebug.profiler_enable'); if ($xd) $num_tests = 1; else $num_tests = 10; $title = 'XML-RPC Benchmark Tests'; if($is_web) { echo "\n\n
\n\n";
}
else
{
echo "$title\n\n";
}
if($is_web)
{
echo "Using lib version: $xmlrpcVersion on PHP version: ".phpversion()."
\n";
if ($xd) echo "XDEBUG profiling enabled: skipping remote tests. Trace file is: ".htmlspecialchars(xdebug_get_profiler_filename())."
\n";
flush();
ob_flush();
}
else
{
echo "Using lib version: $xmlrpcVersion on PHP version: ".phpversion()."\n";
if ($xd) echo "XDEBUG profiling enabled: skipping remote tests\nTrace file is: ".xdebug_get_profiler_filename()."\n";
}
// test 'old style' data encoding vs. 'automatic style' encoding
begin_test('Data encoding (large array)', 'manual encoding');
for ($i = 0; $i < $num_tests; $i++)
{
$vals = array();
for ($j = 0; $j < 10; $j++)
{
$valarray = array();
foreach ($data[$j] as $key => $val)
{
$values = array();
$values[] = new xmlrpcval($val[0], 'int');
$values[] = new xmlrpcval($val[1], 'double');
$values[] = new xmlrpcval($val[2], 'string');
$values[] = new xmlrpcval($val[3], 'boolean');
$values[] = new xmlrpcval($val[4], 'dateTime.iso8601');
$values[] = new xmlrpcval($val[5], 'int');
$values[] = new xmlrpcval($val[6], 'double');
$values[] = new xmlrpcval($val[7], 'string');
$values[] = new xmlrpcval($val[8], 'boolean');
$values[] = new xmlrpcval($val[9], 'dateTime.iso8601');
$valarray[$key] = new xmlrpcval($values, 'array');
}
$vals[] = new xmlrpcval($valarray, 'struct');
}
$value = new xmlrpcval($vals, 'array');
$out = $value->serialize();
}
end_test('Data encoding (large array)', 'manual encoding', $out);
begin_test('Data encoding (large array)', 'automatic encoding');
for ($i = 0; $i < $num_tests; $i++)
{
$value = php_xmlrpc_encode($data, array('auto_dates'));
$out = $value->serialize();
}
end_test('Data encoding (large array)', 'automatic encoding', $out);
if (function_exists('xmlrpc_set_type'))
{
begin_test('Data encoding (large array)', 'xmlrpc-epi encoding');
for ($i = 0; $i < $num_tests; $i++)
{
for ($j = 0; $j < 10; $j++)
foreach ($keys as $k)
{
xmlrpc_set_type($data[$j][$k][4], 'datetime');
xmlrpc_set_type($data[$j][$k][8], 'datetime');
}
$out = xmlrpc_encode($data);
}
end_test('Data encoding (large array)', 'xmlrpc-epi encoding', $out);
}
// test 'old style' data decoding vs. 'automatic style' decoding
$dummy = new xmlrpcmsg('');
$out = new xmlrpcresp($value);
$in = ''."\n".$out->serialize();
begin_test('Data decoding (large array)', 'manual decoding');
for ($i = 0; $i < $num_tests; $i++)
{
$response = $dummy->ParseResponse($in, true);
$value = $response->value();
$result = array();
for ($k = 0; $k < $value->arraysize(); $k++)
{
$val1 = $value->arraymem($k);
$out = array();
while (list($name, $val) = $val1->structeach())
{
$out[$name] = array();
for ($j = 0; $j < $val->arraysize(); $j++)
{
$data = $val->arraymem($j);
$out[$name][] = $data->scalarval();
}
} // while
$result[] = $out;
}
}
end_test('Data decoding (large array)', 'manual decoding', $result);
begin_test('Data decoding (large array)', 'automatic decoding');
for ($i = 0; $i < $num_tests; $i++)
{
$response = $dummy->ParseResponse($in, true, 'phpvals');
$value = $response->value();
}
end_test('Data decoding (large array)', 'automatic decoding', $value);
if (function_exists('xmlrpc_decode'))
{
begin_test('Data decoding (large array)', 'xmlrpc-epi decoding');
for ($i = 0; $i < $num_tests; $i++)
{
$response = $dummy->ParseResponse($in, true, 'xml');
$value = xmlrpc_decode($response->value());
}
end_test('Data decoding (large array)', 'xmlrpc-epi decoding', $value);
}
if (!$xd)
{
/// test multicall vs. many calls vs. keep-alives
$value = php_xmlrpc_encode($data1, array('auto_dates'));
$msg = new xmlrpcmsg('interopEchoTests.echoValue', array($value));
$msgs=array();
for ($i = 0; $i < 25; $i++)
$msgs[] = $msg;
$server = explode(':', $args['LOCALSERVER']);
if(count($server) > 1)
{
$c = new xmlrpc_client($args['URI'], $server[0], $server[1]);
}
else
{
$c = new xmlrpc_client($args['URI'], $args['LOCALSERVER']);
}
// do not interfere with http compression
$c->accepted_compression = array();
//$c->debug=true;
if (function_exists('gzinflate')) {
$c->accepted_compression = null;
}
begin_test('Repeated send (small array)', 'http 10');
$response = array();
for ($i = 0; $i < 25; $i++)
{
$resp = $c->send($msg);
$response[] = $resp->value();
}
end_test('Repeated send (small array)', 'http 10', $response);
if (function_exists('curl_init'))
{
begin_test('Repeated send (small array)', 'http 11 w. keep-alive');
$response = array();
for ($i = 0; $i < 25; $i++)
{
$resp = $c->send($msg, 10, 'http11');
$response[] = $resp->value();
}
end_test('Repeated send (small array)', 'http 11 w. keep-alive', $response);
$c->keepalive = false;
begin_test('Repeated send (small array)', 'http 11');
$response = array();
for ($i = 0; $i < 25; $i++)
{
$resp = $c->send($msg, 10, 'http11');
$response[] = $resp->value();
}
end_test('Repeated send (small array)', 'http 11', $response);
}
begin_test('Repeated send (small array)', 'multicall');
$response = $c->send($msgs);
foreach ($response as $key =>& $val)
{
$val = $val->value();
}
end_test('Repeated send (small array)', 'multicall', $response);
if (function_exists('gzinflate'))
{
$c->accepted_compression = array('gzip');
$c->request_compression = 'gzip';
begin_test('Repeated send (small array)', 'http 10 w. compression');
$response = array();
for ($i = 0; $i < 25; $i++)
{
$resp = $c->send($msg);
$response[] = $resp->value();
}
end_test('Repeated send (small array)', 'http 10 w. compression', $response);
if (function_exists('curl_init'))
{
begin_test('Repeated send (small array)', 'http 11 w. keep-alive and compression');
$response = array();
for ($i = 0; $i < 25; $i++)
{
$resp = $c->send($msg, 10, 'http11');
$response[] = $resp->value();
}
end_test('Repeated send (small array)', 'http 11 w. keep-alive and compression', $response);
$c->keepalive = false;
begin_test('Repeated send (small array)', 'http 11 w. compression');
$response = array();
for ($i = 0; $i < 25; $i++)
{
$resp = $c->send($msg, 10, 'http11');
$response[] = $resp->value();
}
end_test('Repeated send (small array)', 'http 11 w. compression', $response);
}
begin_test('Repeated send (small array)', 'multicall w. compression');
$response = $c->send($msgs);
foreach ($response as $key =>& $val)
{
$val = $val->value();
}
end_test('Repeated send (small array)', 'multicall w. compression', $response);
}
} // end of 'if no xdebug profiling'
echo "\n";
foreach($test_results as $test => $results)
{
echo "\nTEST: $test\n";
foreach ($results as $case => $data)
echo " $case: {$data['time']} secs - Output data CRC: ".crc32(serialize($data['result']))."\n";
}
if($is_web)
{
echo "\n\n\n\n";
}