Browse Source

Tests for HTTP-level client exceptions

master
J. King 4 years ago
parent
commit
41053e89a7
  1. 4
      lib/HttpClient/Exception.php
  2. 61
      tests/cases/HttpClientTest.php
  3. 3
      tests/phpunit.dist.xml

4
lib/HttpClient/Exception.php

@ -13,12 +13,14 @@ class Exception extends BaseException {
if (preg_match("/^httpStatus(\d+)$/", $symbol, $match)) {
$code = (int) $match[1];
assert($code >= 400, "HTTP status codes under 400 should not produce exceptions");
if (($code < 500 && $code > 431 && $code !== 451) || in_array($code, [418, 419, 420, 430])) {
if (($code < 500 && $code > 431 && $code !== 451) || in_array($code, [418, 419, 420, 427, 430])) {
// unassigned 4xx code are changed to 400
$symbol = "httpStatus400";
} elseif ($code > 511 || $code === 509) {
// unassigned 5xx codes and anything 600 or above is changed to 500
$symbol = "httpStatus500";
} else {
$symbol = "httpStatus".$code;
}
}
parent::__construct($symbol, $e);

61
tests/cases/HttpClientTest.php

@ -0,0 +1,61 @@
<?php
/** @license MIT
* Copyright 2018 J. King
* See LICENSE and AUTHORS files for details */
declare(strict_types=1);
namespace MensBeam\Lax\TestCase;
use MensBeam\Lax\HttpClient\Exception;
/**
* @covers MensBeam\Lax\HttpClient\HttpClient
* @covers MensBeam\Lax\HttpClient\Exception
*/
class ParserTest extends \PHPUnit\Framework\TestCase {
/** @dataProvider provideCodes */
public function testCreateExceptions(string $symbol, int $exp): void {
$exp = new Exception("httpStatus".$exp);
$act = new Exception($symbol);
$this->expectExceptionObject($exp);
throw $act;
}
public function provideCodes(): iterable {
// see https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml
$exceptions = [418, 419, 420, 427, 430, 451, 509];
$cutoff = [400 => 432, 500 => 512];
for ($a = 400; $a < $cutoff[400]; $a++) {
$out = $a;
if (in_array($a, $exceptions)) {
$out = 400;
}
yield "httpStatus".$a => ["httpStatus".$a, $out];
}
for ($a = $cutoff[400]; $a < 500; $a++) {
$out = 400;
if (in_array($a, $exceptions)) {
$out = $a;
}
yield "httpStatus".$a => ["httpStatus".$a, $out];
}
for ($a = 500; $a < $cutoff[500]; $a++) {
$out = $a;
if (in_array($a, $exceptions)) {
$out = 500;
}
yield "httpStatus".$a => ["httpStatus".$a, $out];
}
for ($a = $cutoff[500]; $a < 600; $a++) {
$out = 500;
if (in_array($a, $exceptions)) {
$out = $a;
}
yield "httpStatus".$a => ["httpStatus".$a, $out];
}
foreach ([600, 999, 1000, 1401] as $a) {
yield "httpStatus".$a => ["httpStatus".$a, 500];
}
yield "httpStatus000401" => ["httpStatus000401", 401];
}
}

3
tests/phpunit.dist.xml

@ -25,5 +25,8 @@
<testsuite name="Parser">
<directory>cases/Parser</directory>
</testsuite>
<testsuite name="Client">
<file>cases/HttpClientTest.php</file>
</testsuite>
</testsuites>
</phpunit>

Loading…
Cancel
Save