wiki.techinc.nl/tests/phpunit/includes/filebackend/SwiftFileBackendTest.php
kalle a646366e7c Allow x-delete-at and x-delete-after expiry headers
From:
https://docs.openstack.org/swift/latest/overview_expiring_objects.html

The swift-object-expirer offers scheduled deletion of objects.
The Swift client would use the X-Delete-At or X-Delete-After
headers during an object PUT or POST and the cluster would
automatically quit serving that object at the specified time
and would shortly thereafter remove the object from the system.

Bug: T280496
Change-Id: I886f3cea51f80d820841f8548941ca02a0a514c3
2021-04-26 17:41:30 +02:00

191 lines
4.6 KiB
PHP

<?php
use Wikimedia\TestingAccessWrapper;
/**
* @group FileRepo
* @group FileBackend
* @group medium
*
* @covers SwiftFileBackend
* @covers SwiftFileBackendDirList
* @covers SwiftFileBackendFileList
* @covers SwiftFileBackendList
*/
class SwiftFileBackendTest extends MediaWikiIntegrationTestCase {
/** @var TestingAccessWrapper|SwiftFileBackend */
private $backend;
protected function setUp() : void {
parent::setUp();
$this->backend = TestingAccessWrapper::newFromObject(
new SwiftFileBackend( [
'name' => 'local-swift-testing',
'class' => SwiftFileBackend::class,
'wikiId' => 'unit-testing',
'lockManager' => LockManagerGroup::singleton()->get( 'fsLockManager' ),
'swiftAuthUrl' => 'http://127.0.0.1:8080/auth', // unused
'swiftUser' => 'test:tester',
'swiftKey' => 'testing',
'swiftTempUrlKey' => 'b3968d0207b54ece87cccc06515a89d4' // unused
] )
);
}
/**
* @covers SwiftFileBackend::extractMutableContentHeaders
* @dataProvider provider_testExtractPostableContentHeaders
*/
public function testExtractPostableContentHeaders( $raw, $sanitized ) {
$hdrs = $this->backend->extractMutableContentHeaders( $raw );
$this->assertEquals( $hdrs, $sanitized, 'Correct extractPostableContentHeaders() result' );
}
public static function provider_testExtractPostableContentHeaders() {
return [
'empty' => [
[],
[]
],
[
[
'content-length' => 345,
'content-type' => 'image+bitmap/jpeg',
'content-disposition' => 'inline',
'content-duration' => 35.6363,
'content-Custom' => 'hello',
'x-content-custom' => 'hello'
],
[
'content-type' => 'image+bitmap/jpeg',
'content-disposition' => 'inline',
'content-duration' => 35.6363,
'content-custom' => 'hello',
'x-content-custom' => 'hello'
]
],
[
[
'content-length' => 345,
'content-type' => 'image+bitmap/jpeg',
'content-Disposition' => 'inline; filename=xxx; ' . str_repeat( 'o', 1024 ),
'content-duration' => 35.6363,
'content-custom' => 'hello',
'x-content-custom' => 'hello'
],
[
'content-type' => 'image+bitmap/jpeg',
'content-disposition' => 'inline; filename=xxx',
'content-duration' => 35.6363,
'content-custom' => 'hello',
'x-content-custom' => 'hello'
]
],
[
[
'content-length' => 345,
'content-type' => 'image+bitmap/jpeg',
'content-disposition' => 'filename=' . str_repeat( 'o', 1024 ) . ';inline',
'content-duration' => 35.6363,
'content-custom' => 'hello',
'x-content-custom' => 'hello'
],
[
'content-type' => 'image+bitmap/jpeg',
'content-disposition' => '',
'content-duration' => 35.6363,
'content-custom' => 'hello',
'x-content-custom' => 'hello'
]
],
[
[
'x-delete-at' => 'non numeric',
'x-delete-after' => 'non numeric',
'x-content-custom' => 'hello'
],
[
'x-content-custom' => 'hello'
]
],
[
[
'x-delete-at' => '12345',
'x-delete-after' => '12345'
],
[
'x-delete-at' => '12345',
'x-delete-after' => '12345'
]
],
[
[
'x-delete-at' => 12345,
'x-delete-after' => 12345
],
[
'x-delete-at' => 12345,
'x-delete-after' => 12345
]
]
];
}
/**
* @covers SwiftFileBackend::extractMetadataHeaders
* @dataProvider provider_testGetMetadataHeaders
*/
public function testGetMetadataHeaders( $raw, $sanitized ) {
$hdrs = $this->backend->extractMetadataHeaders( $raw );
$this->assertEquals( $hdrs, $sanitized, 'getMetadataHeaders() has expected result' );
}
public static function provider_testGetMetadataHeaders() {
return [
[
[
'content-length' => 345,
'content-custom' => 'hello',
'x-content-custom' => 'hello',
'x-object-meta-custom' => 5,
'x-object-meta-sha1Base36' => 'a3deadfg...',
],
[
'x-object-meta-custom' => 5,
'x-object-meta-sha1base36' => 'a3deadfg...',
]
]
];
}
/**
* @covers SwiftFileBackend::getMetadataFromHeaders
* @dataProvider provider_testGetMetadata
*/
public function testGetMetadata( $raw, $sanitized ) {
$hdrs = $this->backend->getMetadataFromHeaders( $raw );
$this->assertEquals( $hdrs, $sanitized, 'getMetadata() has expected result' );
}
public static function provider_testGetMetadata() {
return [
[
[
'content-length' => 345,
'content-custom' => 'hello',
'x-content-custom' => 'hello',
'x-object-meta-custom' => 5,
'x-object-meta-sha1Base36' => 'a3deadfg...',
],
[
'custom' => 5,
'sha1base36' => 'a3deadfg...',
]
]
];
}
}