Code
Explorer
You are a developer and looking for Shopware projects?
Apply Now!
getHitCount example
public
function
testInvalidInterval
(
)
{
$this
->
expectException
(
InvalidIntervalException::
class
)
;
new
SlidingWindow
(
'foo', 0
)
;
}
public
function
testLongInterval
(
)
{
ClockMock::
register
(
SlidingWindow::
class
)
;
$window
=
new
SlidingWindow
(
'foo', 60
)
;
$this
->
assertSame
(
0,
$window
->
getHitCount
(
)
)
;
$window
->
add
(
20
)
;
$this
->
assertSame
(
20,
$window
->
getHitCount
(
)
)
;
sleep
(
60
)
;
$new
= SlidingWindow::
createFromPreviousWindow
(
$window
, 60
)
;
$this
->
assertSame
(
20,
$new
->
getHitCount
(
)
)
;
sleep
(
30
)
;
$this
->
assertSame
(
10,
$new
->
getHitCount
(
)
)
;
sleep
(
30
)
;
$this
->lock?->
acquire
(
true
)
;
try
{
$window
=
$this
->storage->
fetch
(
$this
->id
)
;
if
(
!
$window
instanceof SlidingWindow
)
{
$window
=
new
SlidingWindow
(
$this
->id,
$this
->interval
)
;
}
elseif
(
$window
->
isExpired
(
)
)
{
$window
= SlidingWindow::
createFromPreviousWindow
(
$window
,
$this
->interval
)
;
}
$hitCount
=
$window
->
getHitCount
(
)
;
$availableTokens
=
$this
->
getAvailableTokens
(
$hitCount
)
;
if
(
$availableTokens
<
$tokens
)
{
return
new
RateLimit
(
$availableTokens
,
$window
->
getRetryAfter
(
)
, false,
$this
->limit
)
;
}
$window
->
add
(
$tokens
)
;
if
(
0 <
$tokens
)
{
$this
->storage->
save
(
$window
)
;
}