From 03ef74d0cfe675a6e18a91f039182ca1b248d8f5 Mon Sep 17 00:00:00 2001 From: EoleDev Date: Wed, 9 Mar 2016 16:03:46 +0100 Subject: [PATCH] MAJ Librarys --- server/vendor/composer/autoload_psr4.php | 2 - server/vendor/composer/installed.json | 317 +++++++++--------- .../vendor/guzzlehttp/promises/CHANGELOG.md | 6 + .../guzzlehttp/promises/src/EachPromise.php | 20 +- .../guzzlehttp/promises/src/Promise.php | 27 +- .../guzzlehttp/promises/src/TaskQueue.php | 1 + .../guzzlehttp/promises/src/functions.php | 8 +- .../promises/tests/EachPromiseTest.php | 48 ++- .../guzzlehttp/promises/tests/PromiseTest.php | 12 + server/vendor/guzzlehttp/psr7/CHANGELOG.md | 6 + server/vendor/guzzlehttp/psr7/README.md | 4 +- .../guzzlehttp/psr7/src/CachingStream.php | 9 +- .../guzzlehttp/psr7/src/InflateStream.php | 27 +- .../psr7/tests/CachingStreamTest.php | 27 ++ .../psr7/tests/InflateStreamTest.php | 23 ++ .../vendor/guzzlehttp/psr7/tests/UriTest.php | 2 +- server/vendor/php-opencloud/openstack | 2 +- 17 files changed, 347 insertions(+), 194 deletions(-) diff --git a/server/vendor/composer/autoload_psr4.php b/server/vendor/composer/autoload_psr4.php index 077c577..0b3ff02 100644 --- a/server/vendor/composer/autoload_psr4.php +++ b/server/vendor/composer/autoload_psr4.php @@ -7,8 +7,6 @@ $baseDir = dirname($vendorDir); return array( 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'), - 'OpenStack\\Test\\' => array($vendorDir . '/php-opencloud/openstack/tests/unit'), - 'OpenStack\\Integration\\' => array($vendorDir . '/php-opencloud/openstack/tests/integration'), 'OpenStack\\' => array($vendorDir . '/php-opencloud/openstack/src'), 'OpenCloud\\Test\\' => array($vendorDir . '/php-opencloud/common/tests/unit'), 'OpenCloud\\Integration\\' => array($vendorDir . '/php-opencloud/common/tests/integration'), diff --git a/server/vendor/composer/installed.json b/server/vendor/composer/installed.json index 70c1b5b..8f06408 100644 --- a/server/vendor/composer/installed.json +++ b/server/vendor/composer/installed.json @@ -1,57 +1,4 @@ [ - { - "name": "guzzlehttp/promises", - "version": "1.0.3", - "version_normalized": "1.0.3.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "b1e1c0d55f8083c71eda2c28c12a228d708294ea" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/b1e1c0d55f8083c71eda2c28c12a228d708294ea", - "reference": "b1e1c0d55f8083c71eda2c28c12a228d708294ea", - "shasum": "" - }, - "require": { - "php": ">=5.5.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "time": "2015-10-15 22:28:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ] - }, { "name": "psr/http-message", "version": "1.0", @@ -167,54 +114,6 @@ "web service" ] }, - { - "name": "php-opencloud/openstack", - "version": "dev-master", - "version_normalized": "9999999-dev", - "source": { - "type": "git", - "url": "https://github.com/php-opencloud/openstack.git", - "reference": "15aca73f423166c7ef8337ba08615c103c66e931" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-opencloud/openstack/zipball/f2ee77024843659d970817a9e7055bb40a3724f9", - "reference": "15aca73f423166c7ef8337ba08615c103c66e931", - "shasum": "" - }, - "require": { - "guzzlehttp/guzzle": "~6.1", - "justinrainbow/json-schema": "~1.3", - "php": ">=5.6" - }, - "require-dev": { - "fabpot/php-cs-fixer": "~1.0", - "jakub-onderka/php-parallel-lint": "0.*", - "phpspec/prophecy-phpunit": "~1.0", - "phpunit/phpunit": "~4.0", - "psr/log": "~1.0", - "sami/sami": "dev-master", - "satooshi/php-coveralls": "~1.0" - }, - "time": "2016-01-25 10:35:10", - "type": "library", - "installation-source": "source", - "autoload": { - "psr-4": { - "OpenStack\\": "src/", - "OpenStack\\Test\\": "tests/unit/", - "OpenStack\\Integration\\": "tests/integration/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "authors": [ - { - "name": "Jamie Hannaford", - "email": "jamie.hannaford@rackspace.com", - "homepage": "https://github.com/jamiehannaford" - } - ] - }, { "name": "justinrainbow/json-schema", "version": "1.6.1", @@ -283,66 +182,6 @@ "schema" ] }, - { - "name": "guzzlehttp/psr7", - "version": "1.2.2", - "version_normalized": "1.2.2.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "f5d04bdd2881ac89abde1fb78cc234bce24327bb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5d04bdd2881ac89abde1fb78cc234bce24327bb", - "reference": "f5d04bdd2881ac89abde1fb78cc234bce24327bb", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "time": "2016-01-23 01:23:02", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "PSR-7 message implementation", - "keywords": [ - "http", - "message", - "stream", - "uri" - ] - }, { "name": "php-opencloud/common", "version": "dev-master", @@ -389,5 +228,161 @@ "homepage": "https://github.com/jamiehannaford" } ] + }, + { + "name": "guzzlehttp/promises", + "version": "1.1.0", + "version_normalized": "1.1.0.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "bb9024c526b22f3fe6ae55a561fd70653d470aa8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/bb9024c526b22f3fe6ae55a561fd70653d470aa8", + "reference": "bb9024c526b22f3fe6ae55a561fd70653d470aa8", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "time": "2016-03-08 01:15:46", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ] + }, + { + "name": "guzzlehttp/psr7", + "version": "1.2.3", + "version_normalized": "1.2.3.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "2e89629ff057ebb49492ba08e6995d3a6a80021b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/2e89629ff057ebb49492ba08e6995d3a6a80021b", + "reference": "2e89629ff057ebb49492ba08e6995d3a6a80021b", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "time": "2016-02-18 21:54:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "PSR-7 message implementation", + "keywords": [ + "http", + "message", + "stream", + "uri" + ] + }, + { + "name": "php-opencloud/openstack", + "version": "dev-master", + "version_normalized": "9999999-dev", + "source": { + "type": "git", + "url": "https://github.com/php-opencloud/openstack.git", + "reference": "f2ee77024843659d970817a9e7055bb40a3724f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-opencloud/openstack/zipball/f2ee77024843659d970817a9e7055bb40a3724f9", + "reference": "f2ee77024843659d970817a9e7055bb40a3724f9", + "shasum": "" + }, + "require": { + "php-opencloud/common": "dev-master" + }, + "require-dev": { + "fabpot/php-cs-fixer": "~1.0", + "jakub-onderka/php-parallel-lint": "0.*", + "phpunit/phpunit": "~4.0", + "psr/log": "~1.0", + "sami/sami": "dev-master", + "satooshi/php-coveralls": "~1.0" + }, + "time": "2016-03-08 14:37:14", + "type": "library", + "installation-source": "source", + "autoload": { + "psr-4": { + "OpenStack\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "authors": [ + { + "name": "Jamie Hannaford", + "email": "jamie.hannaford@rackspace.com", + "homepage": "https://github.com/jamiehannaford" + } + ] } ] diff --git a/server/vendor/guzzlehttp/promises/CHANGELOG.md b/server/vendor/guzzlehttp/promises/CHANGELOG.md index 4031cb8..3871ac7 100644 --- a/server/vendor/guzzlehttp/promises/CHANGELOG.md +++ b/server/vendor/guzzlehttp/promises/CHANGELOG.md @@ -1,5 +1,11 @@ # CHANGELOG +## 1.1.0 - 2016-03-07 + +* Update EachPromise to prevent recurring on a iterator when advancing, as this + could trigger fatal generator errors. +* Update Promise to allow recursive waiting without unwrapping exceptions. + ## 1.0.3 - 2015-10-15 * Update EachPromise to immediately resolve when the underlying promise iterator diff --git a/server/vendor/guzzlehttp/promises/src/EachPromise.php b/server/vendor/guzzlehttp/promises/src/EachPromise.php index 5918429..0344686 100644 --- a/server/vendor/guzzlehttp/promises/src/EachPromise.php +++ b/server/vendor/guzzlehttp/promises/src/EachPromise.php @@ -24,6 +24,9 @@ class EachPromise implements PromisorInterface /** @var Promise */ private $aggregate; + /** @var bool */ + private $mutex; + /** * Configuration hash can include the following key value pairs: * @@ -81,6 +84,7 @@ class EachPromise implements PromisorInterface private function createPromise() { + $this->mutex = false; $this->aggregate = new Promise(function () { reset($this->pending); if (empty($this->pending) && !$this->iterable->valid()) { @@ -169,11 +173,21 @@ class EachPromise implements PromisorInterface private function advanceIterator() { + // Place a lock on the iterator so that we ensure to not recurse, + // preventing fatal generator errors. + if ($this->mutex) { + return false; + } + + $this->mutex = true; + try { $this->iterable->next(); + $this->mutex = false; return true; } catch (\Exception $e) { $this->aggregate->reject($e); + $this->mutex = false; return false; } } @@ -186,9 +200,11 @@ class EachPromise implements PromisorInterface } unset($this->pending[$idx]); - $this->advanceIterator(); - if (!$this->checkIfFinished()) { + // Only refill pending promises if we are not locked, preventing the + // EachPromise to recursively invoke the provided iterator, which + // cause a fatal error: "Cannot resume an already running generator" + if ($this->advanceIterator() && !$this->checkIfFinished()) { // Add more pending promises if possible. $this->refillPending(); } diff --git a/server/vendor/guzzlehttp/promises/src/Promise.php b/server/vendor/guzzlehttp/promises/src/Promise.php index c2cf969..86820b2 100644 --- a/server/vendor/guzzlehttp/promises/src/Promise.php +++ b/server/vendor/guzzlehttp/promises/src/Promise.php @@ -61,17 +61,19 @@ class Promise implements PromiseInterface { $this->waitIfPending(); - if (!$unwrap) { - return null; - } + $inner = $this->result instanceof PromiseInterface + ? $this->result->wait($unwrap) + : $this->result; - if ($this->result instanceof PromiseInterface) { - return $this->result->wait($unwrap); - } elseif ($this->state === self::FULFILLED) { - return $this->result; - } else { - // It's rejected so "unwrap" and throw an exception. - throw exception_for($this->result); + if ($unwrap) { + if ($this->result instanceof PromiseInterface + || $this->state === self::FULFILLED + ) { + return $inner; + } else { + // It's rejected so "unwrap" and throw an exception. + throw exception_for($inner); + } } } @@ -257,11 +259,10 @@ class Promise implements PromiseInterface $this->waitList = null; foreach ($waitList as $result) { - descend: $result->waitIfPending(); - if ($result->result instanceof Promise) { + while ($result->result instanceof Promise) { $result = $result->result; - goto descend; + $result->waitIfPending(); } } } diff --git a/server/vendor/guzzlehttp/promises/src/TaskQueue.php b/server/vendor/guzzlehttp/promises/src/TaskQueue.php index 5026363..39fe5bb 100644 --- a/server/vendor/guzzlehttp/promises/src/TaskQueue.php +++ b/server/vendor/guzzlehttp/promises/src/TaskQueue.php @@ -56,6 +56,7 @@ class TaskQueue */ public function run() { + /** @var callable $task */ while ($task = array_shift($this->queue)) { $task(); } diff --git a/server/vendor/guzzlehttp/promises/src/functions.php b/server/vendor/guzzlehttp/promises/src/functions.php index 89c6569..2fe61b7 100644 --- a/server/vendor/guzzlehttp/promises/src/functions.php +++ b/server/vendor/guzzlehttp/promises/src/functions.php @@ -146,9 +146,9 @@ function inspect(PromiseInterface $promise) 'value' => $promise->wait() ]; } catch (RejectionException $e) { - return ['state' => 'rejected', 'reason' => $e->getReason()]; + return ['state' => PromiseInterface::REJECTED, 'reason' => $e->getReason()]; } catch (\Exception $e) { - return ['state' => 'rejected', 'reason' => $e]; + return ['state' => PromiseInterface::REJECTED, 'reason' => $e]; } } @@ -304,10 +304,10 @@ function settle($promises) return each( $promises, function ($value, $idx) use (&$results) { - $results[$idx] = ['state' => 'fulfilled', 'value' => $value]; + $results[$idx] = ['state' => PromiseInterface::FULFILLED, 'value' => $value]; }, function ($reason, $idx) use (&$results) { - $results[$idx] = ['state' => 'rejected', 'reason' => $reason]; + $results[$idx] = ['state' => PromiseInterface::REJECTED, 'reason' => $reason]; } )->then(function () use (&$results) { ksort($results); diff --git a/server/vendor/guzzlehttp/promises/tests/EachPromiseTest.php b/server/vendor/guzzlehttp/promises/tests/EachPromiseTest.php index 0a0a851..08af2a0 100644 --- a/server/vendor/guzzlehttp/promises/tests/EachPromiseTest.php +++ b/server/vendor/guzzlehttp/promises/tests/EachPromiseTest.php @@ -39,8 +39,8 @@ class EachPromiseTest extends \PHPUnit_Framework_TestCase public function testIsWaitable() { - $a = new Promise(function () use (&$a) { $a->resolve('a'); }); - $b = new Promise(function () use (&$b) { $b->resolve('b'); }); + $a = $this->createSelfResolvingPromise('a'); + $b = $this->createSelfResolvingPromise('b'); $called = []; $each = new EachPromise([$a, $b], [ 'fulfilled' => function ($value) use (&$called) { $called[] = $value; } @@ -54,7 +54,7 @@ class EachPromiseTest extends \PHPUnit_Framework_TestCase public function testCanResolveBeforeConsumingAll() { $called = 0; - $a = new Promise(function () use (&$a) { $a->resolve('a'); }); + $a = $this->createSelfResolvingPromise('a'); $b = new Promise(function () { $this->fail(); }); $each = new EachPromise([$a, $b], [ 'fulfilled' => function ($value, $idx, Promise $aggregate) use (&$called) { @@ -291,4 +291,46 @@ class EachPromiseTest extends \PHPUnit_Framework_TestCase } $this->assertEquals(range(0, 9), $results); } + + private function createSelfResolvingPromise($value) + { + $p = new Promise(function () use (&$p, $value) { + $p->resolve($value); + }); + + return $p; + } + + public function testMutexPreventsGeneratorRecursion() + { + $results = $promises = []; + for ($i = 0; $i < 20; $i++) { + $p = $this->createSelfResolvingPromise($i); + $pending[] = $p; + $promises[] = $p; + } + + $iter = function () use (&$promises, &$pending) { + foreach ($promises as $promise) { + // Resolve a promises, which will trigger the then() function, + // which would cause the EachPromise to try to add more + // promises to the queue. Without a lock, this would trigger + // a "Cannot resume an already running generator" fatal error. + if ($p = array_pop($pending)) { + $p->wait(); + } + yield $promise; + } + }; + + $each = new EachPromise($iter(), [ + 'concurrency' => 5, + 'fulfilled' => function ($r) use (&$results, &$pending) { + $results[] = $r; + } + ]); + + $each->promise()->wait(); + $this->assertCount(20, $results); + } } diff --git a/server/vendor/guzzlehttp/promises/tests/PromiseTest.php b/server/vendor/guzzlehttp/promises/tests/PromiseTest.php index 946c627..599d8ae 100644 --- a/server/vendor/guzzlehttp/promises/tests/PromiseTest.php +++ b/server/vendor/guzzlehttp/promises/tests/PromiseTest.php @@ -172,6 +172,18 @@ class PromiseTest extends \PHPUnit_Framework_TestCase $this->assertEquals('Whoop', $p->wait()); } + public function testWaitsOnAPromiseChainEvenWhenNotUnwrapped() + { + $p2 = new Promise(function () use (&$p2) { + $p2->reject('Fail'); + }); + $p = new Promise(function () use ($p2, &$p) { + $p->resolve($p2); + }); + $p->wait(false); + $this->assertSame(Promise::REJECTED, $p2->getState()); + } + public function testCannotCancelNonPending() { $p = new Promise(); diff --git a/server/vendor/guzzlehttp/psr7/CHANGELOG.md b/server/vendor/guzzlehttp/psr7/CHANGELOG.md index d875aa3..0e278bd 100644 --- a/server/vendor/guzzlehttp/psr7/CHANGELOG.md +++ b/server/vendor/guzzlehttp/psr7/CHANGELOG.md @@ -1,5 +1,11 @@ # CHANGELOG +## 1.2.3 - 2016-02-18 + +* Fixed support in `GuzzleHttp\Psr7\CachingStream` for seeking forward on remote + streams, which can sometimes return fewer bytes than requested with `fread`. +* Fixed handling of gzipped responses with FNAME headers. + ## 1.2.2 - 2016-01-22 * Added support for URIs without any authority. diff --git a/server/vendor/guzzlehttp/psr7/README.md b/server/vendor/guzzlehttp/psr7/README.md index 0a4c341..c15ddd3 100644 --- a/server/vendor/guzzlehttp/psr7/README.md +++ b/server/vendor/guzzlehttp/psr7/README.md @@ -38,7 +38,7 @@ echo $composed(); // abc, 123. Above all listen to me. `GuzzleHttp\Psr7\BufferStream` -Provides a buffer stream that can be written to to fill a buffer, and read +Provides a buffer stream that can be written to fill a buffer, and read from to remove bytes from the buffer. This stream returns a "hwm" metadata value that tells upstream consumers @@ -106,7 +106,7 @@ echo $stream; // 0123456789 Compose stream implementations based on a hash of functions. -Allows for easy testing and extension of a provided stream without needing to +Allows for easy testing and extension of a provided stream without needing to create a concrete class for a simple extension point. ```php diff --git a/server/vendor/guzzlehttp/psr7/src/CachingStream.php b/server/vendor/guzzlehttp/psr7/src/CachingStream.php index 420d5b0..ed68f08 100644 --- a/server/vendor/guzzlehttp/psr7/src/CachingStream.php +++ b/server/vendor/guzzlehttp/psr7/src/CachingStream.php @@ -60,9 +60,12 @@ class CachingStream implements StreamInterface $diff = $byte - $this->stream->getSize(); if ($diff > 0) { - // If the seek byte is greater the number of read bytes, then read - // the difference of bytes to cache the bytes and inherently seek. - $this->read($diff); + // Read the remoteStream until we have read in at least the amount + // of bytes requested, or we reach the end of the file. + while ($diff > 0 && !$this->remoteStream->eof()) { + $this->read($diff); + $diff = $byte - $this->stream->getSize(); + } } else { // We can just do a normal seek since we've already seen this byte. $this->stream->seek($byte); diff --git a/server/vendor/guzzlehttp/psr7/src/InflateStream.php b/server/vendor/guzzlehttp/psr7/src/InflateStream.php index 2c8628b..0051d3f 100644 --- a/server/vendor/guzzlehttp/psr7/src/InflateStream.php +++ b/server/vendor/guzzlehttp/psr7/src/InflateStream.php @@ -20,10 +20,33 @@ class InflateStream implements StreamInterface public function __construct(StreamInterface $stream) { - // Skip the first 10 bytes - $stream = new LimitStream($stream, -1, 10); + // read the first 10 bytes, ie. gzip header + $header = $stream->read(10); + $filenameHeaderLength = $this->getLengthOfPossibleFilenameHeader($stream, $header); + // Skip the header, that is 10 + length of filename + 1 (nil) bytes + $stream = new LimitStream($stream, -1, 10 + $filenameHeaderLength); $resource = StreamWrapper::getResource($stream); stream_filter_append($resource, 'zlib.inflate', STREAM_FILTER_READ); $this->stream = new Stream($resource); } + + /** + * @param StreamInterface $stream + * @param $header + * @return int + */ + private function getLengthOfPossibleFilenameHeader(StreamInterface $stream, $header) + { + $filename_header_length = 0; + + if (substr(bin2hex($header), 6, 2) === '08') { + // we have a filename, read until nil + $filename_header_length = 1; + while ($stream->read(1) !== chr(0)) { + $filename_header_length++; + } + } + + return $filename_header_length; + } } diff --git a/server/vendor/guzzlehttp/psr7/tests/CachingStreamTest.php b/server/vendor/guzzlehttp/psr7/tests/CachingStreamTest.php index 326f754..60a2636 100644 --- a/server/vendor/guzzlehttp/psr7/tests/CachingStreamTest.php +++ b/server/vendor/guzzlehttp/psr7/tests/CachingStreamTest.php @@ -98,6 +98,33 @@ class CachingStreamTest extends \PHPUnit_Framework_TestCase $this->assertEquals('ing', $this->body->read(3)); } + public function testCanSeekToReadBytesWithPartialBodyReturned() + { + $stream = fopen('php://temp', 'r+'); + fwrite($stream, 'testing'); + fseek($stream, 0); + + $this->decorated = $this->getMockBuilder('\GuzzleHttp\Psr7\Stream') + ->setConstructorArgs([$stream]) + ->setMethods(['read']) + ->getMock(); + + $this->decorated->expects($this->exactly(2)) + ->method('read') + ->willReturnCallback(function($length) use ($stream){ + return fread($stream, 2); + }); + + $this->body = new CachingStream($this->decorated); + + $this->assertEquals(0, $this->body->tell()); + $this->body->seek(4, SEEK_SET); + $this->assertEquals(4, $this->body->tell()); + + $this->body->seek(0); + $this->assertEquals('test', $this->body->read(4)); + } + public function testWritesToBufferStream() { $this->body->read(2); diff --git a/server/vendor/guzzlehttp/psr7/tests/InflateStreamTest.php b/server/vendor/guzzlehttp/psr7/tests/InflateStreamTest.php index 927fc0b..0e4b586 100644 --- a/server/vendor/guzzlehttp/psr7/tests/InflateStreamTest.php +++ b/server/vendor/guzzlehttp/psr7/tests/InflateStreamTest.php @@ -13,4 +13,27 @@ class InflateStreamtest extends \PHPUnit_Framework_TestCase $b = new InflateStream($a); $this->assertEquals('test', (string) $b); } + + public function testInflatesStreamsWithFilename() + { + $content = $this->getGzipStringWithFilename('test'); + $a = Psr7\stream_for($content); + $b = new InflateStream($a); + $this->assertEquals('test', (string) $b); + } + + private function getGzipStringWithFilename($original_string) + { + $gzipped = bin2hex(gzencode($original_string)); + + $header = substr($gzipped, 0, 20); + // set FNAME flag + $header[6]=0; + $header[7]=8; + // make a dummy filename + $filename = "64756d6d7900"; + $rest = substr($gzipped, 20); + + return hex2bin($header . $filename . $rest); + } } diff --git a/server/vendor/guzzlehttp/psr7/tests/UriTest.php b/server/vendor/guzzlehttp/psr7/tests/UriTest.php index a63293c..357ee25 100644 --- a/server/vendor/guzzlehttp/psr7/tests/UriTest.php +++ b/server/vendor/guzzlehttp/psr7/tests/UriTest.php @@ -154,7 +154,7 @@ class UriTest extends \PHPUnit_Framework_TestCase [self::RFC3986_BASE, 'g;x=1/../y', 'http://a/b/c/y'], ['http://u@a/b/c/d;p?q', '.', 'http://u@a/b/c/'], ['http://u:p@a/b/c/d;p?q', '.', 'http://u:p@a/b/c/'], - //[self::RFC3986_BASE, 'http:g', 'http:g'], + ['http://a/b/c/d/', 'e', 'http://a/b/c/d/e'], ]; } diff --git a/server/vendor/php-opencloud/openstack b/server/vendor/php-opencloud/openstack index 15aca73..f2ee770 160000 --- a/server/vendor/php-opencloud/openstack +++ b/server/vendor/php-opencloud/openstack @@ -1 +1 @@ -Subproject commit 15aca73f423166c7ef8337ba08615c103c66e931 +Subproject commit f2ee77024843659d970817a9e7055bb40a3724f9