@@ -201,4 +201,44 @@ public function testInvokeWithExceptionOnProbeEnd(): void
201201 $ adapter = new BlackfireOnMessageAdapter ($ onMessage , $ client , $ config , $ logger );
202202 $ adapter ($ workermanTcpConnection , $ workermanRequest );
203203 }
204+
205+ public function testInvokeEndsProbeWhenRequestHandlingFails (): void
206+ {
207+ $ builder = new MockObjectBuilder ();
208+
209+ /** @var WorkermanTcpConnection $workermanTcpConnection */
210+ $ workermanTcpConnection = $ builder ->create (WorkermanTcpConnection::class, []);
211+
212+ /** @var WorkermanRequest $workermanRequest */
213+ $ workermanRequest = $ builder ->create (WorkermanRequest::class, [
214+ new WithReturn ('header ' , ['x-blackfire-query ' , null ], 'workerman ' ),
215+ ]);
216+
217+ $ exception = new \RuntimeException ('Request handling failed ' );
218+
219+ $ onMessage = new class ($ exception ) implements OnMessageInterface {
220+ public function __construct (private readonly \RuntimeException $ exception ) {}
221+
222+ public function __invoke (WorkermanTcpConnection $ workermanTcpConnection , WorkermanRequest $ workermanRequest ): void
223+ {
224+ throw $ this ->exception ;
225+ }
226+ };
227+
228+ /** @var Probe $probe */
229+ $ probe = $ builder ->create (Probe::class, []);
230+
231+ $ config = new Configuration ();
232+
233+ /** @var Client $client */
234+ $ client = $ builder ->create (Client::class, [
235+ new WithReturn ('createProbe ' , [$ config , true ], $ probe ),
236+ new WithoutReturn ('endProbe ' , [$ probe ]),
237+ ]);
238+
239+ $ adapter = new BlackfireOnMessageAdapter ($ onMessage , $ client , $ config );
240+
241+ $ this ->expectExceptionObject ($ exception );
242+ $ adapter ($ workermanTcpConnection , $ workermanRequest );
243+ }
204244}
0 commit comments