OXIESEC PANEL
- Current Dir:
/
/
var
/
www
/
firebase
/
vendor
/
google
/
cloud-core
/
tests
/
Unit
Server IP: 139.59.38.164
Upload:
Create Dir:
Name
Size
Modified
Perms
📁
..
-
08/12/2024 10:33:49 AM
rwxr-xr-x
📄
AnonymousCredentialsTest.php
1.71 KB
08/12/2024 10:33:49 AM
rw-r--r--
📄
ApiHelperTraitTest.php
7.08 KB
08/12/2024 10:33:49 AM
rw-r--r--
📄
ArrayTraitTest.php
4.58 KB
08/12/2024 10:33:49 AM
rw-r--r--
📁
Batch
-
08/12/2024 10:36:17 AM
rwxr-xr-x
📄
BlobTest.php
1.28 KB
08/12/2024 10:33:49 AM
rw-r--r--
📄
CallTraitTest.php
1.56 KB
08/12/2024 10:33:49 AM
rw-r--r--
📄
ClientTraitTest.php
11.18 KB
08/12/2024 10:33:49 AM
rw-r--r--
📁
Compute
-
08/12/2024 10:36:37 AM
rwxr-xr-x
📄
ConcurrencyControlTraitTest.php
1.54 KB
08/12/2024 10:33:49 AM
rw-r--r--
📄
DetectProjectIdTraitTest.php
4.82 KB
08/12/2024 10:33:49 AM
rw-r--r--
📄
DurationTest.php
1.53 KB
08/12/2024 10:33:49 AM
rw-r--r--
📄
EmulatorTraitTest.php
2.3 KB
08/12/2024 10:33:49 AM
rw-r--r--
📁
Exception
-
08/12/2024 10:34:56 AM
rwxr-xr-x
📄
ExponentialBackoffTest.php
5.93 KB
08/12/2024 10:33:49 AM
rw-r--r--
📄
Fixtures.php
1.1 KB
08/12/2024 10:33:49 AM
rw-r--r--
📄
GeoPointTest.php
2.9 KB
08/12/2024 10:33:49 AM
rw-r--r--
📄
GrpcRequestWrapperTest.php
10.54 KB
08/12/2024 10:33:50 AM
rw-r--r--
📄
GrpcTraitTest.php
8.16 KB
08/12/2024 10:33:50 AM
rw-r--r--
📁
Iam
-
08/12/2024 10:34:57 AM
rwxr-xr-x
📄
Int64Test.php
1.24 KB
08/12/2024 10:33:50 AM
rw-r--r--
📁
Iterator
-
08/12/2024 10:34:57 AM
rwxr-xr-x
📄
JsonTraitTest.php
1.68 KB
08/12/2024 10:33:50 AM
rw-r--r--
📁
Lock
-
08/12/2024 10:34:57 AM
rwxr-xr-x
📁
Logger
-
08/12/2024 10:34:57 AM
rwxr-xr-x
📁
LongRunning
-
08/12/2024 10:34:58 AM
rwxr-xr-x
📁
Report
-
08/12/2024 10:34:58 AM
rwxr-xr-x
📄
RequestBuilderTest.php
4.74 KB
08/12/2024 10:33:50 AM
rw-r--r--
📄
RequestHandlerTest.php
10.55 KB
08/12/2024 10:33:50 AM
rw-r--r--
📄
RequestWrapperTest.php
32.14 KB
08/12/2024 10:33:50 AM
rw-r--r--
📄
RestTraitTest.php
8.72 KB
08/12/2024 10:33:50 AM
rw-r--r--
📄
RetryDeciderTraitTest.php
3.11 KB
08/12/2024 10:33:50 AM
rw-r--r--
📄
ServiceBuilderTest.php
6.54 KB
08/12/2024 10:33:50 AM
rw-r--r--
📄
ServicesNotFoundTest.php
3.25 KB
08/12/2024 10:33:50 AM
rw-r--r--
📁
Stubs
-
08/12/2024 10:34:58 AM
rwxr-xr-x
📄
SysvTraitTest.php
1.59 KB
08/12/2024 10:33:50 AM
rw-r--r--
📄
TimestampTest.php
7.54 KB
08/12/2024 10:33:50 AM
rw-r--r--
📄
TimestampTraitTest.php
2.27 KB
08/12/2024 10:33:50 AM
rw-r--r--
📁
Upload
-
08/12/2024 10:34:59 AM
rwxr-xr-x
📄
UriTraitTest.php
1.82 KB
08/12/2024 10:33:50 AM
rw-r--r--
📄
ValidateTraitTest.php
2 KB
08/12/2024 10:33:50 AM
rw-r--r--
📄
WhitelistTraitTest.php
1.47 KB
08/12/2024 10:33:50 AM
rw-r--r--
📁
fixtures
-
08/12/2024 10:34:56 AM
rwxr-xr-x
Editing: ExponentialBackoffTest.php
Close
<?php /** * Copyright 2016 Google Inc. * * 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 Google\Cloud\Core\Tests\Unit; use Google\Cloud\Core\ExponentialBackoff; use PHPUnit\Framework\TestCase; use Prophecy\Argument; /** * @group core */ class ExponentialBackoffTest extends TestCase { private $delayFunction; public function setUp(): void { $this->delayFunction = function () { return; }; } /** * @dataProvider retriesProvider */ public function testThrowsExceptionAfterFullAttempts($retries, $exception) { // Expected attempts is the number of retries plus the initial attempt. $expectedAttempts = $retries ? $retries + 1 : 4; $actualAttempts = 0; $hasTriggeredException = false; $backoff = new ExponentialBackoff($retries); $backoff->setDelayFunction($this->delayFunction); try { $backoff->execute(function () use (&$actualAttempts, $exception) { $actualAttempts++; throw $exception; }); } catch (\Exception $ex) { $hasTriggeredException = true; } $this->assertTrue($hasTriggeredException); $this->assertEquals($expectedAttempts, $actualAttempts); } public function retriesProvider() { $rateLimitExceededMessage = '{"error": {"errors": [{"reason": "rateLimitExceeded"}]}}'; $userRateLimitExceededMessage = '{"error": {"errors": [{"reason": "userRateLimitExceeded"}]}}'; return [ [null, new \Exception('', 500)], [2, new \Exception('', 502)], [3, new \Exception('', 503)], [4, new \Exception('', 504)], [5, new \Exception($rateLimitExceededMessage)], [6, new \Exception($userRateLimitExceededMessage)] ]; } public function testThrowsExceptionWhenRetryFunctionReturnsFalse() { $actualAttempts = 0; $hasTriggeredException = false; $retryFunction = function (\Exception $ex) { return false; }; $backoff = new ExponentialBackoff(null, $retryFunction); $backoff->setDelayFunction($this->delayFunction); try { $backoff->execute(function () use (&$actualAttempts) { $actualAttempts++; throw new \Exception(); }); } catch (\Exception $ex) { $hasTriggeredException = true; } $this->assertTrue($hasTriggeredException); $this->assertEquals(1, $actualAttempts); } public function testSuccessWithNoRetries() { $actualAttempts = 0; $backoff = new ExponentialBackoff(); $backoff->setDelayFunction($this->delayFunction); $backoff->execute(function () use (&$actualAttempts) { $actualAttempts++; return; }); $this->assertEquals(1, $actualAttempts); } public function testSetsCalculateDelayFunction() { $backoff = new ExponentialBackoff(); $hasTriggeredException = false; $actualDelayAmount = 0; $expectedDelayAmount = 100; $backoff->setDelayFunction(function ($delay) use (&$actualDelayAmount) { $actualDelayAmount = $delay; }); $backoff->setCalcDelayFunction(function () use ($expectedDelayAmount) { return $expectedDelayAmount; }); try { $backoff->execute(function () { throw new \Exception(); }); } catch (\Exception $ex) { $hasTriggeredException = true; } $this->assertTrue($hasTriggeredException); $this->assertEquals($expectedDelayAmount, $actualDelayAmount); } /** * @dataProvider delayProvider */ public function testCalculatesDelay($attempt, $expectedDelayLowerBound, $expectedDelayUpperBound) { $this->assertThat( ExponentialBackoff::calculateDelay($attempt), $this->logicalAnd( $this->greaterThanOrEqual($expectedDelayLowerBound), $this->lessThanOrEqual($expectedDelayUpperBound) ) ); } public function delayProvider() { return [ [0, 1000000, 2000000], [2, 4000000, 5000000], [5, 32000000, 33000000], [10, 60000000, 60000000] ]; } /** * Tests whether `retryListener()` callback is * properly invoked when exception occurs in the request being made. */ public function testRetryListener() { $this->expectException(\Exception::class); $this->expectExceptionMessage('Intentionally failing request'); $args = ['foo' => 'bar']; $retryListener = function ( $ex, $retryAttempt, $arguments ) { self::assertEquals(0, $retryAttempt); self::assertEquals('bar', $arguments[0]['foo']); }; // Setting $retries to 0 so that retry doesn't happens after first // failure. $backoff = new ExponentialBackoff(0, null, $retryListener); $backoff->execute( function () { throw new \Exception('Intentionally failing request'); }, [$args] ); } }