@@ -150,5 +150,82 @@ public CompletableFuture<Object> request(String method, Object parameter) {
150150 logMessages .unregister ();
151151 }
152152 }
153-
153+
154+ @ Test public void testExceptionHandlerMisbehaving01 () {
155+ LogMessageAccumulator logMessages = new LogMessageAccumulator ();
156+ try {
157+ // Don't show the exception in the test execution log
158+ logMessages .registerTo (RemoteEndpoint .class );
159+
160+ TestEndpoint endp = new TestEndpoint () {
161+ @ Override
162+ public CompletableFuture <Object > request (String method , Object parameter ) {
163+ throw new RuntimeException ("BAAZ" );
164+ }
165+ };
166+ TestMessageConsumer consumer = new TestMessageConsumer ();
167+ // Misbehaving exception handler that returns null
168+ RemoteEndpoint endpoint = new RemoteEndpoint (consumer , endp , (e ) -> null );
169+
170+ endpoint .consume (new RequestMessage () {{
171+ setId ("1" );
172+ setMethod ("foo" );
173+ setParams ("myparam" );
174+ }});
175+
176+ assertEquals ("Check some response received" , 1 , consumer .messages .size ());
177+ ResponseMessage response = (ResponseMessage ) consumer .messages .get (0 );
178+ assertEquals (ResponseErrorCode .InternalError .getValue (), response .getError ().getCode ());
179+ } finally {
180+ logMessages .unregister ();
181+ }
182+ }
183+
184+ static class TestMessageConsumer2 implements MessageConsumer {
185+
186+ boolean sentException = false ;
187+ List <Message > messages = new ArrayList <>();
188+
189+ @ Override
190+ public void consume (Message message ) {
191+ if (sentException ) {
192+ messages .add (message );
193+ } else {
194+ // throw an exception only for the first message
195+ sentException = true ;
196+ throw new RuntimeException ("Exception in consumer" );
197+ }
198+ }
199+
200+ }
201+ @ Test public void testExceptionHandlerMisbehaving02 () {
202+ LogMessageAccumulator logMessages = new LogMessageAccumulator ();
203+ try {
204+ // Don't show the exception in the test execution log
205+ logMessages .registerTo (RemoteEndpoint .class );
206+
207+ TestEndpoint endp = new TestEndpoint () {
208+ @ Override
209+ public CompletableFuture <Object > request (String method , Object parameter ) {
210+ return CompletableFuture .supplyAsync (() -> "baz" );
211+ }
212+ };
213+ TestMessageConsumer2 consumer = new TestMessageConsumer2 ();
214+ // Misbehaving exception handler that returns null
215+ RemoteEndpoint endpoint = new RemoteEndpoint (consumer , endp , (e ) -> null );
216+
217+ endpoint .consume (new RequestMessage () {{
218+ setId ("1" );
219+ setMethod ("foo" );
220+ setParams ("myparam" );
221+ }});
222+
223+ assertEquals ("Check some response received" , 1 , consumer .messages .size ());
224+ ResponseMessage response = (ResponseMessage ) consumer .messages .get (0 );
225+ assertNotNull ("Check response has error" , response .getError ());
226+ assertEquals (ResponseErrorCode .InternalError .getValue (), response .getError ().getCode ());
227+ } finally {
228+ logMessages .unregister ();
229+ }
230+ }
154231}
0 commit comments