getTestClient('s3', ['region' => 'us-east-1']); $command = $client->getCommand($commandName, $input); $xml = new RestXmlSerializer($client->getApi(), $client->getEndpoint()); return $xml($command); } public function testPreparesRequestsWithContentType() { $request = $this->getRequest('PutObject', [ 'Bucket' => 'foo', 'Key' => 'bar', 'Body' => 'baz', 'ContentType' => 'abc' ]); $this->assertSame('abc', $request->getHeaderLine('Content-Type')); } public function testEscapesAllXMLCharacters() { $request = $this->getRequest('DeleteObjects', [ 'Bucket' => 'foo', 'Delete' => ['Objects' => [ ['Key' => '/@/#/=/;/:/ /,/?/\'/"//&/\r/\n/'] ] ], ]); $contents = $request->getBody()->getContents(); $this->assertStringContainsString( "/@/#/=/;/:/ /,/?/'/"/</>/&/ / /", $contents ); } public function testPreparesRequestsWithNoContentType() { $request = $this->getRequest('PutObject', [ 'Bucket' => 'foo', 'Key' => 'bar', 'Body' => 'baz' ]); $this->assertSame('', $request->getHeaderLine('Content-Type')); } public function testPreparesRequestsWithStructurePayloadXmlContentType() { $request = $this->getRequest('CompleteMultipartUpload', [ 'Bucket' => 'foo', 'Key' => 'bar', 'UploadId' => '123', 'MultipartUpload' => [ 'parts' => [ ['ETag' => 'a', 'PartNumber' => '123'] ] ] ]); $this->assertSame( 'application/xml', $request->getHeaderLine('Content-Type') ); } /** * @dataProvider boolProvider * @param bool $arg * @param string $expected */ public function testSerializesHeaderValueToBoolString($arg, $expected) { $request = $this->getRequest('PutObject', [ 'Bucket' => 'foo', 'Key' => 'bar', 'Body' => 'baz', 'BucketKeyEnabled' => $arg, ]); $this->assertSame( $expected, $request->getHeaderLine('x-amz-server-side-encryption-bucket-key-enabled') ); } public function boolProvider() { return [ [true, 'true'], [false, 'false'] ]; } public function testDoesNotOverrideScheme() { $client = $this->getTestClient('s3', ['region' => 'us-east-1']); $serializer = new RestXmlSerializer($client->getApi(), 'http://test.com'); $cmd = new Command('HeadObject', ['baz' => []]); $endpointProvider = new EndpointProviderV2( json_decode( file_get_contents(__DIR__ . '/../../EndpointV2/valid-rules/aws-region.json'), true ), EndpointDefinitionProvider::getPartitions() ); $request = $serializer($cmd, $endpointProvider, ['Region' => 'us-east-1']); $this->assertSame('http://us-east-1.amazonaws.com/', (string) $request->getUri()); } }