Code
Explorer
You are a developer and looking for Shopware projects?
Apply Now!
StopWorkerOnFailureLimitListener example
if
(
null !==
$limit
=
$input
->
getOption
(
'limit'
)
)
{
if
(
!
is_numeric
(
$limit
)
|| 0 >=
$limit
)
{
throw
new
InvalidOptionException
(
sprintf
(
'Option "limit" must be a positive integer, "%s" passed.',
$limit
)
)
;
}
$stopsWhen
[
]
= "processed {
$limit
}
messages";
$this
->eventDispatcher->
addSubscriber
(
new
StopWorkerOnMessageLimitListener
(
$limit
,
$this
->logger
)
)
;
}
if
(
$failureLimit
=
$input
->
getOption
(
'failure-limit'
)
)
{
$stopsWhen
[
]
= "reached {
$failureLimit
}
failed messages";
$this
->eventDispatcher->
addSubscriber
(
new
StopWorkerOnFailureLimitListener
(
$failureLimit
,
$this
->logger
)
)
;
}
if
(
$memoryLimit
=
$input
->
getOption
(
'memory-limit'
)
)
{
$stopsWhen
[
]
= "exceeded {
$memoryLimit
}
of memory";
$this
->eventDispatcher->
addSubscriber
(
new
StopWorkerOnMemoryLimitListener
(
$this
->
convertToBytes
(
$memoryLimit
)
,
$this
->logger
)
)
;
}
if
(
null !==
$timeLimit
=
$input
->
getOption
(
'time-limit'
)
)
{
if
(
!
is_numeric
(
$timeLimit
)
|| 0 >=
$timeLimit
)
{
throw
new
InvalidOptionException
(
sprintf
(
'Option "time-limit" must be a positive integer, "%s" passed.',
$timeLimit
)
)
;
}
/** * @dataProvider countProvider */
public
function
testWorkerStopsWhenMaximumCountReached
(
int
$max
, bool
$shouldStop
)
{
$worker
=
$this
->
createMock
(
Worker::
class
)
;
$worker
->
expects
(
$shouldStop
?
$this
->
atLeastOnce
(
)
:
$this
->
never
(
)
)
->
method
(
'stop'
)
;
$failedEvent
=
$this
->
createFailedEvent
(
)
;
$runningEvent
=
new
WorkerRunningEvent
(
$worker
, false
)
;
$failureLimitListener
=
new
StopWorkerOnFailureLimitListener
(
$max
)
;
// simulate three messages (of which 2 failed)
$failureLimitListener
->
onMessageFailed
(
$failedEvent
)
;
$failureLimitListener
->
onWorkerRunning
(
$runningEvent
)
;
$failureLimitListener
->
onWorkerRunning
(
$runningEvent
)
;
$failureLimitListener
->
onMessageFailed
(
$failedEvent
)
;
$failureLimitListener
->
onWorkerRunning
(
$runningEvent
)
;
}
public
static
function
countProvider
(
)
: iterable
{