@@ -71,6 +71,67 @@ public function testConsume(?int $timeout, ?int $maxBytes) : void
7171 }
7272 }
7373
74+ /**
75+ * @dataProvider providerConsume
76+ */
77+ public function testConsumeWithIdleCallback (?int $ timeout , ?int $ maxBytes ) : void
78+ {
79+ $ consumerVO = new \Grongor \KafkaRest \Api \Value \Response \Consumer ();
80+
81+ $ firstMessages = [];
82+ $ secondMessages = [new Message (), new Message ()];
83+ $ thirdMessages = [];
84+
85+ $ client = Mockery::mock (RestClient::class);
86+ $ client ->shouldReceive ('getConsumerMessages ' )
87+ ->once ()
88+ ->with ($ consumerVO , $ timeout , $ maxBytes )
89+ ->andReturns ($ firstMessages );
90+ $ client ->shouldReceive ('getConsumerMessages ' )
91+ ->once ()
92+ ->with ($ consumerVO , $ timeout , $ maxBytes )
93+ ->andReturns ($ secondMessages );
94+ $ client ->shouldReceive ('getConsumerMessages ' )
95+ ->once ()
96+ ->with ($ consumerVO , $ timeout , $ maxBytes )
97+ ->andReturns ($ thirdMessages );
98+ $ client ->shouldReceive ('getConsumerMessages ' )
99+ ->once ()
100+ ->andThrow (new Exception ('some exception ' ));
101+
102+ $ client ->shouldReceive ('deleteConsumer ' )
103+ ->once ()
104+ ->with ($ consumerVO );
105+
106+ $ callbackCalledTimes = 0 ;
107+
108+ $ consumer = new Consumer ($ client , $ consumerVO );
109+ $ consumer ->setIdleCallback (static function () use (&$ callbackCalledTimes ) : void {
110+ $ callbackCalledTimes ++;
111+ });
112+ $ messages = $ consumer ->consume ($ timeout , $ maxBytes );
113+
114+ self ::assertInstanceOf (Generator::class, $ messages );
115+
116+ self ::assertTrue ($ messages ->valid ());
117+ self ::assertSame ($ secondMessages [0 ], $ messages ->current ());
118+
119+ $ messages ->next ();
120+ self ::assertTrue ($ messages ->valid ());
121+ self ::assertSame ($ secondMessages [1 ], $ messages ->current ());
122+
123+ self ::assertTrue ($ messages ->valid ());
124+
125+ try {
126+ $ messages ->next ();
127+ self ::fail ('Expected an exception ' );
128+ } catch (ConsumerClosed $ exception ) {
129+ self ::assertFalse ($ messages ->valid ());
130+ }
131+
132+ self ::assertSame (2 , $ callbackCalledTimes );
133+ }
134+
74135 /**
75136 * @return iterable<array<mixed>>
76137 */
0 commit comments