You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
information-system/akamai/vendor/akamai-open/edgegrid-client/tests/Handler/VerboseTest.php

627 lines
22 KiB
PHP

<?php
/**
*
* Original Author: Davey Shafik <dshafik@akamai.com>
*
* For more information visit https://developer.akamai.com
*
* Copyright 2014 Akamai Technologies, Inc. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
namespace Akamai\Open\EdgeGrid\Tests\Handler;
use GuzzleHttp\Psr7\Response;
use Akamai\Open\EdgeGrid\Client;
class VerboseTest extends \PHPUnit_Framework_TestCase
{
public function teardown()
{
Client::setVerbose(false);
}
public function testInstanceVerboseSingle()
{
$handler = $this->getMockHandler([new Response(200, [], json_encode(['test' => 'data']))]);
$client = new Client(
[
'base_uri' => 'http://example.org',
'handler' => $handler,
]
);
$client->setAuth('test', 'test', 'test');
$client->setInstanceVerbose(true);
ob_start();
$client->get('/test');
$output = ob_get_clean();
$expectedOutput = hex2bin(
'1b5b33363b30316d3d3d3d3e205b564552424f53455d20526571756573743a200a1b5b33333' .
'b30316d4e6f207265717565737420626f64792073656e741b5b33393b34393b30306d0a1b5b' .
'33363b30316d3d3d3d3e205b564552424f53455d20526573706f6e73653a200a1b5b33333b3' .
'0316d7b0a202020202274657374223a202264617461220a7d1b5b33393b34393b30306d0a'
);
$this->assertEquals($expectedOutput, $output);
}
public function testInstanceVerboseMultiple()
{
$handler = $this->getMockHandler([
new Response(200, [], json_encode(['test' => 'data'])),
new Response(200, [], json_encode(['test' => 'data2', ["foo", "bar"], false, null, 123, 0.123]))
]);
$client = new Client(
[
'base_uri' => 'http://example.org',
'handler' => $handler,
]
);
$client->setAuth('test', 'test', 'test');
$client->setInstanceVerbose(true);
ob_start();
$client->get('/test1');
$client->get('/test2');
$output = ob_get_clean();
$expectedOutput = hex2bin(
'1b5b33363b30316d3d3d3d3e205b564552424f53455d20526571756573743a200a1b5b33333' .
'b30316d4e6f207265717565737420626f64792073656e741b5b33393b34393b30306d0a1b5b' .
'33363b30316d3d3d3d3e205b564552424f53455d20526573706f6e73653a200a1b5b33333b3' .
'0316d7b0a202020202274657374223a202264617461220a7d1b5b33393b34393b30306d0a1b' .
'5b33363b30316d3d3d3d3e205b564552424f53455d20526571756573743a200a1b5b33333b3' .
'0316d4e6f207265717565737420626f64792073656e741b5b33393b34393b30306d0a1b5b33' .
'363b30316d3d3d3d3e205b564552424f53455d20526573706f6e73653a200a1b5b33333b303' .
'16d7b0a202020202274657374223a20226461746132222c0a202020202230223a205b0a2020' .
'20202020202022666f6f222c0a202020202020202022626172220a202020205d2c0a2020202' .
'02231223a2066616c73652c0a202020202232223a206e756c6c2c0a202020202233223a2031' .
'32332c0a202020202234223a20302e3132330a7d1b5b33393b34393b30306d0a'
);
$this->assertEquals($expectedOutput, $output);
}
public function testStaticVerboseSingle()
{
$handler = $this->getMockHandler([new Response(200, [], json_encode(['test' => 'data']))]);
$client = new Client(
[
'base_uri' => 'http://example.org',
'handler' => $handler,
]
);
Client::setVerbose(true);
ob_start();
$client->get('/test');
$output = ob_get_clean();
$expectedOutput = hex2bin(
'1b5b33363b30316d3d3d3d3e205b564552424f53455d20526571756573743a200a1b5b33333' .
'b30316d4e6f207265717565737420626f64792073656e741b5b33393b34393b30306d0a1b5b' .
'33363b30316d3d3d3d3e205b564552424f53455d20526573706f6e73653a200a1b5b33333b3' .
'0316d7b0a202020202274657374223a202264617461220a7d1b5b33393b34393b30306d0a'
);
$this->assertEquals($expectedOutput, $output);
}
public function testStaticVerboseMultiple()
{
$handler = $this->getMockHandler([
new Response(200, [], json_encode(['test' => 'data'])),
new Response(200, [], json_encode(['test' => 'data2', ["foo", "bar"], false, null, 123, 0.123]))
]);
$client = new Client(
[
'base_uri' => 'http://example.org',
'handler' => $handler,
]
);
Client::setVerbose(true);
ob_start();
$client->get('/test');
$client->get('/test2');
$output = ob_get_clean();
$expectedOutput = hex2bin(
'1b5b33363b30316d3d3d3d3e205b564552424f53455d20526571756573743a200a1b5b33333' .
'b30316d4e6f207265717565737420626f64792073656e741b5b33393b34393b30306d0a1b5b' .
'33363b30316d3d3d3d3e205b564552424f53455d20526573706f6e73653a200a1b5b33333b3' .
'0316d7b0a202020202274657374223a202264617461220a7d1b5b33393b34393b30306d0a1b' .
'5b33363b30316d3d3d3d3e205b564552424f53455d20526571756573743a200a1b5b33333b3' .
'0316d4e6f207265717565737420626f64792073656e741b5b33393b34393b30306d0a1b5b33' .
'363b30316d3d3d3d3e205b564552424f53455d20526573706f6e73653a200a1b5b33333b303' .
'16d7b0a202020202274657374223a20226461746132222c0a202020202230223a205b0a2020' .
'20202020202022666f6f222c0a202020202020202022626172220a202020205d2c0a2020202' .
'02231223a2066616c73652c0a202020202232223a206e756c6c2c0a202020202233223a2031' .
'32332c0a202020202234223a20302e3132330a7d1b5b33393b34393b30306d0a'
);
$this->assertEquals($expectedOutput, $output);
}
public function testVerboseOverrideSingle()
{
$handler = $this->getMockHandler([new Response(200, [], json_encode(['test' => 'data']))]);
$client = new Client(
[
'base_uri' => 'http://example.org',
'handler' => $handler,
]
);
Client::setVerbose(true);
$client->setInstanceVerbose(false);
ob_start();
$client->get('/test');
$output = ob_get_clean();
$expectedOutput = "";
$this->assertEquals($expectedOutput, $output);
}
public function testVerboseOverrideMultiple()
{
$handler = $this->getMockHandler([
new Response(200, [], json_encode(['test' => 'data'])),
new Response(200, [], json_encode(['test' => 'data2', ["foo", "bar"], false, null, 123, 0.123]))
]);
$client = new Client(
[
'base_uri' => 'http://example.org',
'handler' => $handler,
]
);
Client::setVerbose(true);
$client->setInstanceVerbose(false);
ob_start();
$client->get('/test');
$client->get('/test2');
$output = ob_get_clean();
$expectedOutput = "";
$this->assertEquals($expectedOutput, $output);
}
public function testVerboseRedirect()
{
$handler = $this->getMockHandler([
new Response(301, ["Location" => "http://example.org/redirected"], json_encode(['test' => 'data'])),
new Response(200, [], json_encode(['test' => 'data2', ["foo", "bar"], false, null, 123, 0.123]))
]);
$client = new Client(
[
'base_uri' => 'http://example.org',
'handler' => $handler,
]
);
Client::setVerbose(true);
ob_start();
$client->get('/redirect');
$output = ob_get_clean();
$expectedOutput = hex2bin(
'1b5b33363b30316d3d3d3d3e205b564552424f53455d20526571756573743a200a1b5b33333' .
'b30316d4e6f207265717565737420626f64792073656e741b5b33393b34393b30306d0a1b5b' .
'33363b30316d3d3d3d3e205b564552424f53455d20526564697265637465643a20687474703' .
'a2f2f6578616d706c652e6f72672f726564697265637465641b5b33393b34393b30306d0a1b' .
'5b33363b30316d3d3d3d3e205b564552424f53455d20526571756573743a200a1b5b33333b3' .
'0316d4e6f207265717565737420626f64792073656e741b5b33393b34393b30306d0a1b5b33' .
'363b30316d3d3d3d3e205b564552424f53455d20526573706f6e73653a200a1b5b33333b303' .
'16d7b0a202020202274657374223a20226461746132222c0a202020202230223a205b0a2020' .
'20202020202022666f6f222c0a202020202020202022626172220a202020205d2c0a2020202' .
'02231223a2066616c73652c0a202020202232223a206e756c6c2c0a202020202233223a2031' .
'32332c0a202020202234223a20302e3132330a7d1b5b33393b34393b30306d0a'
);
$this->assertEquals($expectedOutput, $output);
}
public function testVerboseNonJson()
{
$handler = $this->getMockHandler([
new Response(200, [], "String body")
]);
$client = new Client(
[
'base_uri' => 'http://example.org',
'handler' => $handler,
]
);
Client::setVerbose(true);
ob_start();
try {
$client->get('/error');
} catch (\GuzzleHttp\Exception\ClientException $e) {
}
$output = ob_get_clean();
$expectedOutput = hex2bin(
'1b5b33363b30316d3d3d3d3e205b564552424f53455d20526571756573743a200a1b5b33333' .
'b30316d4e6f207265717565737420626f64792073656e741b5b33393b34393b30306d0a1b5b' .
'33363b30316d3d3d3d3e205b564552424f53455d20526573706f6e73653a200a1b5b33333b3' .
'0316d537472696e6720626f64791b5b33393b34393b30306d0a'
);
$this->assertEquals($expectedOutput, $output);
}
public function testVerboseRequestHandler()
{
$handler = $this->getMockHandler([
new Response(200, [], "String body")
]);
$client = new Client(
[
'base_uri' => 'http://example.org',
]
);
Client::setVerbose(true);
ob_start();
try {
$client->get('/error', ['handler' => $handler]);
} catch (\GuzzleHttp\Exception\ClientException $e) {
}
$output = ob_get_clean();
$expectedOutput = hex2bin(
'1b5b33363b30316d3d3d3d3e205b564552424f53455d20526571756573743a200a1b5b33333' .
'b30316d4e6f207265717565737420626f64792073656e741b5b33393b34393b30306d0a1b5b' .
'33363b30316d3d3d3d3e205b564552424f53455d20526573706f6e73653a200a1b5b33333b3' .
'0316d537472696e6720626f64791b5b33393b34393b30306d0a'
);
$this->assertEquals($expectedOutput, $output);
}
public function testVerboseNoResponse()
{
$handler = $this->getMockHandler([
new Response(101)
]);
$client = new Client(
[
'base_uri' => 'http://example.org',
'handler' => $handler,
]
);
Client::setVerbose(true);
ob_start();
try {
$client->get('/error');
} catch (\GuzzleHttp\Exception\ClientException $e) {
}
$output = ob_get_clean();
$expectedOutput = hex2bin(
'1b5b33363b30316d3d3d3d3e205b564552424f53455d20526571756573743a200a1b5b33333' .
'b30316d4e6f207265717565737420626f64792073656e741b5b33393b34393b30306d0a1b5b' .
'33363b30316d3d3d3d3e205b564552424f53455d20526573706f6e73653a200a1b5b33333b3' .
'0316d4e6f20726573706f6e736520626f64792072657475726e65641b5b33393b34393b3030' .
'6d0a'
);
$this->assertEquals($expectedOutput, $output);
}
public function testVerboseError()
{
$handler = $this->getMockHandler([
new Response(404, [], json_encode(['test' => 'data2', ["foo", "bar"], false, null, 123, 0.123]))
]);
$client = new Client(
[
'base_uri' => 'http://example.org',
'handler' => $handler,
]
);
$fp = fopen('php://memory', 'a+');
Client::setVerbose([$fp, $fp]);
ob_start();
try {
$client->get('/error');
} catch (\GuzzleHttp\Exception\ClientException $e) {
}
$this->assertEmpty(ob_get_clean());
fseek($fp, 0);
$output = '';
do {
$output .= fgets($fp);
} while (!feof($fp));
$expectedOutput = hex2bin(
'1b5b33363b30316d3d3d3d3e205b564552424f53455d20526571756573743a200a1b5b33333b30316d4e6f207265717565737420626f64792073656e741b5b33393b34393b30306d0a1b5b33313b30316d3d3d3d3e205b4552524f525d20416e206572726f72206f636375727265643a200a1b5b33333b30316d7b0a202020202274657374223a20226461746132222c0a202020202230223a205b0a202020202020202022666f6f222c0a202020202020202022626172220a202020205d2c0a202020202231223a2066616c73652c0a202020202232223a206e756c6c2c0a202020202233223a203132332c0a202020202234223a20302e3132330a7d1b5b33393b34393b30306d0a'
);
$this->assertEquals($expectedOutput, $output);
}
public function testVerboseErrorNonJson()
{
$handler = $this->getMockHandler([
new Response(404, [], "String body")
]);
$client = new Client(
[
'base_uri' => 'http://example.org',
'handler' => $handler,
]
);
$fp = fopen('php://memory', 'a+');
Client::setVerbose($fp);
ob_start();
try {
$client->get('/error');
} catch (\GuzzleHttp\Exception\ClientException $e) {
}
$this->assertEmpty(ob_get_clean());
fseek($fp, 0);
$output = '';
do {
$output .= fgets($fp);
} while (!feof($fp));
$expectedOutput = hex2bin(
'1b5b33363b30316d3d3d3d3e205b564552424f53455d20526571756573743a200a1b5b33333b30316d4e6f207265717565737420626f64792073656e741b5b33393b34393b30306d0a1b5b33313b30316d3d3d3d3e205b4552524f525d20416e206572726f72206f636375727265643a200a1b5b33333b30316d537472696e6720626f64791b5b33393b34393b30306d0a'
);
$this->assertEquals($expectedOutput, $output);
}
public function testVerboseMixed()
{
$handler = $this->getMockHandler([
new Response(200, [], json_encode(['test' => 'data'])),
new Response(404, [], json_encode(['test' => 'data2', ["foo", "bar"], false, null, 123, 0.123]))
]);
$client = new Client(
[
'base_uri' => 'http://example.org',
'handler' => $handler,
]
);
$fp = fopen('php://memory', 'a+');
Client::setVerbose(['php://output', $fp]);
ob_start();
try {
$client->get('/success');
$client->get('/error');
} catch (\GuzzleHttp\Exception\ClientException $e) {
}
$output = ob_get_clean();
$expectedOutput = hex2bin(
'1b5b33363b30316d3d3d3d3e205b564552424f53455d20526571756573743a200a1b5b33333b30316d4e6f207265717565737420626f64792073656e741b5b33393b34393b30306d0a1b5b33363b30316d3d3d3d3e205b564552424f53455d20526573706f6e73653a200a1b5b33333b30316d7b0a202020202274657374223a202264617461220a7d1b5b33393b34393b30306d0a1b5b33363b30316d3d3d3d3e205b564552424f53455d20526571756573743a200a1b5b33333b30316d4e6f207265717565737420626f64792073656e741b5b33393b34393b30306d0a'
);
$this->assertEquals($expectedOutput, $output);
fseek($fp, 0);
$output = '';
do {
$output .= fgets($fp);
} while (!feof($fp));
$expectedError = hex2bin(
'1b5b33313b30316d3d3d3d3e205b4552524f525d20416e206572726f72206f6363757272656' .
'43a200a1b5b33333b30316d7b0a202020202274657374223a20226461746132222c0a202020' .
'202230223a205b0a202020202020202022666f6f222c0a202020202020202022626172220a2' .
'02020205d2c0a202020202231223a2066616c73652c0a202020202232223a206e756c6c2c0a' .
'202020202233223a203132332c0a202020202234223a20302e3132330a7d1b5b33393b34393' .
'b30306d0a'
);
$this->assertEquals($expectedError, $output);
}
public function testVerboseResponseExceptionNoCode()
{
$handler = $this->getMockHandler([
new \GuzzleHttp\Exception\RequestException("Error message", new \GuzzleHttp\Psr7\Request('GET', '/test'))
]);
$client = new Client(
[
'base_uri' => 'http://example.org',
'handler' => $handler,
]
);
Client::setVerbose(true);
ob_start();
try {
$client->get('/error');
} catch (\GuzzleHttp\Exception\RequestException $e) {
}
$output = ob_get_clean();
$expectedOutput = hex2bin(
'1b5b33363b30316d3d3d3d3e205b564552424f53455d20526571756573743a200a1b5b33333' .
'b30316d4e6f207265717565737420626f64792073656e741b5b33393b34393b30306d0a1b5b' .
'33313b30316d3d3d3d3e205b4552524f525d20416e206572726f72206f636375727265643a2' .
'00a1b5b33333b30316d4572726f72206d6573736167651b5b33393b34393b30306d0a'
);
$this->assertEquals($expectedOutput, $output);
}
public function testVerboseResponseExceptionWithCode()
{
$handler = $this->getMockHandler([
new \GuzzleHttp\Exception\RequestException(
"Error message",
new \GuzzleHttp\Psr7\Request('GET', '/test'),
new Response(500)
)
]);
$client = new Client(
[
'base_uri' => 'http://example.org',
'handler' => $handler,
]
);
Client::setVerbose(true);
ob_start();
try {
$client->get('/error');
} catch (\GuzzleHttp\Exception\RequestException $e) {
}
$output = ob_get_clean();
$expectedOutput = hex2bin(
'1b5b33363b30316d3d3d3d3e205b564552424f53455d20526571756573743a200a1b5b33333' .
'b30316d4e6f207265717565737420626f64792073656e741b5b33393b34393b30306d0a1b5b' .
'33313b30316d3d3d3d3e205b4552524f525d20416e206572726f72206f636375727265643a2' .
'00a1b5b33333b30316d3530303a204572726f72206d6573736167651b5b33393b34393b3030' .
'6d0a'
);
$this->assertEquals($expectedOutput, $output);
}
public function testVerboseResponseExceptionWithBody()
{
$handler = $this->getMockHandler([
new \GuzzleHttp\Exception\RequestException(
"Error message",
new \GuzzleHttp\Psr7\Request('GET', '/test'),
new Response(500, [], json_encode(["errorString" => "An error"]))
)
]);
$client = new Client(
[
'base_uri' => 'http://example.org',
'handler' => $handler,
]
);
Client::setVerbose(true);
ob_start();
try {
$client->get('/error');
} catch (\GuzzleHttp\Exception\RequestException $e) {
}
$output = ob_get_clean();
$expectedOutput = hex2bin(
'1b5b33363b30316d3d3d3d3e205b564552424f53455d20526571756573743a200a1b5b33333' .
'b30316d4e6f207265717565737420626f64792073656e741b5b33393b34393b30306d0a1b5b' .
'33313b30316d3d3d3d3e205b4552524f525d20416e206572726f72206f636375727265643a2' .
'00a1b5b33333b30316d3530303a204572726f72206d6573736167650a1b5b33333b30316d7b' .
'226572726f72537472696e67223a22416e206572726f72227d1b5b33393b34393b30306d0a'
);
$this->assertEquals($expectedOutput, $output);
}
public function testVerboseSingleStreamString()
{
$verbose = new \Akamai\Open\EdgeGrid\Handler\Verbose('php://memory');
$fp = \PHPUnit_Framework_Assert::readAttribute($verbose, 'outputStream');
$fp2 = \PHPUnit_Framework_Assert::readAttribute($verbose, 'errorStream');
$this->assertSame($fp, $fp2);
$this->assertTrue(stream_get_meta_data($fp)['uri'] == 'php://memory');
}
/**
* @expectedException \Akamai\Open\EdgeGrid\Exception\HandlerException\IOException
* @expectedExceptionMessage Unable to use output stream: error://stream
*/
public function testVerboseSingleStreamStringInvalid()
{
$verbose = new \Akamai\Open\EdgeGrid\Handler\Verbose('error://stream');
}
public function testVerboseDualStreamString()
{
$verbose = new \Akamai\Open\EdgeGrid\Handler\Verbose('php://memory', 'php://temp');
$fp = \PHPUnit_Framework_Assert::readAttribute($verbose, 'outputStream');
$fp2 = \PHPUnit_Framework_Assert::readAttribute($verbose, 'errorStream');
$this->assertNotSame($fp, $fp2);
$this->assertTrue(stream_get_meta_data($fp)['uri'] == 'php://memory');
$this->assertTrue(stream_get_meta_data($fp2)['uri'] == 'php://temp');
}
/**
* @expectedException \Akamai\Open\EdgeGrid\Exception\HandlerException\IOException
* @expectedExceptionMessage Unable to use error stream: error://stream
*/
public function testVerboseDualStreamStringErrorInvalid()
{
$verbose = new \Akamai\Open\EdgeGrid\Handler\Verbose('php://input', 'error://stream');
}
/**
* @expectedException \Akamai\Open\EdgeGrid\Exception\HandlerException\IOException
* @expectedExceptionMessage Unable to use output stream: error://stream
*/
public function testVerboseDualStreamStringInvalid()
{
$verbose = new \Akamai\Open\EdgeGrid\Handler\Verbose('error://stream', 'error://stream2');
}
public function getMockHandler($request, array &$container = null)
{
$client = new \Akamai\Open\EdgeGrid\Tests\ClientTest();
return $client->getMockHandler($request, $container);
}
}