im/vendor/qiniu/php-sdk/tests/Qiniu/Tests/MiddlewareTest.php

161 lines
4.0 KiB
PHP
Raw Permalink Normal View History

2023-09-26 18:09:46 +08:00
<?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);
}
}