1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183:
<?php
namespace Guzzle\Tests\Http;
use Guzzle\Http\EntityBody;
use Guzzle\Http\QueryString;
class EntityBodyTest extends \Guzzle\Tests\GuzzleTestCase
{
public function testFactoryThrowsException()
{
$body = EntityBody::factory(false);
}
public function testFactory()
{
$body = EntityBody::factory('data');
$this->assertEquals('data', (string) $body);
$this->assertEquals(4, $body->getContentLength());
$this->assertEquals('PHP', $body->getWrapper());
$this->assertEquals('TEMP', $body->getStreamType());
$handle = fopen(__DIR__ . '/../../../../phpunit.xml.dist', 'r');
if (!$handle) {
$this->fail('Could not open test file');
}
$body = EntityBody::factory($handle);
$this->assertEquals(__DIR__ . '/../../../../phpunit.xml.dist', $body->getUri());
$this->assertTrue($body->isLocal());
$this->assertEquals(__DIR__ . '/../../../../phpunit.xml.dist', $body->getUri());
$this->assertEquals(filesize(__DIR__ . '/../../../../phpunit.xml.dist'), $body->getContentLength());
$this->assertTrue($body === EntityBody::factory($body));
}
public function testFactoryCreatesTempStreamByDefault()
{
$body = EntityBody::factory('');
$this->assertEquals('PHP', $body->getWrapper());
$this->assertEquals('TEMP', $body->getStreamType());
$body = EntityBody::factory();
$this->assertEquals('PHP', $body->getWrapper());
$this->assertEquals('TEMP', $body->getStreamType());
}
public function testFactoryCanCreateFromObject()
{
$body = EntityBody::factory(new QueryString(array('foo' => 'bar')));
$this->assertEquals('foo=bar', (string) $body);
}
public function testFactoryEnsuresObjectsHaveToStringMethod()
{
EntityBody::factory(new \stdClass('a'));
}
public function testHandlesCompression()
{
$body = EntityBody::factory('testing 123...testing 123');
$this->assertFalse($body->getContentEncoding(), '-> getContentEncoding() must initially return FALSE');
$size = $body->getContentLength();
$body->compress();
$this->assertEquals('gzip', $body->getContentEncoding(), '-> getContentEncoding() must return the correct encoding after compressing');
$this->assertEquals(gzdeflate('testing 123...testing 123'), (string) $body);
$this->assertTrue($body->getContentLength() < $size);
$this->assertTrue($body->uncompress());
$this->assertEquals('testing 123...testing 123', (string) $body);
$this->assertFalse($body->getContentEncoding(), '-> getContentEncoding() must reset to FALSE');
if (in_array('bzip2.*', stream_get_filters())) {
$this->assertTrue($body->compress('bzip2.compress'));
$this->assertEquals('compress', $body->getContentEncoding(), '-> compress() must set \'compress\' as the Content-Encoding');
}
$this->assertFalse($body->compress('non-existent'), '-> compress() must return false when a non-existent stream filter is used');
unset($body);
$body = EntityBody::factory(gzencode('test'));
$this->assertSame($body, $body->setStreamFilterContentEncoding('zlib.deflate'));
$this->assertTrue($body->uncompress('zlib.inflate'));
$this->assertEquals('test', (string) $body);
unset($body);
$largeString = '';
for ($i = 0; $i < 25000; $i++) {
$largeString .= chr(rand(33, 126));
}
$body = EntityBody::factory($largeString);
$this->assertEquals($largeString, (string) $body);
$this->assertTrue($body->compress());
$this->assertNotEquals($largeString, (string) $body);
$compressed = (string) $body;
$this->assertTrue($body->uncompress());
$this->assertEquals($largeString, (string) $body);
$this->assertEquals($compressed, gzdeflate($largeString));
$body = EntityBody::factory(fopen(__DIR__ . '/../TestData/compress_test', 'w'));
$this->assertFalse($body->compress());
unset($body);
unlink(__DIR__ . '/../TestData/compress_test');
}
public function testDeterminesContentType()
{
$body = EntityBody::factory('testing 123...testing 123');
$this->assertNull($body->getContentType());
$body = EntityBody::factory(fopen(__FILE__, 'r'));
$this->assertContains('text/x-', $body->getContentType());
}
public function testCreatesMd5Checksum()
{
$body = EntityBody::factory('testing 123...testing 123');
$this->assertEquals(md5('testing 123...testing 123'), $body->getContentMd5());
$server = $this->getServer()->enqueue(
"HTTP/1.1 200 OK" . "\r\n" .
"Content-Length: 3" . "\r\n\r\n" .
"abc"
);
$body = EntityBody::factory(fopen($this->getServer()->getUrl(), 'r'));
$this->assertFalse($body->getContentMd5());
}
public function testSeeksToOriginalPosAfterMd5()
{
$body = EntityBody::factory('testing 123');
$body->seek(4);
$this->assertEquals(md5('testing 123'), $body->getContentMd5());
$this->assertEquals(4, $body->ftell());
$this->assertEquals('ing 123', $body->read(1000));
}
public function testGetTypeFormBodyFactoring()
{
$body = EntityBody::factory(array('key1' => 'val1', 'key2' => 'val2'));
$this->assertEquals('key1=val1&key2=val2', (string) $body);
}
public function testAllowsCustomRewind()
{
$body = EntityBody::factory('foo');
$rewound = false;
$body->setRewindFunction(function ($body) use (&$rewound) {
$rewound = true;
return $body->seek(0);
});
$body->seek(2);
$this->assertTrue($body->rewind());
$this->assertTrue($rewound);
}
public function testCustomRewindFunctionMustBeCallable()
{
$body = EntityBody::factory();
$body->setRewindFunction('foo');
}
}