2010-12-14 16:26:35 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Test the CDB reader/writer
|
Remove underscore from CdbReader_[DBA|PHP] classes and related file
Also gets rid of some CodeSniffer errors. There are more cases in core
(cache, pool counter, installer, database, load balancer, diff, CSS
Janus, less (argh!), media, parser, revdel, ...), that have class names
with underscores I'd be trying to get rid of later.
Change-Id: I33709c05e597978a5574a445fa43c583cbd7e12b
2013-11-04 10:02:48 +00:00
|
|
|
* @covers CdbWriterPHP
|
|
|
|
|
* @covers CdbWriterDBA
|
2010-12-14 16:26:35 +00:00
|
|
|
*/
|
2010-12-28 18:17:16 +00:00
|
|
|
class CdbTest extends MediaWikiTestCase {
|
2010-12-14 16:26:35 +00:00
|
|
|
|
2012-10-08 10:56:20 +00:00
|
|
|
protected function setUp() {
|
2012-10-23 17:02:36 +00:00
|
|
|
parent::setUp();
|
2010-12-14 16:26:35 +00:00
|
|
|
if ( !CdbReader::haveExtension() ) {
|
2012-04-30 07:49:31 +00:00
|
|
|
$this->markTestSkipped( 'Native CDB support is not available' );
|
2010-12-14 16:26:35 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2013-01-28 11:33:22 +00:00
|
|
|
/**
|
|
|
|
|
* @group medium
|
|
|
|
|
*/
|
2010-12-14 16:26:35 +00:00
|
|
|
public function testCdb() {
|
|
|
|
|
$dir = wfTempDir();
|
|
|
|
|
if ( !is_writable( $dir ) ) {
|
|
|
|
|
$this->markTestSkipped( "Temp dir isn't writable" );
|
|
|
|
|
}
|
|
|
|
|
|
2012-11-01 10:48:18 +00:00
|
|
|
$phpcdbfile = $this->getNewTempFile();
|
|
|
|
|
$dbacdbfile = $this->getNewTempFile();
|
|
|
|
|
|
Remove underscore from CdbReader_[DBA|PHP] classes and related file
Also gets rid of some CodeSniffer errors. There are more cases in core
(cache, pool counter, installer, database, load balancer, diff, CSS
Janus, less (argh!), media, parser, revdel, ...), that have class names
with underscores I'd be trying to get rid of later.
Change-Id: I33709c05e597978a5574a445fa43c583cbd7e12b
2013-11-04 10:02:48 +00:00
|
|
|
$w1 = new CdbWriterPHP( $phpcdbfile );
|
|
|
|
|
$w2 = new CdbWriterDBA( $dbacdbfile );
|
2010-12-14 16:26:35 +00:00
|
|
|
|
|
|
|
|
$data = array();
|
|
|
|
|
for ( $i = 0; $i < 1000; $i++ ) {
|
|
|
|
|
$key = $this->randomString();
|
|
|
|
|
$value = $this->randomString();
|
|
|
|
|
$w1->set( $key, $value );
|
|
|
|
|
$w2->set( $key, $value );
|
|
|
|
|
|
|
|
|
|
if ( !isset( $data[$key] ) ) {
|
|
|
|
|
$data[$key] = $value;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$w1->close();
|
|
|
|
|
$w2->close();
|
|
|
|
|
|
|
|
|
|
$this->assertEquals(
|
2012-11-01 10:48:18 +00:00
|
|
|
md5_file( $phpcdbfile ),
|
|
|
|
|
md5_file( $dbacdbfile ),
|
2010-12-14 16:26:35 +00:00
|
|
|
'same hash'
|
|
|
|
|
);
|
|
|
|
|
|
Remove underscore from CdbReader_[DBA|PHP] classes and related file
Also gets rid of some CodeSniffer errors. There are more cases in core
(cache, pool counter, installer, database, load balancer, diff, CSS
Janus, less (argh!), media, parser, revdel, ...), that have class names
with underscores I'd be trying to get rid of later.
Change-Id: I33709c05e597978a5574a445fa43c583cbd7e12b
2013-11-04 10:02:48 +00:00
|
|
|
$r1 = new CdbReaderPHP( $phpcdbfile );
|
|
|
|
|
$r2 = new CdbReaderDBA( $dbacdbfile );
|
2010-12-14 16:26:35 +00:00
|
|
|
|
|
|
|
|
foreach ( $data as $key => $value ) {
|
|
|
|
|
if ( $key === '' ) {
|
|
|
|
|
// Known bug
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
$v1 = $r1->get( $key );
|
|
|
|
|
$v2 = $r2->get( $key );
|
|
|
|
|
|
|
|
|
|
$v1 = $v1 === false ? '(not found)' : $v1;
|
|
|
|
|
$v2 = $v2 === false ? '(not found)' : $v2;
|
|
|
|
|
|
|
|
|
|
# cdbAssert( 'Mismatch', $key, $v1, $v2 );
|
|
|
|
|
$this->cdbAssert( "PHP error", $key, $v1, $value );
|
|
|
|
|
$this->cdbAssert( "DBA error", $key, $v2, $value );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private function randomString() {
|
|
|
|
|
$len = mt_rand( 0, 10 );
|
|
|
|
|
$s = '';
|
|
|
|
|
for ( $j = 0; $j < $len; $j++ ) {
|
|
|
|
|
$s .= chr( mt_rand( 0, 255 ) );
|
|
|
|
|
}
|
2013-04-26 12:00:22 +00:00
|
|
|
|
2010-12-14 16:26:35 +00:00
|
|
|
return $s;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private function cdbAssert( $msg, $key, $v1, $v2 ) {
|
|
|
|
|
$this->assertEquals(
|
|
|
|
|
$v2,
|
|
|
|
|
$v1,
|
|
|
|
|
$msg . ', k=' . bin2hex( $key )
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|