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/DebugTest.php

487 lines
14 KiB
PHP

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

<?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 DebugTest extends \PHPUnit_Framework_TestCase
{
public function teardown()
{
Client::setDebug(false);
}
public function testInstanceDebug()
{
$handler = $this->getMockHandler([new Response(400, [], json_encode(['detail' => 'error info']))]);
$client = new Client(
[
'base_uri' => 'http://example.org',
'handler' => $handler,
]
);
$client->setAuth('test', 'test', 'test');
$fp = fopen('php://memory', 'a+');
$client->setInstanceDebug($fp);
ob_start();
try {
$client->get('/error');
} catch (\Exception $e) {
}
$this->assertEmpty(ob_get_clean());
$output = $this->readStreamData($fp);
$expectedOutput = <<<EOF
===> [ERROR] Call to /error failed with a 400 Bad Request result
===> [ERROR] This indicates a problem with authentication or headers.
===> [ERROR] Please ensure that the .edgerc file is formatted correctly.
===> [ERROR] If you still have issues, please use gen_edgerc.php to generate the credentials
===> [ERROR] Problem details:
error info
EOF;
$this->assertEquals($expectedOutput, $output);
}
public function testStaticDebug()
{
$handler = $this->getMockHandler([new Response(400, [], json_encode(['detail' => 'error info']))]);
$client = new Client(
[
'base_uri' => 'http://example.org',
'handler' => $handler,
]
);
$client->setAuth('test', 'test', 'test');
$fp = fopen('php://memory', 'a+');
Client::setDebug($fp);
ob_start();
try {
$client->get('/error');
} catch (\Exception $e) {
}
$this->assertEmpty(ob_get_clean());
$output = $this->readStreamData($fp);
$expectedOutput = <<<EOF
===> [ERROR] Call to /error failed with a 400 Bad Request result
===> [ERROR] This indicates a problem with authentication or headers.
===> [ERROR] Please ensure that the .edgerc file is formatted correctly.
===> [ERROR] If you still have issues, please use gen_edgerc.php to generate the credentials
===> [ERROR] Problem details:
error info
EOF;
$this->assertEquals($expectedOutput, $output);
}
public function testDebugOverride()
{
$handler = $this->getMockHandler([new Response(400, [], json_encode(['detail' => 'error string']))]);
$client = new Client(
[
'base_uri' => 'http://example.org',
'handler' => $handler,
]
);
$fp = fopen('php://memory', 'a+');
Client::setDebug($fp);
$client->setInstanceDebug(false);
ob_start();
try {
$client->get('/error');
} catch (\Exception $e) {
}
$this->assertEmpty(ob_get_clean());
$output = $this->readStreamData($fp);
$expectedOutput = "";
$this->assertEquals($expectedOutput, $output);
}
public function testInstanceOverrideStream()
{
$handler = $this->getMockHandler([new Response(400, [], json_encode(['detail' => 'error string']))]);
$client = new Client(
[
'base_uri' => 'http://example.org',
'handler' => $handler,
]
);
$fp = fopen('php://memory', 'a+');
Client::setDebug($fp);
$fp2 = fopen('php://memory', 'a+');
$client->setInstanceDebug($fp2);
ob_start();
try {
$client->get('/error');
} catch (\Exception $e) {
}
$this->assertEmpty(ob_get_clean());
$output = $this->readStreamData($fp);
$expectedOutput = "";
$this->assertEquals($expectedOutput, $output);
$output = $this->readStreamData($fp2);
$expectedOutput = <<<EOF
===> [ERROR] Call to /error failed with a 400 Bad Request result
===> [ERROR] This indicates a problem with authentication or headers.
===> [ERROR] Please ensure that the .edgerc file is formatted correctly.
===> [ERROR] If you still have issues, please use gen_edgerc.php to generate the credentials
===> [ERROR] Problem details:
error string
EOF;
$this->assertEquals($expectedOutput, $output);
}
public function testDebugMessages()
{
$handler = $this->getMockHandler([
new Response(400, [], json_encode(['detail' => 'error message 1'])),
new Response(401, [], json_encode(['detail' => 'error message 2'])),
new Response(403, [], json_encode(['detail' => 'error message 3'])),
new Response(404, [], json_encode(['detail' => 'error message 4']))
]);
$client = new Client(
[
'base_uri' => 'http://example.org',
'handler' => $handler,
]
);
$client->setAuth('test', 'test', 'test');
$fp = fopen('php://memory', 'a+');
$client->setInstanceDebug($fp);
ob_start();
try {
$client->get('/400');
} catch (\Exception $e) {
}
try {
$client->get('/401');
} catch (\Exception $e) {
}
try {
$client->get('/403');
} catch (\Exception $e) {
}
try {
$client->get('/404');
} catch (\Exception $e) {
}
$this->assertEmpty(ob_get_clean());
$output = $this->readStreamData($fp);
$expectedOutput = <<<EOF
===> [ERROR] Call to /400 failed with a 400 Bad Request result
===> [ERROR] This indicates a problem with authentication or headers.
===> [ERROR] Please ensure that the .edgerc file is formatted correctly.
===> [ERROR] If you still have issues, please use gen_edgerc.php to generate the credentials
===> [ERROR] Problem details:
error message 1
===> [ERROR] Call to /401 failed with a 401 Unauthorized result
===> [ERROR] This indicates a problem with authentication or headers.
===> [ERROR] Please ensure that the .edgerc file is formatted correctly.
===> [ERROR] If you still have issues, please use gen_edgerc.php to generate the credentials
===> [ERROR] Problem details:
error message 2
===> [ERROR] Call to /403 failed with a 403 Forbidden result
===> [ERROR] This indicates a problem with authorization.
===> [ERROR] Please ensure that the credentials you created for this script
===> [ERROR] have the necessary permissions in the Luna portal.
===> [ERROR] Problem details:
error message 3
===> [ERROR] Call to /404 failed with a 404 Not Found result
===> [ERROR] This means that the page does not exist as requested.
===> [ERROR] Please ensure that the URL you're calling is correctly formatted
===> [ERROR] or look at other examples to make sure yours matches.
===> [ERROR] Problem details:
error message 4
EOF;
$this->assertEquals($expectedOutput, $output);
}
public function testResponseNoDetail()
{
$handler = $this->getMockHandler([new Response(500, [], json_encode(['nodetail' => 'error info']))]);
$client = new Client(
[
'base_uri' => 'http://example.org',
'handler' => $handler,
]
);
$client->setAuth('test', 'test', 'test');
$fp = fopen('php://memory', 'a+');
Client::setDebug($fp);
ob_start();
try {
$client->get('/error');
} catch (\Exception $e) {
}
$this->assertEmpty(ob_get_clean());
$output = $this->readStreamData($fp);
$expectedOutput = <<<EOF
===> [ERROR] Call to /error failed with a 500 Internal Server Error result
===> [ERROR] Problem details:
{
"nodetail": "error info"
}
EOF;
$this->assertEquals($expectedOutput, $output);
}
public function testResponseNoBody()
{
$handler = $this->getMockHandler([new Response(500, [])]);
$client = new Client(
[
'base_uri' => 'http://example.org',
'handler' => $handler,
]
);
$client->setAuth('test', 'test', 'test');
$fp = fopen('php://memory', 'a+');
Client::setDebug($fp);
ob_start();
try {
$client->get('/error');
} catch (\Exception $e) {
}
$this->assertEmpty(ob_get_clean());
$output = $this->readStreamData($fp);
$expectedOutput = <<<EOF
===> [ERROR] Call to /error failed with a 500 Internal Server Error result
===> [ERROR] Problem details:
No response body returned
EOF;
$this->assertEquals($expectedOutput, $output);
}
public function testResponseNoJsonBody()
{
$handler = $this->getMockHandler([new Response(500, [], "error info")]);
$client = new Client(
[
'base_uri' => 'http://example.org',
'handler' => $handler,
]
);
$client->setAuth('test', 'test', 'test');
$fp = fopen('php://memory', 'a+');
Client::setDebug($fp);
ob_start();
try {
$client->get('/error');
} catch (\Exception $e) {
}
$this->assertEmpty(ob_get_clean());
$output = $this->readStreamData($fp);
$expectedOutput = <<<EOF
===> [ERROR] Call to /error failed with a 500 Internal Server Error result
===> [ERROR] Problem details:
error info
EOF;
$this->assertEquals($expectedOutput, $output);
}
public function testStringResource()
{
$handler = new \Akamai\Open\EdgeGrid\Handler\Debug('php://stdout');
$fp = \PHPUnit_Framework_Assert::readAttribute($handler, 'fp');
$this->assertEquals('php://stdout', stream_get_meta_data($fp)['uri']);
}
/**
* @expectedException \Akamai\Open\EdgeGrid\Exception\HandlerException\IOException
* @expectedExceptionMessage Unable to use resource: fake://stream
*/
public function testInvalidStringResource()
{
$handler = new \Akamai\Open\EdgeGrid\Handler\Debug('fake://stream');
}
public function testDebugResponseExceptionNoCode()
{
$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,
]
);
$fp = fopen('php://memory', 'a+');
Client::setDebug($fp);
ob_start();
try {
$client->get('/error');
} catch (\GuzzleHttp\Exception\RequestException $e) {
}
$this->assertEmpty(ob_get_clean());
$output = $this->readStreamData($fp);
$this->assertEmpty($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,
]
);
$fp = fopen("php://memory", "a+");
Client::setDebug($fp);
ob_start();
try {
$client->get('/error');
} catch (\GuzzleHttp\Exception\RequestException $e) {
}
$this->assertEmpty(ob_get_clean());
$output = $this->readStreamData($fp);
$this->assertEmpty($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,
]
);
$fp = fopen('php://memory', 'a+');
Client::setDebug($fp);
ob_start();
try {
$client->get('/error');
} catch (\GuzzleHttp\Exception\RequestException $e) {
}
$this->assertEmpty(ob_get_clean());
$output = $this->readStreamData($fp);
$this->assertEmpty($output);
}
public function getMockHandler($request, array &$container = null)
{
$client = new \Akamai\Open\EdgeGrid\Tests\ClientTest();
return $client->getMockHandler($request, $container);
}
protected function readStreamData($fp)
{
fseek($fp, 0);
$output = '';
while (!feof($fp)) {
$output .= fgets($fp);
}
return $output;
}
}