Skip to content

Commit

Permalink
Add tests for proper header additions
Browse files Browse the repository at this point in the history
  • Loading branch information
howardlopez committed May 22, 2019
1 parent f5bc7e1 commit 52759d8
Show file tree
Hide file tree
Showing 2 changed files with 119 additions and 16 deletions.
3 changes: 2 additions & 1 deletion src/StreamRequestPayloadMiddleware.php
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,8 @@ public function __invoke(CommandInterface $command, RequestInterface $request)
// to be calculated and not already known
if (empty($requiresLength)
&& empty($contentLength)
&& !empty($operation['v4-unsigned-body'])
&& isset($operation['authtype'])
&& $operation['authtype'] == 'v4-unsigned-body'
) {
$request = $request->withHeader('transfer-encoding', 'chunked');

Expand Down
132 changes: 117 additions & 15 deletions tests/StreamRequestPayloadMiddlewareTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,42 +3,124 @@

use Aws\Api\Service;
use Aws\AwsClient;
use Aws\ClientResolver;
use Aws\CommandInterface;
use Aws\HandlerList;
use Aws\Middleware;
use Aws\Result;
use Aws\StreamRequestPayloadMiddleware;
use GuzzleHttp\Psr7;
use GuzzleHttp\Psr7\Request;
use PHPUnit\Framework\TestCase;
use Psr\Http\Message\RequestInterface;

/**
* @covers \Aws\StreamRequestPayloadMiddleware
*/
class StreamRequestPayloadMiddlewareTest extends TestCase
{

public function testAddsProperHeaders()
{
/**
* @dataProvider generateTestCases
*
* @param CommandInterface $command
* @param array $expectedHeaders
* @param array $expectedNonHeaders
*/
public function testAddsProperHeaders(
CommandInterface $command,
array $expectedHeaders,
array $expectedNonHeaders
) {
$service = $this->generateTestService();
$client = $this->generateTestClient($service);
$command = $client->getCommand(
'StreamingOp',
[
'InputStream' => Psr7\stream_for('test'),
// 'InputString' => 'some_string'
]
$serializer = ClientResolver::_default_serializer([
'api' => $service,
'endpoint' => ''
]);

$list = new HandlerList();
$list->prependBuild(Middleware::requestBuilder($serializer), 'builder');
$list->prependSign(
StreamRequestPayloadMiddleware::wrap($service),
'StreamRequestPayloadMiddleware'
);

$list = $command->getHandlerList();
// $list = new HandlerList();
$list->setHandler(function ($command, $request) {
// var_dump($request);
$list->setHandler(function (
CommandInterface $command,
RequestInterface $request
) use (
$expectedHeaders,
$expectedNonHeaders
) {
$this->assertArraySubset($expectedHeaders, $request->getHeaders());
foreach ($expectedNonHeaders as $header) {
$this->assertArrayNotHasKey($header, $request->getHeaders());
}
return new Result([]);
});
// $list->appendSign(StreamRequestPayloadMiddleware::wrap($service));

$handler = $list->resolve();
$handler($command, new Request('POST', 'https://foo.com'));
}

public function generateTestCases()
{
$service = $this->generateTestService();
$client = $this->generateTestClient($service);
$inputStream = Psr7\stream_for('test');

$result = $handler($command, new Request('POST', 'https://foo.com'));
return [
[
$client->getCommand(
'NonStreamingOp',
[
'InputString' => 'teststring',
]
),
[],
[ 'transfer-encoding', 'content-length' ],
],
[
$client->getCommand(
'StreamingOp',
[
'InputStream' => $inputStream,
]
),
[ 'content-length' => [26] ],
[ 'transfer-encoding' ],
],
[
$client->getCommand(
'StreamingLengthOp',
[
'InputStream' => $inputStream,
]
),
[ 'content-length' => [26] ],
[ 'transfer-encoding' ],
],
[
$client->getCommand(
'StreamingUnsignedOp',
[
'InputStream' => $inputStream,
]
),
[ 'transfer-encoding' => ['chunked'] ],
[ 'content-length' ],
],
[
$client->getCommand(
'StreamingLengthUnsignedOp',
[
'InputStream' => $inputStream,
]
),
[ 'content-length' => [26] ],
[ 'transfer-encoding' ],
],
];
}

private function generateTestClient(Service $service, $args = [])
Expand Down Expand Up @@ -76,6 +158,17 @@ private function generateTestService()
"type" => "blob",
"streaming" => true,
],
"NonStreamingInputShape" => [
"type" => "structure",
"required" => [
"InputString",
],
"members" => [
"InputString" => [
"shape" => "StringType",
],
],
],
"StreamingInputShape" => [
"type" => "structure",
"required" => [
Expand Down Expand Up @@ -103,6 +196,15 @@ private function generateTestService()
],
],
'operations' => [
"NonStreamingOp" => [
"name"=> "NonStreamingOp",
"http"=> [
"method"=> "POST",
"requestUri"=> "/",
"responseCode"=> 200
],
"input"=> ["shape"=> "NonStreamingInputShape"],
],
"StreamingOp" => [
"name"=> "StreamingOp",
"http"=> [
Expand Down

0 comments on commit 52759d8

Please sign in to comment.