Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
| Total | |
100.00% |
39 / 39 |
|
100.00% |
2 / 2 |
CRAP | |
100.00% |
1 / 1 |
| CrashTester | |
100.00% |
39 / 39 |
|
100.00% |
2 / 2 |
3 | |
100.00% |
1 / 1 |
| __construct | |
100.00% |
38 / 38 |
|
100.00% |
1 / 1 |
2 | |||
| getSubDir | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
1 | |||
| 1 | <?php |
| 2 | |
| 3 | namespace HtaccessCapabilityTester\Testers; |
| 4 | |
| 5 | use \HtaccessCapabilityTester\TestResult; |
| 6 | |
| 7 | /** |
| 8 | * Class for testing if a .htaccess results in a 500 Internal Server Error |
| 9 | * (ie due to being malformed or containing directives that are unknown or not allowed) |
| 10 | * |
| 11 | * Notes: |
| 12 | * - The tester only reports failure on a 500 Internal Server Error. All other status codes (even server errors) |
| 13 | * are treated as a success. The assumption here is that malformed .htaccess files / .htaccess |
| 14 | * files containing unknown or disallowed directives always results in a 500 |
| 15 | * - If your purpose is to test if a request succeeds (response 200 Ok), you should create your own class. |
| 16 | * (note that if you want to ensure that a php will succeed, make sure that a php is requested) |
| 17 | * |
| 18 | * @package HtaccessCapabilityTester |
| 19 | * @author Bjørn Rosell <it@rosell.dk> |
| 20 | * @since Class available since 0.7 |
| 21 | */ |
| 22 | class CrashTester extends CustomTester |
| 23 | { |
| 24 | |
| 25 | /** |
| 26 | * @param string $htaccessRules The rules to check |
| 27 | * @param string $subSubDir subdir for the test files. If not supplied, a fingerprint of the rules will be used |
| 28 | */ |
| 29 | public function __construct($htaccessRules, $subSubDir = null) |
| 30 | { |
| 31 | if (is_null($subSubDir)) { |
| 32 | $subSubDir = hash('md5', $htaccessRules); |
| 33 | } |
| 34 | |
| 35 | $test = [ |
| 36 | 'subdir' => 'crash-tester/' . $subSubDir, |
| 37 | 'subtests' => [ |
| 38 | [ |
| 39 | 'subdir' => 'the-suspect', |
| 40 | 'files' => [ |
| 41 | ['.htaccess', $htaccessRules], |
| 42 | ['request-me.txt', 'thanks'], |
| 43 | ], |
| 44 | 'request' => [ |
| 45 | 'url' => 'request-me.txt', |
| 46 | 'bypass-standard-error-handling' => ['403', '404', '500'] |
| 47 | ], |
| 48 | 'interpretation' => [ |
| 49 | ['success', 'status-code', 'not-equals', '500'], |
| 50 | // Otherwise fall through to next subtest |
| 51 | ] |
| 52 | ], |
| 53 | [ |
| 54 | 'subdir' => 'the-innocent', |
| 55 | 'files' => [ |
| 56 | ['.htaccess', '# I am no trouble'], |
| 57 | ['request-me.txt', 'thanks'], |
| 58 | ], |
| 59 | 'request' => [ |
| 60 | 'url' => 'request-me.txt', |
| 61 | 'bypass-standard-error-handling' => ['403', '404', '500'] |
| 62 | ], |
| 63 | 'interpretation' => [ |
| 64 | // The suspect crashed. But if the innocent crashes too, we cannot judge |
| 65 | ['inconclusive', 'status-code', 'equals', '500'], |
| 66 | |
| 67 | // The innocent did not crash. The suspect is guilty! |
| 68 | ['failure'], |
| 69 | ] |
| 70 | ], |
| 71 | ] |
| 72 | ]; |
| 73 | |
| 74 | parent::__construct($test); |
| 75 | } |
| 76 | |
| 77 | /** |
| 78 | * Child classes must implement this method, which tells which subdir the |
| 79 | * test files are to be put. |
| 80 | * |
| 81 | * @return string A subdir for the test files |
| 82 | */ |
| 83 | public function getSubDir() |
| 84 | { |
| 85 | return 'crash-tester'; |
| 86 | } |
| 87 | } |