* PRESEND/POSTSEND constants can now be used in addUpdate() and addCallableUpdate() to control when the update runs. This is useful for updates that may report errors the client should see or to just get a head start on queued or pubsub based updates like CDN purges. The OutputPage::output() method can easily take a few 100ms. * Removed some argument b/c code from doUpdates(). * Also moved DeferrableUpdate to a separate file. Change-Id: I9831fe890f9f68f9ad8c4f4bba6921a8f29ba666
101 lines
2.3 KiB
PHP
101 lines
2.3 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @group DeferredUpdates
|
|
*/
|
|
class DeferredUpdatesTest extends MediaWikiTestCase {
|
|
public function testDoUpdatesWeb() {
|
|
$this->setMwGlobals( 'wgCommandLineMode', false );
|
|
|
|
$updates = array(
|
|
'1' => 'deferred update 1',
|
|
'2' => 'deferred update 2',
|
|
'3' => 'deferred update 3',
|
|
'2-1' => 'deferred update 1 within deferred update 2',
|
|
);
|
|
DeferredUpdates::addCallableUpdate(
|
|
function () use ( $updates ) {
|
|
echo $updates['1'];
|
|
}
|
|
);
|
|
DeferredUpdates::addCallableUpdate(
|
|
function () use ( $updates ) {
|
|
echo $updates['2'];
|
|
DeferredUpdates::addCallableUpdate(
|
|
function () use ( $updates ) {
|
|
echo $updates['2-1'];
|
|
}
|
|
);
|
|
}
|
|
);
|
|
DeferredUpdates::addCallableUpdate(
|
|
function () use ( $updates ) {
|
|
echo $updates[3];
|
|
}
|
|
);
|
|
|
|
$this->expectOutputString( implode( '', $updates ) );
|
|
|
|
DeferredUpdates::doUpdates();
|
|
|
|
$x = null;
|
|
$y = null;
|
|
DeferredUpdates::addCallableUpdate(
|
|
function () use ( &$x ) {
|
|
$x = 'Sherity';
|
|
},
|
|
DeferredUpdates::PRESEND
|
|
);
|
|
DeferredUpdates::addCallableUpdate(
|
|
function () use ( &$y ) {
|
|
$y = 'Marychu';
|
|
},
|
|
DeferredUpdates::POSTSEND
|
|
);
|
|
|
|
$this->assertNull( $x, "Update not run yet" );
|
|
$this->assertNull( $y, "Update not run yet" );
|
|
|
|
DeferredUpdates::doUpdates( 'run', DeferredUpdates::PRESEND );
|
|
$this->assertEquals( "Sherity", $x, "PRESEND update ran" );
|
|
$this->assertNull( $y, "POSTSEND update not run yet" );
|
|
|
|
DeferredUpdates::doUpdates( 'run', DeferredUpdates::POSTSEND );
|
|
$this->assertEquals( "Marychu", $y, "POSTSEND update ran" );
|
|
}
|
|
|
|
public function testDoUpdatesCLI() {
|
|
$this->setMwGlobals( 'wgCommandLineMode', true );
|
|
|
|
$updates = array(
|
|
'1' => 'deferred update 1',
|
|
'2' => 'deferred update 2',
|
|
'2-1' => 'deferred update 1 within deferred update 2',
|
|
'3' => 'deferred update 3',
|
|
);
|
|
DeferredUpdates::addCallableUpdate(
|
|
function () use ( $updates ) {
|
|
echo $updates['1'];
|
|
}
|
|
);
|
|
DeferredUpdates::addCallableUpdate(
|
|
function () use ( $updates ) {
|
|
echo $updates['2'];
|
|
DeferredUpdates::addCallableUpdate(
|
|
function () use ( $updates ) {
|
|
echo $updates['2-1'];
|
|
}
|
|
);
|
|
}
|
|
);
|
|
DeferredUpdates::addCallableUpdate(
|
|
function () use ( $updates ) {
|
|
echo $updates[3];
|
|
}
|
|
);
|
|
|
|
$this->expectOutputString( implode( '', $updates ) );
|
|
|
|
DeferredUpdates::doUpdates();
|
|
}
|
|
}
|