Code
Explorer
You are a developer and looking for Shopware projects?
Apply Now!
Semaphore example
/** * @author Jérémy Derussé <
[email protected]
> * @author Grégoire Pineau <
[email protected]
> */
class
SemaphoreTest
extends
TestCase
{
public
function
testAcquireReturnsTrue
(
)
{
$key
=
new
Key
(
'key', 1
)
;
$store
=
$this
->
createMock
(
PersistingStoreInterface::
class
)
;
$semaphore
=
new
Semaphore
(
$key
,
$store
)
;
$store
->
expects
(
$this
->
once
(
)
)
->
method
(
'save'
)
->
with
(
$key
, 300.0
)
;
$this
->
assertTrue
(
$semaphore
->
acquire
(
)
)
;
$this
->
assertGreaterThanOrEqual
(
299.0,
$key
->
getRemainingLifetime
(
)
)
;
}
public
function
createSemaphore
(
string
$resource
, int
$limit
, int
$weight
= 1, ?float
$ttlInSecond
= 300.0, bool
$autoRelease
= true
)
: SemaphoreInterface
{
return
$this
->
createSemaphoreFromKey
(
new
Key
(
$resource
,
$limit
,
$weight
)
,
$ttlInSecond
,
$autoRelease
)
;
}
/** * @param float|null $ttlInSecond Maximum expected semaphore duration in seconds * @param bool $autoRelease Whether to automatically release the semaphore or not when the semaphore instance is destroyed */
public
function
createSemaphoreFromKey
(
Key
$key
, ?float
$ttlInSecond
= 300.0, bool
$autoRelease
= true
)
: SemaphoreInterface
{
$semaphore
=
new
Semaphore
(
$key
,
$this
->store,
$ttlInSecond
,
$autoRelease
)
;
if
(
$this
->logger
)
{
$semaphore
->
setLogger
(
$this
->logger
)
;
}
return
$semaphore
;
}
}