Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F4154331
BaseDumpTest.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
10 KB
Referenced Files
None
Subscribers
None
BaseDumpTest.php
View Options
<?php
namespace
MediaWiki\Tests\Maintenance
;
use
BaseDump
;
use
MediaWiki\Revision\SlotRecord
;
use
MediaWikiIntegrationTestCase
;
/**
* @group Dump
* @covers \BaseDump
*/
class
BaseDumpTest
extends
MediaWikiIntegrationTestCase
{
/**
* @var BaseDump The BaseDump instance used within a test.
*
* If set, this BaseDump gets automatically closed in tearDown.
*/
private
$dump
=
null
;
protected
function
tearDown
():
void
{
if
(
$this
->
dump
!==
null
)
{
$this
->
dump
->
close
();
}
// T39458, parent teardown need to be done after closing the
// dump or it might cause some permissions errors.
parent
::
tearDown
();
}
/**
* asserts that a prefetch yields an expected string
*
* @param string|null $expected The exepcted result of the prefetch
* @param int $page The page number to prefetch the text for
* @param int $revision The revision number to prefetch the text for
* @param string $slot The role name of the slot to fetch
*/
private
function
assertPrefetchEquals
(
$expected
,
$page
,
$revision
,
$slot
=
SlotRecord
::
MAIN
)
{
$this
->
assertEquals
(
$expected
,
$this
->
dump
->
prefetch
(
$page
,
$revision
,
$slot
),
"Prefetch of page $page revision $revision"
);
}
public
function
testSequential
()
{
$fname
=
$this
->
setUpPrefetch
();
$this
->
dump
=
new
BaseDump
(
$fname
);
$this
->
assertPrefetchEquals
(
"BackupDumperTestP1Text1"
,
1
,
1
);
$this
->
assertPrefetchEquals
(
"BackupDumperTestP1Text1aux"
,
1
,
1
,
'aux'
);
$this
->
assertPrefetchEquals
(
"BackupDumperTestP2Text1"
,
2
,
2
);
$this
->
assertPrefetchEquals
(
"BackupDumperTestP2Text4 some additional Text"
,
2
,
5
);
$this
->
assertPrefetchEquals
(
"Talk about BackupDumperTestP1 Text1"
,
4
,
8
);
}
public
function
testSynchronizeSlotMissToRevision
()
{
$fname
=
$this
->
setUpPrefetch
();
$this
->
dump
=
new
BaseDump
(
$fname
);
$this
->
assertPrefetchEquals
(
"BackupDumperTestP1Text1aux"
,
1
,
1
,
'aux'
);
$this
->
assertPrefetchEquals
(
null
,
1
,
1
,
'xyzzy'
);
$this
->
assertPrefetchEquals
(
"BackupDumperTestP2Text1"
,
2
,
2
);
$this
->
assertPrefetchEquals
(
null
,
2
,
2
,
'aux'
);
$this
->
assertPrefetchEquals
(
"BackupDumperTestP2Text4 some additional Text"
,
2
,
5
);
}
public
function
testSynchronizeRevisionMissToRevision
()
{
$fname
=
$this
->
setUpPrefetch
();
$this
->
dump
=
new
BaseDump
(
$fname
);
$this
->
assertPrefetchEquals
(
"BackupDumperTestP2Text1"
,
2
,
2
);
$this
->
assertPrefetchEquals
(
null
,
2
,
3
);
$this
->
assertPrefetchEquals
(
"BackupDumperTestP2Text4 some additional Text"
,
2
,
5
);
}
public
function
testSynchronizeRevisionMissToPage
()
{
$fname
=
$this
->
setUpPrefetch
();
$this
->
dump
=
new
BaseDump
(
$fname
);
$this
->
assertPrefetchEquals
(
"BackupDumperTestP2Text1"
,
2
,
2
);
$this
->
assertPrefetchEquals
(
null
,
2
,
40
);
$this
->
assertPrefetchEquals
(
"Talk about BackupDumperTestP1 Text1"
,
4
,
8
);
}
public
function
testSynchronizePageMiss
()
{
$fname
=
$this
->
setUpPrefetch
();
$this
->
dump
=
new
BaseDump
(
$fname
);
$this
->
assertPrefetchEquals
(
"BackupDumperTestP2Text1"
,
2
,
2
);
$this
->
assertPrefetchEquals
(
null
,
3
,
40
);
$this
->
assertPrefetchEquals
(
"Talk about BackupDumperTestP1 Text1"
,
4
,
8
);
}
public
function
testPageMissAtEnd
()
{
$fname
=
$this
->
setUpPrefetch
();
$this
->
dump
=
new
BaseDump
(
$fname
);
$this
->
assertPrefetchEquals
(
"BackupDumperTestP2Text1"
,
2
,
2
);
$this
->
assertPrefetchEquals
(
null
,
6
,
40
);
}
public
function
testRevisionMissAtEnd
()
{
$fname
=
$this
->
setUpPrefetch
();
$this
->
dump
=
new
BaseDump
(
$fname
);
$this
->
assertPrefetchEquals
(
"BackupDumperTestP2Text1"
,
2
,
2
);
$this
->
assertPrefetchEquals
(
null
,
4
,
40
);
}
public
function
testSynchronizePageMissAtStart
()
{
$fname
=
$this
->
setUpPrefetch
();
$this
->
dump
=
new
BaseDump
(
$fname
);
$this
->
assertPrefetchEquals
(
null
,
0
,
2
);
$this
->
assertPrefetchEquals
(
"BackupDumperTestP2Text1"
,
2
,
2
);
}
public
function
testSynchronizeRevisionMissAtStart
()
{
$fname
=
$this
->
setUpPrefetch
();
$this
->
dump
=
new
BaseDump
(
$fname
);
$this
->
assertPrefetchEquals
(
null
,
1
,
-
2
);
$this
->
assertPrefetchEquals
(
"BackupDumperTestP2Text1"
,
2
,
2
);
}
public
function
testSequentialAcrossFiles
()
{
$fname1
=
$this
->
setUpPrefetch
(
[
1
]
);
$fname2
=
$this
->
setUpPrefetch
(
[
2
,
4
]
);
$this
->
dump
=
new
BaseDump
(
$fname1
.
";"
.
$fname2
);
$this
->
assertPrefetchEquals
(
"BackupDumperTestP1Text1"
,
1
,
1
);
$this
->
assertPrefetchEquals
(
"BackupDumperTestP2Text1"
,
2
,
2
);
$this
->
assertPrefetchEquals
(
"BackupDumperTestP2Text4 some additional Text"
,
2
,
5
);
$this
->
assertPrefetchEquals
(
"Talk about BackupDumperTestP1 Text1"
,
4
,
8
);
}
public
function
testSynchronizeSkipAcrossFile
()
{
$fname1
=
$this
->
setUpPrefetch
(
[
1
]
);
$fname2
=
$this
->
setUpPrefetch
(
[
2
]
);
$fname3
=
$this
->
setUpPrefetch
(
[
4
]
);
$this
->
dump
=
new
BaseDump
(
$fname1
.
";"
.
$fname2
.
";"
.
$fname3
);
$this
->
assertPrefetchEquals
(
"BackupDumperTestP1Text1"
,
1
,
1
);
$this
->
assertPrefetchEquals
(
"Talk about BackupDumperTestP1 Text1"
,
4
,
8
);
}
public
function
testSynchronizeMissInWholeFirstFile
()
{
$fname1
=
$this
->
setUpPrefetch
(
[
1
]
);
$fname2
=
$this
->
setUpPrefetch
(
[
2
]
);
$this
->
dump
=
new
BaseDump
(
$fname1
.
";"
.
$fname2
);
$this
->
assertPrefetchEquals
(
"BackupDumperTestP2Text1"
,
2
,
2
);
}
/**
* Constructs a temporary file that can be used for prefetching
*
* The temporary file is removed by DumpBackup upon tearDown.
*
* @param array $requested_pages The indices of the page parts that should
* go into the prefetch file. 1,2,4 are available.
* @return string The file name of the created temporary file
*/
private
function
setUpPrefetch
(
$requested_pages
=
[
1
,
2
,
4
]
)
{
// The file name, where we store the prepared prefetch file
$fname
=
$this
->
getNewTempFile
();
// The header of every prefetch file
$header
=
'<mediawiki>
<siteinfo>
<sitename>wikisvn</sitename>
<base>http://localhost/wiki-svn/index.php/Main_Page</base>
<generator>MediaWiki 1.21alpha</generator>
<case>first-letter</case>
<namespaces>
<namespace key="-2" case="first-letter">Media</namespace>
<namespace key="-1" case="first-letter">Special</namespace>
<namespace key="0" case="first-letter" />
<namespace key="1" case="first-letter">Talk</namespace>
<namespace key="2" case="first-letter">User</namespace>
<namespace key="3" case="first-letter">User talk</namespace>
<namespace key="4" case="first-letter">Wikisvn</namespace>
<namespace key="5" case="first-letter">Wikisvn talk</namespace>
<namespace key="6" case="first-letter">File</namespace>
<namespace key="7" case="first-letter">File talk</namespace>
<namespace key="8" case="first-letter">MediaWiki</namespace>
<namespace key="9" case="first-letter">MediaWiki talk</namespace>
<namespace key="10" case="first-letter">Template</namespace>
<namespace key="11" case="first-letter">Template talk</namespace>
<namespace key="12" case="first-letter">Help</namespace>
<namespace key="13" case="first-letter">Help talk</namespace>
<namespace key="14" case="first-letter">Category</namespace>
<namespace key="15" case="first-letter">Category talk</namespace>
</namespaces>
</siteinfo>
'
;
// An array holding the pages that are available for prefetch
$available_pages
=
[];
// Simple plain page
$available_pages
[
1
]
=
' <page>
<title>BackupDumperTestP1</title>
<ns>0</ns>
<id>1</id>
<revision>
<id>1</id>
<timestamp>2012-04-01T16:46:05Z</timestamp>
<contributor>
<ip>127.0.0.1</ip>
</contributor>
<comment>BackupDumperTestP1Summary1</comment>
<text xml:space="preserve">BackupDumperTestP1Text1</text>
<model name="wikitext">1</model>
<format mime="text/x-wiki">1</format>
<content>
<role>aux</role>
<origin>2</origin>
<model>wikitext</model>
<format>text/x-wiki</format>
<text sha1="deadbeef" xml:space="preserve">BackupDumperTestP1Text1aux</text>
</content>
<sha1>0bolhl6ol7i6x0e7yq91gxgaan39j87</sha1>
</revision>
</page>
'
;
// Page with more than one revisions. Hole in rev ids.
$available_pages
[
2
]
=
' <page>
<title>BackupDumperTestP2</title>
<ns>0</ns>
<id>2</id>
<revision>
<id>2</id>
<timestamp>2012-04-01T16:46:05Z</timestamp>
<contributor>
<ip>127.0.0.1</ip>
</contributor>
<comment>BackupDumperTestP2Summary1</comment>
<sha1>jprywrymfhysqllua29tj3sc7z39dl2</sha1>
<text xml:space="preserve">BackupDumperTestP2Text1</text>
<model name="wikitext">1</model>
<format mime="text/x-wiki">1</format>
</revision>
<revision>
<id>5</id>
<parentid>2</parentid>
<timestamp>2012-04-01T16:46:05Z</timestamp>
<contributor>
<ip>127.0.0.1</ip>
</contributor>
<comment>BackupDumperTestP2Summary4 extra</comment>
<sha1>6o1ciaxa6pybnqprmungwofc4lv00wv</sha1>
<text xml:space="preserve">BackupDumperTestP2Text4 some additional Text</text>
<model name="wikitext">1</model>
<format mime="text/x-wiki">1</format>
</revision>
</page>
'
;
// Page with id higher than previous id + 1
$available_pages
[
4
]
=
' <page>
<title>Talk:BackupDumperTestP1</title>
<ns>1</ns>
<id>4</id>
<revision>
<id>8</id>
<timestamp>2012-04-01T16:46:05Z</timestamp>
<contributor>
<ip>127.0.0.1</ip>
</contributor>
<comment>Talk BackupDumperTestP1 Summary1</comment>
<sha1>nktofwzd0tl192k3zfepmlzxoax1lpe</sha1>
<model name="wikitext">1</model>
<format mime="text/x-wiki">1</format>
<text xml:space="preserve">Talk about BackupDumperTestP1 Text1</text>
</revision>
</page>
'
;
// The common ending for all files
$tail
=
'</mediawiki>
'
;
// Putting together the content of the prefetch files
$content
=
$header
;
foreach
(
$requested_pages
as
$i
)
{
$this
->
assertArrayHasKey
(
$i
,
$available_pages
,
"Check for availability of requested page "
.
$i
);
$content
.=
$available_pages
[
$i
];
}
$content
.=
$tail
;
$this
->
assertEquals
(
strlen
(
$content
),
file_put_contents
(
$fname
,
$content
),
"Length of prepared prefetch"
);
return
$fname
;
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Aug 19 2026, 21:08 (7 w, 5 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
3c/55/5a6860b2bb3b39755026fcad3479
Default Alt Text
BaseDumpTest.php (10 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment