MAJ Librarys
This commit is contained in:
parent
1d3ed3af6d
commit
03ef74d0cf
17 changed files with 347 additions and 194 deletions
2
server/vendor/composer/autoload_psr4.php
vendored
2
server/vendor/composer/autoload_psr4.php
vendored
|
@ -7,8 +7,6 @@ $baseDir = dirname($vendorDir);
|
||||||
|
|
||||||
return array(
|
return array(
|
||||||
'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'),
|
'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'),
|
'OpenStack\\' => array($vendorDir . '/php-opencloud/openstack/src'),
|
||||||
'OpenCloud\\Test\\' => array($vendorDir . '/php-opencloud/common/tests/unit'),
|
'OpenCloud\\Test\\' => array($vendorDir . '/php-opencloud/common/tests/unit'),
|
||||||
'OpenCloud\\Integration\\' => array($vendorDir . '/php-opencloud/common/tests/integration'),
|
'OpenCloud\\Integration\\' => array($vendorDir . '/php-opencloud/common/tests/integration'),
|
||||||
|
|
317
server/vendor/composer/installed.json
vendored
317
server/vendor/composer/installed.json
vendored
|
@ -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",
|
"name": "psr/http-message",
|
||||||
"version": "1.0",
|
"version": "1.0",
|
||||||
|
@ -167,54 +114,6 @@
|
||||||
"web service"
|
"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",
|
"name": "justinrainbow/json-schema",
|
||||||
"version": "1.6.1",
|
"version": "1.6.1",
|
||||||
|
@ -283,66 +182,6 @@
|
||||||
"schema"
|
"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",
|
"name": "php-opencloud/common",
|
||||||
"version": "dev-master",
|
"version": "dev-master",
|
||||||
|
@ -389,5 +228,161 @@
|
||||||
"homepage": "https://github.com/jamiehannaford"
|
"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"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,5 +1,11 @@
|
||||||
# CHANGELOG
|
# 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
|
## 1.0.3 - 2015-10-15
|
||||||
|
|
||||||
* Update EachPromise to immediately resolve when the underlying promise iterator
|
* Update EachPromise to immediately resolve when the underlying promise iterator
|
||||||
|
|
|
@ -24,6 +24,9 @@ class EachPromise implements PromisorInterface
|
||||||
/** @var Promise */
|
/** @var Promise */
|
||||||
private $aggregate;
|
private $aggregate;
|
||||||
|
|
||||||
|
/** @var bool */
|
||||||
|
private $mutex;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configuration hash can include the following key value pairs:
|
* Configuration hash can include the following key value pairs:
|
||||||
*
|
*
|
||||||
|
@ -81,6 +84,7 @@ class EachPromise implements PromisorInterface
|
||||||
|
|
||||||
private function createPromise()
|
private function createPromise()
|
||||||
{
|
{
|
||||||
|
$this->mutex = false;
|
||||||
$this->aggregate = new Promise(function () {
|
$this->aggregate = new Promise(function () {
|
||||||
reset($this->pending);
|
reset($this->pending);
|
||||||
if (empty($this->pending) && !$this->iterable->valid()) {
|
if (empty($this->pending) && !$this->iterable->valid()) {
|
||||||
|
@ -169,11 +173,21 @@ class EachPromise implements PromisorInterface
|
||||||
|
|
||||||
private function advanceIterator()
|
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 {
|
try {
|
||||||
$this->iterable->next();
|
$this->iterable->next();
|
||||||
|
$this->mutex = false;
|
||||||
return true;
|
return true;
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
$this->aggregate->reject($e);
|
$this->aggregate->reject($e);
|
||||||
|
$this->mutex = false;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -186,9 +200,11 @@ class EachPromise implements PromisorInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
unset($this->pending[$idx]);
|
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.
|
// Add more pending promises if possible.
|
||||||
$this->refillPending();
|
$this->refillPending();
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,17 +61,19 @@ class Promise implements PromiseInterface
|
||||||
{
|
{
|
||||||
$this->waitIfPending();
|
$this->waitIfPending();
|
||||||
|
|
||||||
if (!$unwrap) {
|
$inner = $this->result instanceof PromiseInterface
|
||||||
return null;
|
? $this->result->wait($unwrap)
|
||||||
}
|
: $this->result;
|
||||||
|
|
||||||
if ($this->result instanceof PromiseInterface) {
|
if ($unwrap) {
|
||||||
return $this->result->wait($unwrap);
|
if ($this->result instanceof PromiseInterface
|
||||||
} elseif ($this->state === self::FULFILLED) {
|
|| $this->state === self::FULFILLED
|
||||||
return $this->result;
|
) {
|
||||||
} else {
|
return $inner;
|
||||||
// It's rejected so "unwrap" and throw an exception.
|
} else {
|
||||||
throw exception_for($this->result);
|
// It's rejected so "unwrap" and throw an exception.
|
||||||
|
throw exception_for($inner);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -257,11 +259,10 @@ class Promise implements PromiseInterface
|
||||||
$this->waitList = null;
|
$this->waitList = null;
|
||||||
|
|
||||||
foreach ($waitList as $result) {
|
foreach ($waitList as $result) {
|
||||||
descend:
|
|
||||||
$result->waitIfPending();
|
$result->waitIfPending();
|
||||||
if ($result->result instanceof Promise) {
|
while ($result->result instanceof Promise) {
|
||||||
$result = $result->result;
|
$result = $result->result;
|
||||||
goto descend;
|
$result->waitIfPending();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,6 +56,7 @@ class TaskQueue
|
||||||
*/
|
*/
|
||||||
public function run()
|
public function run()
|
||||||
{
|
{
|
||||||
|
/** @var callable $task */
|
||||||
while ($task = array_shift($this->queue)) {
|
while ($task = array_shift($this->queue)) {
|
||||||
$task();
|
$task();
|
||||||
}
|
}
|
||||||
|
|
|
@ -146,9 +146,9 @@ function inspect(PromiseInterface $promise)
|
||||||
'value' => $promise->wait()
|
'value' => $promise->wait()
|
||||||
];
|
];
|
||||||
} catch (RejectionException $e) {
|
} catch (RejectionException $e) {
|
||||||
return ['state' => 'rejected', 'reason' => $e->getReason()];
|
return ['state' => PromiseInterface::REJECTED, 'reason' => $e->getReason()];
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
return ['state' => 'rejected', 'reason' => $e];
|
return ['state' => PromiseInterface::REJECTED, 'reason' => $e];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -304,10 +304,10 @@ function settle($promises)
|
||||||
return each(
|
return each(
|
||||||
$promises,
|
$promises,
|
||||||
function ($value, $idx) use (&$results) {
|
function ($value, $idx) use (&$results) {
|
||||||
$results[$idx] = ['state' => 'fulfilled', 'value' => $value];
|
$results[$idx] = ['state' => PromiseInterface::FULFILLED, 'value' => $value];
|
||||||
},
|
},
|
||||||
function ($reason, $idx) use (&$results) {
|
function ($reason, $idx) use (&$results) {
|
||||||
$results[$idx] = ['state' => 'rejected', 'reason' => $reason];
|
$results[$idx] = ['state' => PromiseInterface::REJECTED, 'reason' => $reason];
|
||||||
}
|
}
|
||||||
)->then(function () use (&$results) {
|
)->then(function () use (&$results) {
|
||||||
ksort($results);
|
ksort($results);
|
||||||
|
|
|
@ -39,8 +39,8 @@ class EachPromiseTest extends \PHPUnit_Framework_TestCase
|
||||||
|
|
||||||
public function testIsWaitable()
|
public function testIsWaitable()
|
||||||
{
|
{
|
||||||
$a = new Promise(function () use (&$a) { $a->resolve('a'); });
|
$a = $this->createSelfResolvingPromise('a');
|
||||||
$b = new Promise(function () use (&$b) { $b->resolve('b'); });
|
$b = $this->createSelfResolvingPromise('b');
|
||||||
$called = [];
|
$called = [];
|
||||||
$each = new EachPromise([$a, $b], [
|
$each = new EachPromise([$a, $b], [
|
||||||
'fulfilled' => function ($value) use (&$called) { $called[] = $value; }
|
'fulfilled' => function ($value) use (&$called) { $called[] = $value; }
|
||||||
|
@ -54,7 +54,7 @@ class EachPromiseTest extends \PHPUnit_Framework_TestCase
|
||||||
public function testCanResolveBeforeConsumingAll()
|
public function testCanResolveBeforeConsumingAll()
|
||||||
{
|
{
|
||||||
$called = 0;
|
$called = 0;
|
||||||
$a = new Promise(function () use (&$a) { $a->resolve('a'); });
|
$a = $this->createSelfResolvingPromise('a');
|
||||||
$b = new Promise(function () { $this->fail(); });
|
$b = new Promise(function () { $this->fail(); });
|
||||||
$each = new EachPromise([$a, $b], [
|
$each = new EachPromise([$a, $b], [
|
||||||
'fulfilled' => function ($value, $idx, Promise $aggregate) use (&$called) {
|
'fulfilled' => function ($value, $idx, Promise $aggregate) use (&$called) {
|
||||||
|
@ -291,4 +291,46 @@ class EachPromiseTest extends \PHPUnit_Framework_TestCase
|
||||||
}
|
}
|
||||||
$this->assertEquals(range(0, 9), $results);
|
$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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -172,6 +172,18 @@ class PromiseTest extends \PHPUnit_Framework_TestCase
|
||||||
$this->assertEquals('Whoop', $p->wait());
|
$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()
|
public function testCannotCancelNonPending()
|
||||||
{
|
{
|
||||||
$p = new Promise();
|
$p = new Promise();
|
||||||
|
|
6
server/vendor/guzzlehttp/psr7/CHANGELOG.md
vendored
6
server/vendor/guzzlehttp/psr7/CHANGELOG.md
vendored
|
@ -1,5 +1,11 @@
|
||||||
# CHANGELOG
|
# 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
|
## 1.2.2 - 2016-01-22
|
||||||
|
|
||||||
* Added support for URIs without any authority.
|
* Added support for URIs without any authority.
|
||||||
|
|
4
server/vendor/guzzlehttp/psr7/README.md
vendored
4
server/vendor/guzzlehttp/psr7/README.md
vendored
|
@ -38,7 +38,7 @@ echo $composed(); // abc, 123. Above all listen to me.
|
||||||
|
|
||||||
`GuzzleHttp\Psr7\BufferStream`
|
`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.
|
from to remove bytes from the buffer.
|
||||||
|
|
||||||
This stream returns a "hwm" metadata value that tells upstream consumers
|
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.
|
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.
|
to create a concrete class for a simple extension point.
|
||||||
|
|
||||||
```php
|
```php
|
||||||
|
|
|
@ -60,9 +60,12 @@ class CachingStream implements StreamInterface
|
||||||
$diff = $byte - $this->stream->getSize();
|
$diff = $byte - $this->stream->getSize();
|
||||||
|
|
||||||
if ($diff > 0) {
|
if ($diff > 0) {
|
||||||
// If the seek byte is greater the number of read bytes, then read
|
// Read the remoteStream until we have read in at least the amount
|
||||||
// the difference of bytes to cache the bytes and inherently seek.
|
// of bytes requested, or we reach the end of the file.
|
||||||
$this->read($diff);
|
while ($diff > 0 && !$this->remoteStream->eof()) {
|
||||||
|
$this->read($diff);
|
||||||
|
$diff = $byte - $this->stream->getSize();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// We can just do a normal seek since we've already seen this byte.
|
// We can just do a normal seek since we've already seen this byte.
|
||||||
$this->stream->seek($byte);
|
$this->stream->seek($byte);
|
||||||
|
|
|
@ -20,10 +20,33 @@ class InflateStream implements StreamInterface
|
||||||
|
|
||||||
public function __construct(StreamInterface $stream)
|
public function __construct(StreamInterface $stream)
|
||||||
{
|
{
|
||||||
// Skip the first 10 bytes
|
// read the first 10 bytes, ie. gzip header
|
||||||
$stream = new LimitStream($stream, -1, 10);
|
$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);
|
$resource = StreamWrapper::getResource($stream);
|
||||||
stream_filter_append($resource, 'zlib.inflate', STREAM_FILTER_READ);
|
stream_filter_append($resource, 'zlib.inflate', STREAM_FILTER_READ);
|
||||||
$this->stream = new Stream($resource);
|
$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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -98,6 +98,33 @@ class CachingStreamTest extends \PHPUnit_Framework_TestCase
|
||||||
$this->assertEquals('ing', $this->body->read(3));
|
$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()
|
public function testWritesToBufferStream()
|
||||||
{
|
{
|
||||||
$this->body->read(2);
|
$this->body->read(2);
|
||||||
|
|
|
@ -13,4 +13,27 @@ class InflateStreamtest extends \PHPUnit_Framework_TestCase
|
||||||
$b = new InflateStream($a);
|
$b = new InflateStream($a);
|
||||||
$this->assertEquals('test', (string) $b);
|
$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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -154,7 +154,7 @@ class UriTest extends \PHPUnit_Framework_TestCase
|
||||||
[self::RFC3986_BASE, 'g;x=1/../y', 'http://a/b/c/y'],
|
[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@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/'],
|
['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'],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
2
server/vendor/php-opencloud/openstack
vendored
2
server/vendor/php-opencloud/openstack
vendored
|
@ -1 +1 @@
|
||||||
Subproject commit 15aca73f423166c7ef8337ba08615c103c66e931
|
Subproject commit f2ee77024843659d970817a9e7055bb40a3724f9
|
Loading…
Add table
Reference in a new issue