123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- <?php
- // @codingStandardsIgnoreStart
- // phpcs:disable PSR1.Classes.ClassDeclaration.MultipleClasses
- namespace Qiniu\Tests;
- use PHPUnit\Framework\TestCase;
- use Qiniu\Http\Client;
- use Qiniu\Http\Request;
- use Qiniu\Http\Middleware;
- use Qiniu\Http\RequestOptions;
- class RecorderMiddleware implements Middleware\Middleware
- {
- /**
- * @var array<string>
- */
- private $orderRecorder;
- /**
- * @var string
- */
- private $label;
- public function __construct(&$orderRecorder, $label)
- {
- $this->orderRecorder =& $orderRecorder;
- $this->label = $label;
- }
- public function send($request, $next)
- {
- $this->orderRecorder[] = "bef_" . $this->label . count($this->orderRecorder);
- $response = $next($request);
- $this->orderRecorder[] = "aft_" . $this->label . count($this->orderRecorder);
- return $response;
- }
- }
- class MiddlewareTest extends TestCase
- {
- public function testSendWithMiddleware()
- {
- $orderRecorder = array();
- $reqOpt = new RequestOptions();
- $reqOpt->middlewares = array(
- new RecorderMiddleware($orderRecorder, "A"),
- new RecorderMiddleware($orderRecorder, "B")
- );
- $request = new Request(
- "GET",
- "https://qiniu.com/index.html",
- array(),
- null,
- $reqOpt
- );
- $response = Client::sendRequestWithMiddleware($request);
- $expectRecords = array(
- "bef_A0",
- "bef_B1",
- "aft_B2",
- "aft_A3"
- );
- $this->assertEquals($expectRecords, $orderRecorder);
- $this->assertEquals(200, $response->statusCode);
- }
- public function testSendWithRetryDomains()
- {
- $orderRecorder = array();
- $reqOpt = new RequestOptions();
- $reqOpt->middlewares = array(
- new Middleware\RetryDomainsMiddleware(
- array(
- "unavailable.phpsdk.qiniu.com",
- "qiniu.com",
- ),
- 3
- ),
- new RecorderMiddleware($orderRecorder, "rec")
- );
- $request = new Request(
- "GET",
- "https://fake.phpsdk.qiniu.com/index.html",
- array(),
- null,
- $reqOpt
- );
- $response = Client::sendRequestWithMiddleware($request);
- $expectRecords = array(
- // 'fake.phpsdk.qiniu.com' with retried 3 times
- 'bef_rec0',
- 'aft_rec1',
- 'bef_rec2',
- 'aft_rec3',
- 'bef_rec4',
- 'aft_rec5',
- // 'unavailable.pysdk.qiniu.com' with retried 3 times
- 'bef_rec6',
- 'aft_rec7',
- 'bef_rec8',
- 'aft_rec9',
- 'bef_rec10',
- 'aft_rec11',
- // 'qiniu.com' and it's success
- 'bef_rec12',
- 'aft_rec13'
- );
- $this->assertEquals($expectRecords, $orderRecorder);
- $this->assertEquals(200, $response->statusCode);
- }
- public function testSendFailFastWithRetryDomains()
- {
- $orderRecorder = array();
- $reqOpt = new RequestOptions();
- $reqOpt->middlewares = array(
- new Middleware\RetryDomainsMiddleware(
- array(
- "unavailable.phpsdk.qiniu.com",
- "qiniu.com",
- ),
- 3,
- function () {
- return false;
- }
- ),
- new RecorderMiddleware($orderRecorder, "rec")
- );
- $request = new Request(
- "GET",
- "https://fake.phpsdk.qiniu.com/index.html",
- array(),
- null,
- $reqOpt
- );
- $response = Client::sendRequestWithMiddleware($request);
- $expectRecords = array(
- // 'fake.phpsdk.qiniu.com' will fail fast
- 'bef_rec0',
- 'aft_rec1'
- );
- $this->assertEquals($expectRecords, $orderRecorder);
- $this->assertEquals(-1, $response->statusCode);
- }
- }
|