WebP Express CloudHost.es Fix v0.25.9-cloudhost
✅ Fixed bulk conversion getting stuck on missing files ✅ Added robust error handling and timeout protection ✅ Improved JavaScript response parsing ✅ Added file existence validation ✅ Fixed missing PHP class imports ✅ Added comprehensive try-catch error recovery 🔧 Key fixes: - File existence checks before conversion attempts - 30-second timeout protection per file - Graceful handling of 500 errors and JSON parsing issues - Automatic continuation to next file on failures - Cache busting for JavaScript updates 🎯 Result: Bulk conversion now completes successfully even with missing files 🚀 Generated with Claude Code (https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
94
vendor/rosell-dk/htaccess-capability-tester/tests/Testers/AddTypeTesterTest.php
vendored
Normal file
94
vendor/rosell-dk/htaccess-capability-tester/tests/Testers/AddTypeTesterTest.php
vendored
Normal file
@@ -0,0 +1,94 @@
|
||||
<?php
|
||||
/*
|
||||
subdir: add-type
|
||||
files:
|
||||
- filename: '.htaccess'
|
||||
content: |
|
||||
<IfModule mod_mime.c>
|
||||
AddType image/gif .test
|
||||
</IfModule>
|
||||
- filename: 'request-me.test'
|
||||
content: 'hi'
|
||||
request:
|
||||
url: 'request-me.test'
|
||||
|
||||
interpretation:
|
||||
- ['success', 'headers', 'contains-key-value', 'Content-Type', 'image/gif']
|
||||
- ['inconclusive', 'status-code', 'not-equals', '200']
|
||||
- ['failure', 'headers', 'not-contains-key-value', 'Content-Type', 'image/gif']
|
||||
|
||||
----
|
||||
|
||||
Tested:
|
||||
|
||||
| Case | Test result
|
||||
| ------------------------------ | ------------------
|
||||
| .htaccess disabled | failure
|
||||
| forbidden directives (fatal) | failure
|
||||
| access denied | inconclusive
|
||||
| directive has no effect | failure
|
||||
| it works | success
|
||||
*/
|
||||
|
||||
|
||||
namespace HtaccessCapabilityTester\Tests\Testers;
|
||||
|
||||
use HtaccessCapabilityTester\HttpResponse;
|
||||
use HtaccessCapabilityTester\Testers\AddTypeTester;
|
||||
use HtaccessCapabilityTester\Tests\FakeServer;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class AddTypeTesterTest extends BasisTestCase
|
||||
{
|
||||
|
||||
public function testHtaccessDisabled()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->disableHtaccess();
|
||||
$testResult = $fakeServer->runTester(new AddTypeTester());
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
public function testDisallowedDirectivesFatal()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->disallowAllDirectives('fatal');
|
||||
$testResult = $fakeServer->runTester(new AddTypeTester());
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
public function testAccessAllDenied()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->denyAllAccess();
|
||||
$testResult = $fakeServer->runTester(new AddTypeTester());
|
||||
$this->assertInconclusive($testResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test when the directive has no effect.
|
||||
* This could happen when:
|
||||
* - The directive is forbidden (non-fatal)
|
||||
* - The module is not loaded
|
||||
*/
|
||||
public function testDirectiveHasNoEffect()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/add-type/request-me.test' => new HttpResponse('hi', '200', [])
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new AddTypeTester());
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
public function testSuccess()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/add-type/request-me.test' => new HttpResponse('hi', '200', ['Content-Type' => 'image/gif'])
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new AddTypeTester());
|
||||
$this->assertSuccess($testResult);
|
||||
}
|
||||
|
||||
}
|
||||
72
vendor/rosell-dk/htaccess-capability-tester/tests/Testers/BasisTestCase.php
vendored
Normal file
72
vendor/rosell-dk/htaccess-capability-tester/tests/Testers/BasisTestCase.php
vendored
Normal file
@@ -0,0 +1,72 @@
|
||||
<?php
|
||||
|
||||
namespace HtaccessCapabilityTester\Tests\Testers;
|
||||
|
||||
use HtaccessCapabilityTester\HtaccessCapabilityTester;
|
||||
use HtaccessCapabilityTester\TestResult;
|
||||
|
||||
use HtaccessCapabilityTester\Testers\RewriteTester;
|
||||
use HtaccessCapabilityTester\Testers\AbstractTester;
|
||||
|
||||
use HtaccessCapabilityTester\Tests\FakeServer;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class BasisTestCase extends TestCase
|
||||
{
|
||||
|
||||
protected function assertSuccess($testResult)
|
||||
{
|
||||
$this->assertTrue($testResult->status, $testResult->info);
|
||||
}
|
||||
|
||||
protected function assertFailure($testResult)
|
||||
{
|
||||
$this->assertFalse($testResult->status, $testResult->info);
|
||||
}
|
||||
|
||||
protected function assertInconclusive($testResult)
|
||||
{
|
||||
$this->assertNull($testResult->status, $testResult->info);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param TestResult $testResult
|
||||
* @param string $expectedResult failure|success|inconclusive
|
||||
*
|
||||
*/
|
||||
/*
|
||||
protected function assertTestResult($testResult, $expectedResult)
|
||||
{
|
||||
if ($expectedResult == 'failure') {
|
||||
$this->assertFalse($testResult->status);
|
||||
} elseif ($expectedResult == 'success') {
|
||||
$this->assertTrue($testResult->status);
|
||||
} elseif ($expectedResult == 'inconclusive') {
|
||||
$this->assertNull($testResult->status);
|
||||
}
|
||||
}*/
|
||||
|
||||
/**
|
||||
* @param AbstractTester $tester
|
||||
* @param array $expectedBehaviour
|
||||
* @param FakeServer $fakeServer
|
||||
*/
|
||||
/*
|
||||
protected function behaviourOnFakeServer($tester, $expectedBehaviour, $fakeServer)
|
||||
{
|
||||
$tester->setTestFilesLineUpper($fakeServer);
|
||||
$tester->setHttpRequester($fakeServer);
|
||||
|
||||
// $hct = Helper::getTesterUsingFakeServer($fakeServer);
|
||||
|
||||
if (isset($expectedBehaviour['htaccessDisabled'])) {
|
||||
$fakeServer->disallowAllDirectives = true;
|
||||
$testResult = $tester->run('', '');
|
||||
$this->assertTestResult($testResult, );
|
||||
|
||||
$this->assertFailure($testResult->status);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
135
vendor/rosell-dk/htaccess-capability-tester/tests/Testers/ContentDigestTesterTest.php
vendored
Normal file
135
vendor/rosell-dk/htaccess-capability-tester/tests/Testers/ContentDigestTesterTest.php
vendored
Normal file
@@ -0,0 +1,135 @@
|
||||
<?php
|
||||
/*
|
||||
subdir: content-digest
|
||||
subtests:
|
||||
- subdir: on
|
||||
files:
|
||||
- filename: '.htaccess'
|
||||
content: |
|
||||
ContentDigest On
|
||||
- filename: 'request-me.txt'
|
||||
content: 'hi'
|
||||
request:
|
||||
url: 'request-me.txt'
|
||||
interpretation:
|
||||
- ['failure', 'headers', 'not-contains-key', 'Content-MD5'],
|
||||
|
||||
- subdir: off
|
||||
files:
|
||||
- filename: '.htaccess'
|
||||
content: |
|
||||
ContentDigest Off
|
||||
- filename: 'request-me.txt'
|
||||
content: 'hi'
|
||||
request:
|
||||
url: 'request-me.txt'
|
||||
|
||||
interpretation:
|
||||
- ['failure', 'headers', 'contains-key', 'Content-MD5']
|
||||
- ['inconclusive', 'status-code', 'not-equals', '200']
|
||||
- ['success', 'status-code', 'equals', '200']
|
||||
----
|
||||
|
||||
Tested:
|
||||
|
||||
Server setup | Test result
|
||||
--------------------------------------------------
|
||||
.htaccess disabled | failure
|
||||
forbidden directives (fatal) | failure (Required override: Options)
|
||||
access denied | inconclusive (it might be allowed to other files)
|
||||
directive has no effect | failure
|
||||
| success
|
||||
|
||||
*/
|
||||
|
||||
|
||||
namespace HtaccessCapabilityTester\Tests\Testers;
|
||||
|
||||
use HtaccessCapabilityTester\HttpResponse;
|
||||
use HtaccessCapabilityTester\Testers\ContentDigestTester;
|
||||
use HtaccessCapabilityTester\Tests\FakeServer;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class ContentDigestTesterTest extends BasisTestCase
|
||||
{
|
||||
|
||||
public function testHtaccessDisabled()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->disableHtaccess();
|
||||
$testResult = $fakeServer->runTester(new ContentDigestTester());
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
public function testDisallowedDirectivesFatal()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->disallowAllDirectives('fatal');
|
||||
$testResult = $fakeServer->runTester(new ContentDigestTester());
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
public function testAccessAllDenied()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->denyAllAccess();
|
||||
$testResult = $fakeServer->runTester(new ContentDigestTester());
|
||||
$this->assertInconclusive($testResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test when the directive has no effect.
|
||||
* This could happen when:
|
||||
* - The directive is forbidden (non-fatal)
|
||||
* - The module is not loaded
|
||||
*
|
||||
* Test no effect when server is setup to content-digest
|
||||
*/
|
||||
public function testDirectiveHasNoEffect1()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/content-digest/on/request-me.txt' => new HttpResponse('hi', '200', ['Content-MD5' => 'aaoeu']),
|
||||
'/content-digest/off/request-me.txt' => new HttpResponse('hi', '200', ['Content-MD5' => 'aaoeu']),
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new ContentDigestTester());
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
/** Test no effect when server is setup NOT to content-digest
|
||||
*/
|
||||
public function testDirectiveHasNoEffect2()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/content-digest/on/request-me.txt' => new HttpResponse('hi', '200', []),
|
||||
'/content-digest/off/request-me.txt' => new HttpResponse('hi', '200', []),
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new ContentDigestTester());
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
public function testSuccess()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/content-digest/on/request-me.txt' => new HttpResponse(
|
||||
'hi',
|
||||
'200',
|
||||
['Content-MD5' => 'aaoeu']
|
||||
),
|
||||
'/content-digest/off/request-me.txt' => new HttpResponse('hi', '200', [])
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new ContentDigestTester());
|
||||
$this->assertSuccess($testResult);
|
||||
}
|
||||
|
||||
public function testRequestFailure()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->failAllRequests();
|
||||
$testResult = $fakeServer->runTester(new ContentDigestTester());
|
||||
$this->assertInconclusive($testResult);
|
||||
|
||||
}
|
||||
}
|
||||
114
vendor/rosell-dk/htaccess-capability-tester/tests/Testers/CrashTesterTest.php
vendored
Normal file
114
vendor/rosell-dk/htaccess-capability-tester/tests/Testers/CrashTesterTest.php
vendored
Normal file
@@ -0,0 +1,114 @@
|
||||
<?php
|
||||
/*
|
||||
subdir: 'crash-tester/xxx' # xxx is a subdir for the specific crash-test
|
||||
subtests:
|
||||
- subdir: the-suspect
|
||||
files:
|
||||
- filename: '.htaccess'
|
||||
content: # the rules goes here
|
||||
- filename: 'request-me.txt'
|
||||
content: 'thanks'
|
||||
request:
|
||||
url: 'request-me.txt'
|
||||
bypass-standard-error-handling': ['all']
|
||||
interpretation:
|
||||
- [success, body, equals, '1']
|
||||
- [failure, body, equals, '0']
|
||||
- [success, status-code, not-equals, '500']
|
||||
|
||||
- subdir: the-innocent
|
||||
files:
|
||||
- filename: '.htaccess'
|
||||
content: '# I am no trouble'
|
||||
- filename: 'request-me.txt'
|
||||
content: 'thanks'
|
||||
request:
|
||||
url: 'request-me.txt'
|
||||
bypass-standard-error-handling: ['all']
|
||||
interpretation:
|
||||
# The suspect crashed. But if the innocent crashes too, we cannot judge
|
||||
[inconclusive, status-code, equals, '500']
|
||||
|
||||
# The innocent did not crash. The suspect is guilty!
|
||||
[failure]
|
||||
|
||||
----
|
||||
|
||||
Tested:
|
||||
|
||||
Server setup | Test result
|
||||
--------------------------------------------------
|
||||
.htaccess disabled | success! (nothing crashes)
|
||||
access denied | success! (nothing crashes. In case there is both errors and
|
||||
access denied, the response is 500. This is however
|
||||
only tested on Apache 2.4.29)
|
||||
all requests crash | inconclusive (even innocent request crashes means that we cannot
|
||||
conclude that the rules are "crashy", or that they are not
|
||||
|
||||
*/
|
||||
|
||||
|
||||
namespace HtaccessCapabilityTester\Tests\Testers;
|
||||
|
||||
use HtaccessCapabilityTester\HttpResponse;
|
||||
use HtaccessCapabilityTester\Testers\CrashTester;
|
||||
use HtaccessCapabilityTester\Tests\FakeServer;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class CrashTesterTest extends BasisTestCase
|
||||
{
|
||||
public function testHtaccessDisabled()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->disableHtaccess();
|
||||
$testResult = $fakeServer->runTester(new CrashTester(''));
|
||||
$this->assertSuccess($testResult);
|
||||
}
|
||||
|
||||
public function testAccessAllDenied()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->denyAllAccess();
|
||||
$testResult = $fakeServer->runTester(new CrashTester(''));
|
||||
$this->assertSuccess($testResult);
|
||||
}
|
||||
|
||||
public function testWhenAllRequestsCrashes()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->makeAllCrash();
|
||||
$testResult = $fakeServer->runTester(new CrashTester(''));
|
||||
$this->assertInconclusive($testResult);
|
||||
}
|
||||
|
||||
public function testWhenAllRequestsCrashes2()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/crash-tester/test/the-suspect/request-me.txt' => new HttpResponse('', '500', []),
|
||||
'/crash-tester/test/the-innocent/request-me.txt' => new HttpResponse('', '500', [])
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new CrashTester('aoeu', 'test'));
|
||||
$this->assertInconclusive($testResult);
|
||||
}
|
||||
|
||||
public function testWhenRequestCrashesButInnocentDoesNot()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/crash-tester/test/the-suspect/request-me.txt' => new HttpResponse('', '500', []),
|
||||
'/crash-tester/test/the-innocent/request-me.txt' => new HttpResponse('thanks', '200', [])
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new CrashTester('aoeu', 'test'));
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
public function testRequestFailure()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->failAllRequests();
|
||||
$testResult = $fakeServer->runTester(new CrashTester('aoeu', 'test'));
|
||||
$this->assertInconclusive($testResult);
|
||||
}
|
||||
|
||||
}
|
||||
100
vendor/rosell-dk/htaccess-capability-tester/tests/Testers/DirectoryIndexTesterTest.php
vendored
Normal file
100
vendor/rosell-dk/htaccess-capability-tester/tests/Testers/DirectoryIndexTesterTest.php
vendored
Normal file
@@ -0,0 +1,100 @@
|
||||
<?php
|
||||
/*
|
||||
subdir: directory-index
|
||||
files:
|
||||
- filename: '.htaccess'
|
||||
content: |
|
||||
<IfModule mod_dir.c>
|
||||
DirectoryIndex index2.html
|
||||
</IfModule>
|
||||
- filename: 'index.html'
|
||||
content: '0'
|
||||
- filename: 'index2.html'
|
||||
content: '1'
|
||||
|
||||
request:
|
||||
url: '' # We request the index, that is why its empty
|
||||
bypass-standard-error-handling: ['404']
|
||||
|
||||
interpretation:
|
||||
- ['success', 'body', 'equals', '1']
|
||||
- ['failure', 'body', 'equals', '0']
|
||||
- ['failure', 'status-code', 'equals', '404'] # "index.html" might not be set to index
|
||||
|
||||
----
|
||||
|
||||
Tested:
|
||||
|
||||
Server setup | Test result
|
||||
--------------------------------------------------
|
||||
.htaccess disabled | failure
|
||||
forbidden directives (fatal) | failure (highly unlikely, as it is part of core - but still possible)
|
||||
access denied | inconclusive (it might be allowed to other files)
|
||||
directive has no effect | failure
|
||||
| success
|
||||
|
||||
*/
|
||||
|
||||
|
||||
namespace HtaccessCapabilityTester\Tests\Testers;
|
||||
|
||||
use HtaccessCapabilityTester\HttpResponse;
|
||||
use HtaccessCapabilityTester\Testers\DirectoryIndexTester;
|
||||
use HtaccessCapabilityTester\Tests\FakeServer;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class DirectoryIndexTesterTest extends BasisTestCase
|
||||
{
|
||||
|
||||
public function testHtaccessDisabled()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->disableHtaccess();
|
||||
$testResult = $fakeServer->runTester(new DirectoryIndexTester());
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
public function testDisallowedDirectivesFatal()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->disallowAllDirectives('fatal');
|
||||
$testResult = $fakeServer->runTester(new DirectoryIndexTester());
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
public function testAccessAllDenied()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->denyAllAccess();
|
||||
$testResult = $fakeServer->runTester(new DirectoryIndexTester());
|
||||
$this->assertInconclusive($testResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test when the directive has no effect.
|
||||
* This could happen when:
|
||||
* - The directive is forbidden (non-fatal)
|
||||
* - The module is not loaded
|
||||
*
|
||||
*/
|
||||
public function testDirectiveHasNoEffect()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/directory-index/' => new HttpResponse('0', '200', []),
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new DirectoryIndexTester());
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
public function testSuccess()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/directory-index/' => new HttpResponse('1', '200', [])
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new DirectoryIndexTester());
|
||||
$this->assertSuccess($testResult);
|
||||
}
|
||||
|
||||
}
|
||||
99
vendor/rosell-dk/htaccess-capability-tester/tests/Testers/HeaderSetTesterTest.php
vendored
Normal file
99
vendor/rosell-dk/htaccess-capability-tester/tests/Testers/HeaderSetTesterTest.php
vendored
Normal file
@@ -0,0 +1,99 @@
|
||||
<?php
|
||||
/*
|
||||
subdir: header-set
|
||||
files:
|
||||
- filename: '.htaccess'
|
||||
content: |
|
||||
<IfModule mod_headers.c>
|
||||
Header set X-Response-Header-Test: test
|
||||
</IfModule>
|
||||
- filename: 'request-me.txt'
|
||||
content: 'hi'
|
||||
|
||||
request:
|
||||
url: 'request-me.txt'
|
||||
|
||||
interpretation:
|
||||
- [success, headers, contains-key-value, 'X-Response-Header-Test', 'test'],
|
||||
- [failure]
|
||||
|
||||
|
||||
----
|
||||
|
||||
Tested:
|
||||
|
||||
Server setup | Test result
|
||||
--------------------------------------------------
|
||||
.htaccess disabled | failure
|
||||
forbidden directives (fatal) | failure
|
||||
access denied | inconclusive (it might be allowed to other files)
|
||||
directive has no effect | failure
|
||||
| success
|
||||
*/
|
||||
|
||||
|
||||
namespace HtaccessCapabilityTester\Tests\Testers;
|
||||
|
||||
use HtaccessCapabilityTester\HttpResponse;
|
||||
use HtaccessCapabilityTester\Testers\HeaderSetTester;
|
||||
use HtaccessCapabilityTester\Tests\FakeServer;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class HeaderSetTesterTest extends BasisTestCase
|
||||
{
|
||||
|
||||
public function testHtaccessDisabled()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->disableHtaccess();
|
||||
$testResult = $fakeServer->runTester(new HeaderSetTester());
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
public function testDisallowedDirectivesFatal()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->disallowAllDirectives('fatal');
|
||||
$testResult = $fakeServer->runTester(new HeaderSetTester());
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
public function testAccessAllDenied()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->denyAllAccess();
|
||||
$testResult = $fakeServer->runTester(new HeaderSetTester());
|
||||
$this->assertInconclusive($testResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test when the directive has no effect.
|
||||
* This could happen when:
|
||||
* - The directive is forbidden (non-fatal)
|
||||
* - The module is not loaded
|
||||
*/
|
||||
public function testDirectiveHasNoEffect()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/header-set/request-me.txt' => new HttpResponse('hi', '200', [])
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new HeaderSetTester());
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
public function testSuccess()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/header-set/request-me.txt' => new HttpResponse(
|
||||
'hi',
|
||||
'200',
|
||||
['X-Response-Header-Test' => 'test']
|
||||
)
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new HeaderSetTester());
|
||||
$this->assertSuccess($testResult);
|
||||
}
|
||||
|
||||
}
|
||||
124
vendor/rosell-dk/htaccess-capability-tester/tests/Testers/HtaccessEnabledTesterTest.php
vendored
Normal file
124
vendor/rosell-dk/htaccess-capability-tester/tests/Testers/HtaccessEnabledTesterTest.php
vendored
Normal file
@@ -0,0 +1,124 @@
|
||||
<?php
|
||||
/*
|
||||
|
||||
----
|
||||
|
||||
Tested:
|
||||
|
||||
Server setup | Test result
|
||||
--------------------------------------------------
|
||||
.htaccess disabled | failure
|
||||
access denied | inconclusive (it might be allowed to other files)
|
||||
it works | success
|
||||
*/
|
||||
|
||||
|
||||
namespace HtaccessCapabilityTester\Tests\Testers;
|
||||
|
||||
use HtaccessCapabilityTester\HttpResponse;
|
||||
use HtaccessCapabilityTester\Testers\HtaccessEnabledTester;
|
||||
use HtaccessCapabilityTester\Tests\FakeServer;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class HtaccessEnabledTesterTest extends BasisTestCase
|
||||
{
|
||||
|
||||
/**
|
||||
* Test failure when server signature fails
|
||||
*
|
||||
*/
|
||||
public function testSuccessServerSignatureFails()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/server-signature/on/test.php' => new HttpResponse('0', '200', []),
|
||||
'/server-signature/off/test.php' => new HttpResponse('1', '200', [])
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new HtaccessEnabledTester());
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test success when server signature works.
|
||||
*
|
||||
*/
|
||||
public function testSuccessServerSignatureSucceeds()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/server-signature/on/test.php' => new HttpResponse('1', '200', []),
|
||||
'/server-signature/off/test.php' => new HttpResponse('1', '200', [])
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new HtaccessEnabledTester());
|
||||
$this->assertSuccess($testResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test success when setting a header works.
|
||||
*/
|
||||
public function testSuccessHeaderSetSucceeds()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/header-set/request-me.txt' => new HttpResponse(
|
||||
'hi',
|
||||
'200',
|
||||
['X-Response-Header-Test' => 'test']
|
||||
)
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new HtaccessEnabledTester());
|
||||
$this->assertSuccess($testResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test success when malformed .htaccess causes 500
|
||||
*/
|
||||
public function testSuccessMalformedHtaccess()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/crash-tester/htaccess-enabled-malformed-htaccess/the-suspect/request-me.txt' =>
|
||||
new HttpResponse('', '500', []),
|
||||
'/crash-test/htaccess-enabled-malformed-htaccess/the-innocent/request-me.txt' =>
|
||||
new HttpResponse('thanks', '200', [])
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new HtaccessEnabledTester());
|
||||
$this->assertSuccess($testResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test failure when malformed .htaccess causes 500
|
||||
*/
|
||||
public function testFailureMalformedHtaccessDoesNotCauseCrash()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/crash-tester/htaccess-enabled-malformed-htaccess/the-suspect/request-me.txt' =>
|
||||
new HttpResponse('thanks', '200', []),
|
||||
'/crash-test/htaccess-enabled-malformed-htaccess/the-innocent/request-me.txt' =>
|
||||
new HttpResponse('thanks', '200', [])
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new HtaccessEnabledTester());
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test inconclusive when all crashes
|
||||
*/
|
||||
public function testInconclusiveWhenAllCrashes()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->makeAllCrash();
|
||||
$testResult = $fakeServer->runTester(new HtaccessEnabledTester());
|
||||
$this->assertInconclusive($testResult);
|
||||
}
|
||||
|
||||
public function testRequestFailure()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->failAllRequests();
|
||||
$testResult = $fakeServer->runTester(new HtaccessEnabledTester());
|
||||
$this->assertInconclusive($testResult);
|
||||
}
|
||||
|
||||
}
|
||||
54
vendor/rosell-dk/htaccess-capability-tester/tests/Testers/InnocentRequestTesterTest.php
vendored
Normal file
54
vendor/rosell-dk/htaccess-capability-tester/tests/Testers/InnocentRequestTesterTest.php
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
/*
|
||||
subdir: innocent-request
|
||||
files:
|
||||
- filename: 'request-me.txt'
|
||||
content: 'thank you my dear'
|
||||
|
||||
request:
|
||||
url: 'request-me.txt'
|
||||
bypass-standard-error-handling: 'all'
|
||||
|
||||
interpretation:
|
||||
- ['success', 'status-code', 'equals', '200']
|
||||
- ['inconclusive', 'status-code', 'equals', '403']
|
||||
- ['inconclusive', 'status-code', 'equals', '404']
|
||||
- ['failure']
|
||||
----
|
||||
|
||||
Tested:
|
||||
|
||||
Server setup | Test result
|
||||
--------------------------------------------------
|
||||
access denied | inconclusive (it might be allowed to other files)
|
||||
always fatal | failure
|
||||
*/
|
||||
|
||||
|
||||
namespace HtaccessCapabilityTester\Tests\Testers;
|
||||
|
||||
use HtaccessCapabilityTester\HttpResponse;
|
||||
use HtaccessCapabilityTester\Testers\InnocentRequestTester;
|
||||
use HtaccessCapabilityTester\Tests\FakeServer;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class InnocentRequestTesterTest extends BasisTestCase
|
||||
{
|
||||
|
||||
|
||||
public function testAccessAllDenied()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->denyAllAccess();
|
||||
$testResult = $fakeServer->runTester(new InnocentRequestTester());
|
||||
$this->assertInconclusive($testResult);
|
||||
}
|
||||
|
||||
public function testSuccess()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$testResult = $fakeServer->runTester(new InnocentRequestTester());
|
||||
$this->assertSuccess($testResult);
|
||||
}
|
||||
|
||||
}
|
||||
257
vendor/rosell-dk/htaccess-capability-tester/tests/Testers/ModuleLoadedTesterTest.php
vendored
Normal file
257
vendor/rosell-dk/htaccess-capability-tester/tests/Testers/ModuleLoadedTesterTest.php
vendored
Normal file
@@ -0,0 +1,257 @@
|
||||
<?php
|
||||
/*
|
||||
|
||||
subdir: module-loaded
|
||||
subtests:
|
||||
- subdir: server-signature
|
||||
requirements: htaccessEnabled()
|
||||
files:
|
||||
- filename: '.htaccess'
|
||||
content: |
|
||||
ServerSignature Off
|
||||
<IfModule mod_xxx.c>
|
||||
ServerSignature On
|
||||
</IfModule>
|
||||
|
||||
- filename: 'test.php'
|
||||
content: |
|
||||
<?php
|
||||
if (isset($_SERVER['SERVER_SIGNATURE']) && ($_SERVER['SERVER_SIGNATURE'] != '')) {
|
||||
echo 1;
|
||||
} else {
|
||||
echo 0;
|
||||
}
|
||||
interpretation:
|
||||
- ['success', 'body', 'equals', '1']
|
||||
- ['failure', 'body', 'equals', '0']
|
||||
- subdir: rewrite
|
||||
...
|
||||
----
|
||||
|
||||
Tested:
|
||||
|
||||
Server setup | Test result
|
||||
--------------------------------------------------
|
||||
.htaccess disabled | failure
|
||||
access denied | inconclusive (it might be allowed to other files)
|
||||
it works | success
|
||||
*/
|
||||
|
||||
|
||||
namespace HtaccessCapabilityTester\Tests\Testers;
|
||||
|
||||
use HtaccessCapabilityTester\HttpResponse;
|
||||
use HtaccessCapabilityTester\Testers\ModuleLoadedTester;
|
||||
use HtaccessCapabilityTester\Tests\FakeServer;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class ModuleLoadedTesterTest extends BasisTestCase
|
||||
{
|
||||
|
||||
public function testHtaccessDisabled()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->disableHtaccess();
|
||||
$testResult = $fakeServer->runTester(new ModuleLoadedTester('setenvif'));
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
public function testInconclusiveWhenAllCrashes()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
|
||||
$fakeServer->makeAllCrash();
|
||||
$testResult = $fakeServer->runTester(new ModuleLoadedTester('setenvif'));
|
||||
|
||||
$this->assertInconclusive($testResult);
|
||||
}
|
||||
|
||||
public function testServerSignatureSucceedsModuleLoaded()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/server-signature/on/test.php' => new HttpResponse('1', '200', []),
|
||||
'/server-signature/off/test.php' => new HttpResponse('1', '200', []),
|
||||
'/module-loaded/setenvif/server-signature/test.php' => new HttpResponse('1', '200', [])
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new ModuleLoadedTester('setenvif'));
|
||||
$this->assertSuccess($testResult);
|
||||
}
|
||||
|
||||
public function testServerSignatureSucceedsModuleNotLoaded()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/server-signature/on/test.php' => new HttpResponse('1', '200', []),
|
||||
'/server-signature/off/test.php' => new HttpResponse('1', '200', []),
|
||||
'/module-loaded/setenvif/server-signature/test.php' => new HttpResponse('0', '200', [])
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new ModuleLoadedTester('setenvif'));
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
public function testContentDigestWorksModuleLoaded()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/content-digest/on/request-me.txt' => new HttpResponse(
|
||||
'hi',
|
||||
'200',
|
||||
['Content-MD5' => 'aaoeu']
|
||||
),
|
||||
'/content-digest/off/request-me.txt' => new HttpResponse('hi', '200', []),
|
||||
'/module-loaded/setenvif/content-digest/request-me.txt' => new HttpResponse(
|
||||
'',
|
||||
'200',
|
||||
['Content-MD5' => 'aoeu']
|
||||
)
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new ModuleLoadedTester('setenvif'));
|
||||
$this->assertSuccess($testResult);
|
||||
}
|
||||
|
||||
public function testContentDigestWorksModuleNotLoaded()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/content-digest/on/request-me.txt' => new HttpResponse(
|
||||
'hi',
|
||||
'200',
|
||||
['Content-MD5' => 'aaoeu']
|
||||
),
|
||||
'/content-digest/off/request-me.txt' => new HttpResponse('hi', '200', []),
|
||||
'/module-loaded/setenvif/content-digest/request-me.txt' => new HttpResponse('', '200', [])
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new ModuleLoadedTester('setenvif'));
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
public function testAddTypeWorksModuleLoaded()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/add-type/request-me.test' => new HttpResponse(
|
||||
'hi',
|
||||
'200',
|
||||
['Content-Type' => 'image/gif']
|
||||
),
|
||||
'/module-loaded/setenvif/add-type/request-me.test' => new HttpResponse(
|
||||
'hi',
|
||||
'200',
|
||||
['Content-Type' => 'image/gif']
|
||||
)
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new ModuleLoadedTester('setenvif'));
|
||||
$this->assertSuccess($testResult);
|
||||
}
|
||||
|
||||
public function testAddTypeWorksModuleNotLoaded()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/add-type/request-me.test' => new HttpResponse(
|
||||
'hi',
|
||||
'200',
|
||||
['Content-Type' => 'image/gif']
|
||||
),
|
||||
'/module-loaded/setenvif/add-type/request-me.test' => new HttpResponse(
|
||||
'hi',
|
||||
'200',
|
||||
['Content-Type' => 'image/jpeg']
|
||||
)
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new ModuleLoadedTester('setenvif'));
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
public function testDirectoryIndexWorksModuleLoaded()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/directory-index/' => new HttpResponse('1', '200', []),
|
||||
'/module-loaded/setenvif/directory-index/' => new HttpResponse('1', '200', [])
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new ModuleLoadedTester('setenvif'));
|
||||
$this->assertSuccess($testResult);
|
||||
}
|
||||
|
||||
public function testDirectoryIndexWorksModuleNotLoaded()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/directory-index/' => new HttpResponse('1', '200', []),
|
||||
'/module-loaded/setenvif/directory-index/' => new HttpResponse('0', '200', [])
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new ModuleLoadedTester('setenvif'));
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
public function testRewriteWorksModuleLoaded()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/rewrite/0.txt' => new HttpResponse('1', '200', []),
|
||||
'/module-loaded/setenvif/rewrite/request-me.txt' => new HttpResponse('1', '200', []),
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new ModuleLoadedTester('setenvif'));
|
||||
$this->assertSuccess($testResult);
|
||||
}
|
||||
|
||||
public function testRewriteWorksModuleNotLoaded()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/rewrite/0.txt' => new HttpResponse('1', '200', []),
|
||||
'/module-loaded/setenvif/rewrite/request-me.txt' => new HttpResponse('0', '200', []),
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new ModuleLoadedTester('setenvif'));
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
public function testHeaderSetWorksModuleLoaded()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/header-set/request-me.txt' => new HttpResponse(
|
||||
'hi',
|
||||
'200',
|
||||
['X-Response-Header-Test' => 'test']
|
||||
),
|
||||
'/module-loaded/setenvif/header-set/request-me.txt' => new HttpResponse(
|
||||
'thanks',
|
||||
'200',
|
||||
['X-Response-Header-Test' => '1']
|
||||
),
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new ModuleLoadedTester('setenvif'));
|
||||
$this->assertSuccess($testResult);
|
||||
}
|
||||
|
||||
public function testHeaderSetWorksModuleNotLoaded()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/header-set/request-me.txt' => new HttpResponse(
|
||||
'hi',
|
||||
'200',
|
||||
['X-Response-Header-Test' => 'test']
|
||||
),
|
||||
'/module-loaded/setenvif/header-set/request-me.txt' => new HttpResponse(
|
||||
'thanks',
|
||||
'200',
|
||||
['X-Response-Header-Test' => '0']
|
||||
),
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new ModuleLoadedTester('setenvif'));
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
public function testRequestFailure()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->failAllRequests();
|
||||
$testResult = $fakeServer->runTester(new ModuleLoadedTester('setenvif'));
|
||||
$this->assertInconclusive($testResult);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,143 @@
|
||||
<?php
|
||||
/*
|
||||
subdir: pass-info-from-rewrite-to-script-through-env
|
||||
files:
|
||||
- filename: '.htaccess'
|
||||
content: |
|
||||
<IfModule mod_rewrite.c>
|
||||
|
||||
# Testing if we can pass environment variable from .htaccess to script in a RewriteRule
|
||||
# We pass document root, because that can easily be checked by the script
|
||||
|
||||
RewriteEngine On
|
||||
RewriteRule ^test\.php$ - [E=PASSTHROUGHENV:%{DOCUMENT_ROOT},L]
|
||||
|
||||
</IfModule>
|
||||
- filename: 'test.php'
|
||||
content: |
|
||||
<?php
|
||||
function getEnvPassedInRewriteRule($envName) {
|
||||
// Environment variables passed through the REWRITE module have "REWRITE_" as a prefix
|
||||
// (in Apache, not Litespeed, if I recall correctly).
|
||||
// Multiple iterations causes multiple REWRITE_ prefixes, and we get many environment variables set.
|
||||
// We simply look for an environment variable that ends with what we are looking for.
|
||||
// (so make sure to make it unique)
|
||||
$len = strlen($envName);
|
||||
foreach ($_SERVER as $key => $item) {
|
||||
if (substr($key, -$len) == $envName) {
|
||||
return $item;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
$result = getEnvPassedInRewriteRule('PASSTHROUGHENV');
|
||||
if ($result === false) {
|
||||
echo '0';
|
||||
exit;
|
||||
}
|
||||
echo ($result == $_SERVER['DOCUMENT_ROOT'] ? '1' : '0');
|
||||
|
||||
request:
|
||||
url: 'test.php'
|
||||
|
||||
interpretation:
|
||||
- ['success', 'body', 'equals', '1']
|
||||
- ['failure', 'body', 'equals', '0']
|
||||
- ['inconclusive', 'body', 'begins-with', '<?php']
|
||||
- ['inconclusive']
|
||||
|
||||
----
|
||||
|
||||
Tested:
|
||||
|
||||
Server setup | Test result
|
||||
--------------------------------------------------
|
||||
.htaccess disabled | failure
|
||||
forbidden directives (fatal) | failure
|
||||
access denied | inconclusive (it might be allowed to other files)
|
||||
directive has no effect | failure
|
||||
php is unprocessed | inconclusive
|
||||
directive works | success
|
||||
|
||||
*/
|
||||
|
||||
|
||||
namespace HtaccessCapabilityTester\Tests\Testers;
|
||||
|
||||
use HtaccessCapabilityTester\HttpResponse;
|
||||
use HtaccessCapabilityTester\Testers\PassInfoFromRewriteToScriptThroughEnvTester;
|
||||
use HtaccessCapabilityTester\Tests\FakeServer;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class PassInfoFromRewriteToScriptThroughEnvTesterTest extends BasisTestCase
|
||||
{
|
||||
|
||||
/* can't do this test, it would require processing PHP
|
||||
public function testHtaccessDisabled()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->disableHtaccess();
|
||||
$testResult = $fakeServer->runTester(new PassInfoFromRewriteToScriptThroughEnvTester());
|
||||
$this->assertFailure($testResult);
|
||||
}*/
|
||||
|
||||
public function testDisallowedDirectivesFatal()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->disallowAllDirectives('fatal');
|
||||
$testResult = $fakeServer->runTester(new PassInfoFromRewriteToScriptThroughEnvTester());
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
public function testAccessAllDenied()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->denyAllAccess();
|
||||
$testResult = $fakeServer->runTester(new PassInfoFromRewriteToScriptThroughEnvTester());
|
||||
$this->assertInconclusive($testResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test when the magic is not working
|
||||
* This could happen when:
|
||||
* - Any of the directives are forbidden (non-fatal)
|
||||
* - Any of the modules are not loaded
|
||||
* - Perhaps these advanced features are not working on all platforms
|
||||
* (does LiteSpeed ie support these this?)
|
||||
*/
|
||||
public function testMagicNotWorking()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/pass-info-from-rewrite-to-script-through-env/test.php' =>
|
||||
new HttpResponse('0', '200', [])
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new PassInfoFromRewriteToScriptThroughEnvTester());
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
public function testPHPNotProcessed()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->handlePHPasText();
|
||||
$testResult = $fakeServer->runTester(
|
||||
new PassInfoFromRewriteToScriptThroughEnvTester()
|
||||
);
|
||||
$this->assertInconclusive($testResult);
|
||||
}
|
||||
|
||||
public function testSuccess()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/pass-info-from-rewrite-to-script-through-env/test.php' =>
|
||||
new HttpResponse('1', '200', [])
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(
|
||||
new PassInfoFromRewriteToScriptThroughEnvTester()
|
||||
);
|
||||
$this->assertSuccess($testResult);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
<?php
|
||||
/*
|
||||
subdir: pass-info-from-rewrite-to-script-through-request-header
|
||||
files:
|
||||
- filename: '.htaccess'
|
||||
content: |
|
||||
<IfModule mod_rewrite.c>
|
||||
RewriteEngine On
|
||||
|
||||
# Testing if we can pass an environment variable through a request header
|
||||
# We pass document root, because that can easily be checked by the script
|
||||
|
||||
<IfModule mod_headers.c>
|
||||
RequestHeader set PASSTHROUGHHEADER "%{PASSTHROUGHHEADER}e" env=PASSTHROUGHHEADER
|
||||
</IfModule>
|
||||
RewriteRule ^test\.php$ - [E=PASSTHROUGHHEADER:%{DOCUMENT_ROOT},L]
|
||||
|
||||
</IfModule>
|
||||
- filename: 'test.php'
|
||||
content: |
|
||||
<?php
|
||||
if (isset($_SERVER['HTTP_PASSTHROUGHHEADER'])) {
|
||||
echo ($_SERVER['HTTP_PASSTHROUGHHEADER'] == $_SERVER['DOCUMENT_ROOT'] ? 1 : 0);
|
||||
exit;
|
||||
}
|
||||
echo '0';
|
||||
|
||||
request:
|
||||
url: 'test.php'
|
||||
|
||||
interpretation:
|
||||
- ['success', 'body', 'equals', '1']
|
||||
- ['failure', 'body', 'equals', '0']
|
||||
- ['inconclusive', 'body', 'begins-with', '<?php']
|
||||
- ['inconclusive']
|
||||
----
|
||||
|
||||
Tested:
|
||||
|
||||
Server setup | Test result
|
||||
--------------------------------------------------
|
||||
.htaccess disabled | failure
|
||||
forbidden directives (fatal) | failure
|
||||
access denied | inconclusive (it might be allowed to other files)
|
||||
directive has no effect | failure
|
||||
php is unprocessed | inconclusive
|
||||
directive works | success
|
||||
|
||||
*/
|
||||
|
||||
|
||||
namespace HtaccessCapabilityTester\Tests\Testers;
|
||||
|
||||
use HtaccessCapabilityTester\HttpResponse;
|
||||
use HtaccessCapabilityTester\Testers\PassInfoFromRewriteToScriptThroughRequestHeaderTester;
|
||||
use HtaccessCapabilityTester\Tests\FakeServer;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class PassInfoFromRewriteToScriptThroughRequestHeaderTesterTest extends BasisTestCase
|
||||
{
|
||||
|
||||
/* can't do this test, it would require processing PHP
|
||||
public function testHtaccessDisabled()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->disableHtaccess();
|
||||
$testResult = $fakeServer->runTester(new PassInfoFromRewriteToScriptThroughRequestHeaderTester());
|
||||
$this->assertFailure($testResult);
|
||||
}*/
|
||||
|
||||
public function testDisallowedDirectivesFatal()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->disallowAllDirectives('fatal');
|
||||
$testResult = $fakeServer->runTester(new PassInfoFromRewriteToScriptThroughRequestHeaderTester());
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
public function testAccessAllDenied()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->denyAllAccess();
|
||||
$testResult = $fakeServer->runTester(new PassInfoFromRewriteToScriptThroughRequestHeaderTester());
|
||||
$this->assertInconclusive($testResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test when the magic is not working
|
||||
* This could happen when:
|
||||
* - Any of the directives are forbidden (non-fatal)
|
||||
* - Any of the modules are not loaded
|
||||
* - Perhaps these advanced features are not working on all platforms
|
||||
* (does LiteSpeed ie support these this?)
|
||||
*/
|
||||
public function testMagicNotWorking()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/pass-info-from-rewrite-to-script-through-request-header/test.php' =>
|
||||
new HttpResponse('0', '200', [])
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new PassInfoFromRewriteToScriptThroughRequestHeaderTester());
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
public function testPHPNotProcessed()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->handlePHPasText();
|
||||
$testResult = $fakeServer->runTester(
|
||||
new PassInfoFromRewriteToScriptThroughRequestHeaderTester()
|
||||
);
|
||||
$this->assertInconclusive($testResult);
|
||||
}
|
||||
|
||||
public function testSuccess()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/pass-info-from-rewrite-to-script-through-request-header/test.php' =>
|
||||
new HttpResponse('1', '200', [])
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(
|
||||
new PassInfoFromRewriteToScriptThroughRequestHeaderTester()
|
||||
);
|
||||
$this->assertSuccess($testResult);
|
||||
}
|
||||
|
||||
}
|
||||
123
vendor/rosell-dk/htaccess-capability-tester/tests/Testers/RequestHeaderTesterTest.php
vendored
Normal file
123
vendor/rosell-dk/htaccess-capability-tester/tests/Testers/RequestHeaderTesterTest.php
vendored
Normal file
@@ -0,0 +1,123 @@
|
||||
<?php
|
||||
/*
|
||||
subdir: request-header
|
||||
files:
|
||||
- filename: '.htaccess'
|
||||
content: |
|
||||
<IfModule mod_headers.c>
|
||||
# Certain hosts seem to strip non-standard request headers,
|
||||
# so we use a standard one to avoid a false negative
|
||||
RequestHeader set User-Agent "request-header-test"
|
||||
</IfModule>
|
||||
- filename: 'test.php'
|
||||
content: |
|
||||
<?php
|
||||
if (isset($_SERVER['HTTP_USER_AGENT'])) {
|
||||
echo $_SERVER['HTTP_USER_AGENT'] == 'request-header-test' ? 1 : 0;
|
||||
} else {
|
||||
echo 0;
|
||||
}
|
||||
|
||||
request:
|
||||
url: 'test.php'
|
||||
|
||||
interpretation:
|
||||
- ['success', 'body', 'equals', '1']
|
||||
- ['failure', 'body', 'equals', '0']
|
||||
- ['inconclusive', 'body', 'begins-with', '<?php'],
|
||||
|
||||
|
||||
TODO:
|
||||
TEST: php_flag engine off
|
||||
https://stackoverflow.com/questions/1271899/disable-php-in-directory-including-all-sub-directories-with-htaccess
|
||||
TEST: RemoveHandler and RemoveType (https://electrictoolbox.com/disable-php-apache-htaccess/)
|
||||
|
||||
----
|
||||
|
||||
Tested:
|
||||
|
||||
Server setup | Test result
|
||||
--------------------------------------------------
|
||||
.htaccess disabled | failure
|
||||
forbidden directives (fatal) | failure
|
||||
access denied | inconclusive (it might be allowed to other files)
|
||||
directive has no effect | failure
|
||||
php is unprocessed | inconclusive
|
||||
directive works | success
|
||||
|
||||
TODO:
|
||||
*/
|
||||
|
||||
|
||||
namespace HtaccessCapabilityTester\Tests\Testers;
|
||||
|
||||
use HtaccessCapabilityTester\HttpResponse;
|
||||
use HtaccessCapabilityTester\Testers\RequestHeaderTester;
|
||||
use HtaccessCapabilityTester\Tests\FakeServer;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class RequestHeaderTesterTest extends BasisTestCase
|
||||
{
|
||||
|
||||
/* can't do this test, it would require processing PHP
|
||||
public function testHtaccessDisabled()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->disableHtaccess();
|
||||
$testResult = $fakeServer->runTester(new RequestHeaderTester());
|
||||
$this->assertFailure($testResult);
|
||||
}*/
|
||||
|
||||
public function testDisallowedDirectivesFatal()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->disallowAllDirectives('fatal');
|
||||
$testResult = $fakeServer->runTester(new RequestHeaderTester());
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
public function testAccessAllDenied()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->denyAllAccess();
|
||||
$testResult = $fakeServer->runTester(new RequestHeaderTester());
|
||||
$this->assertInconclusive($testResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test when the directive has no effect.
|
||||
* This could happen when:
|
||||
* - The directive is forbidden (non-fatal)
|
||||
* - The module is not loaded
|
||||
*/
|
||||
public function testDirectiveHasNoEffect()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/request-header/test.php' => new HttpResponse('0', '200', [])
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new RequestHeaderTester());
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
|
||||
public function testPHPNotProcessed()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->handlePHPasText();
|
||||
$testResult = $fakeServer->runTester(new RequestHeaderTester());
|
||||
$this->assertInconclusive($testResult);
|
||||
}
|
||||
|
||||
|
||||
public function testSuccess()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/request-header/test.php' => new HttpResponse('1', '200', [])
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new RequestHeaderTester());
|
||||
$this->assertSuccess($testResult);
|
||||
}
|
||||
|
||||
}
|
||||
98
vendor/rosell-dk/htaccess-capability-tester/tests/Testers/RewriteTesterTest.php
vendored
Normal file
98
vendor/rosell-dk/htaccess-capability-tester/tests/Testers/RewriteTesterTest.php
vendored
Normal file
@@ -0,0 +1,98 @@
|
||||
<?php
|
||||
/*
|
||||
subdir: rewrite
|
||||
files:
|
||||
- filename: '.htaccess'
|
||||
content: |
|
||||
<IfModule mod_rewrite.c>
|
||||
RewriteEngine On
|
||||
RewriteRule ^0\.txt$ 1\.txt [L]
|
||||
</IfModule>
|
||||
- filename: '0.txt'
|
||||
content: '0'
|
||||
- filename: '1.txt'
|
||||
content: '1'
|
||||
|
||||
request:
|
||||
url: '0.txt'
|
||||
|
||||
interpretation:
|
||||
- [success, body, equals, '1']
|
||||
- [failure, body, equals, '0']
|
||||
|
||||
|
||||
----
|
||||
|
||||
Tested:
|
||||
|
||||
Server setup | Test result
|
||||
--------------------------------------------------
|
||||
.htaccess disabled | failure
|
||||
forbidden directives (fatal) | failure
|
||||
access denied | inconclusive (it might be allowed to other files)
|
||||
directive has no effect | failure
|
||||
| success
|
||||
*/
|
||||
|
||||
|
||||
namespace HtaccessCapabilityTester\Tests\Testers;
|
||||
|
||||
use HtaccessCapabilityTester\HttpResponse;
|
||||
use HtaccessCapabilityTester\Testers\RewriteTester;
|
||||
use HtaccessCapabilityTester\Tests\FakeServer;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class RewriteTesterTest extends BasisTestCase
|
||||
{
|
||||
|
||||
public function testHtaccessDisabled()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->disableHtaccess();
|
||||
$testResult = $fakeServer->runTester(new RewriteTester());
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
public function testDisallowedDirectivesFatal()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->disallowAllDirectives('fatal');
|
||||
$testResult = $fakeServer->runTester(new RewriteTester());
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
public function testAccessAllDenied()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->denyAllAccess();
|
||||
$testResult = $fakeServer->runTester(new RewriteTester());
|
||||
$this->assertInconclusive($testResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test when the directive has no effect.
|
||||
* This could happen when:
|
||||
* - The directive is forbidden (non-fatal)
|
||||
* - The module is not loaded
|
||||
*/
|
||||
public function testDirectiveHasNoEffect()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/rewrite/0.txt' => new HttpResponse('0', '200', [])
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new RewriteTester());
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
public function testSuccess()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/rewrite/0.txt' => new HttpResponse('1', '200', [])
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new RewriteTester());
|
||||
$this->assertSuccess($testResult);
|
||||
}
|
||||
|
||||
}
|
||||
148
vendor/rosell-dk/htaccess-capability-tester/tests/Testers/ServerSignatureTesterTest.php
vendored
Normal file
148
vendor/rosell-dk/htaccess-capability-tester/tests/Testers/ServerSignatureTesterTest.php
vendored
Normal file
@@ -0,0 +1,148 @@
|
||||
<?php
|
||||
/*
|
||||
subdir: server-signature
|
||||
subtests:
|
||||
- subdir: on
|
||||
files:
|
||||
- filename: '.htaccess'
|
||||
content: |
|
||||
ServerSignature On
|
||||
- filename: 'test.php'
|
||||
content: |
|
||||
<?php
|
||||
if (isset($_SERVER['SERVER_SIGNATURE']) && ($_SERVER['SERVER_SIGNATURE'] != '')) {
|
||||
echo 1;
|
||||
} else {
|
||||
echo 0;
|
||||
}
|
||||
request:
|
||||
url: 'test.php'
|
||||
interpretation:
|
||||
- ['inconclusive', 'body', 'isEmpty']
|
||||
- ['inconclusive', 'status-code', 'not-equals', '200']
|
||||
- ['failure', 'body', 'equals', '0']
|
||||
|
||||
- subdir: off
|
||||
files:
|
||||
- filename: '.htaccess'
|
||||
content: |
|
||||
ServerSignature Off
|
||||
- filename: 'test.php'
|
||||
content: |
|
||||
<?php
|
||||
if (isset($_SERVER['SERVER_SIGNATURE']) && ($_SERVER['SERVER_SIGNATURE'] != '')) {
|
||||
echo 0;
|
||||
} else {
|
||||
echo 1;
|
||||
}
|
||||
request:
|
||||
url: 'test.php'
|
||||
interpretation:
|
||||
- ['inconclusive', 'body', 'isEmpty']
|
||||
- ['success', 'body', 'equals', '1']
|
||||
- ['failure', 'body', 'equals', '0']
|
||||
- ['inconclusive']
|
||||
|
||||
----
|
||||
|
||||
Tested:
|
||||
|
||||
Server setup | Test result
|
||||
--------------------------------------------------
|
||||
.htaccess disabled | failure
|
||||
forbidden directives (fatal) | inconclusive (special!)
|
||||
access denied | inconclusive (it might be allowed to other files)
|
||||
directive has no effect | failure
|
||||
| success
|
||||
*/
|
||||
|
||||
|
||||
namespace HtaccessCapabilityTester\Tests\Testers;
|
||||
|
||||
use HtaccessCapabilityTester\HttpResponse;
|
||||
use HtaccessCapabilityTester\Testers\ServerSignatureTester;
|
||||
use HtaccessCapabilityTester\Tests\FakeServer;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class ServerSignatureTesterTest extends BasisTestCase
|
||||
{
|
||||
|
||||
/*
|
||||
can't do this test as our fake server does not execute PHP
|
||||
|
||||
public function testHtaccessDisabled()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->disableHtaccess();
|
||||
$testResult = $fakeServer->runTester(new ServerSignatureTester());
|
||||
$this->assertFailure($testResult);
|
||||
}*/
|
||||
|
||||
public function testDisallowedDirectivesFatal()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->disallowAllDirectives('fatal');
|
||||
$testResult = $fakeServer->runTester(new ServerSignatureTester());
|
||||
$this->assertFailure($testResult);
|
||||
|
||||
// SPECIAL!
|
||||
// As ServerSignature is in core and AllowOverride is None, the tester assumes
|
||||
// that this does not happen. The 500 must then be another problem, which is why
|
||||
// it returns inconclusive
|
||||
//$this->assertInconclusive($testResult);
|
||||
}
|
||||
|
||||
public function testAccessAllDenied()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->denyAllAccess();
|
||||
$testResult = $fakeServer->runTester(new ServerSignatureTester());
|
||||
$this->assertInconclusive($testResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test when the directive has no effect.
|
||||
* This could happen when:
|
||||
* - The directive is forbidden (non-fatal)
|
||||
* - The module is not loaded
|
||||
*
|
||||
* This tests when ServerSignature is set, and the directive has no effect.
|
||||
*/
|
||||
public function testDirectiveHasNoEffect1()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/server-signature/on/test.php' => new HttpResponse('1', '200', []),
|
||||
'/server-signature/off/test.php' => new HttpResponse('0', '200', [])
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new ServerSignatureTester());
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* This tests when ServerSignature is unset, and the directive has no effect.
|
||||
*/
|
||||
public function testDirectiveHasNoEffect2()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/server-signature/on/test.php' => new HttpResponse('0', '200', []),
|
||||
'/server-signature/off/test.php' => new HttpResponse('1', '200', [])
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new ServerSignatureTester());
|
||||
$this->assertFailure($testResult);
|
||||
}
|
||||
|
||||
|
||||
public function testSuccess()
|
||||
{
|
||||
$fakeServer = new FakeServer();
|
||||
$fakeServer->setResponses([
|
||||
'/server-signature/on/test.php' => new HttpResponse('1', '200', []),
|
||||
'/server-signature/off/test.php' => new HttpResponse('1', '200', [])
|
||||
]);
|
||||
$testResult = $fakeServer->runTester(new ServerSignatureTester());
|
||||
$this->assertSuccess($testResult);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user