50
50
import org .springframework .web .socket .sockjs .transport .SockJsSession ;
51
51
52
52
import static org .junit .Assert .*;
53
+ import static org .junit .Assert .assertEquals ;
53
54
import static org .mockito .Mockito .*;
54
55
55
56
/**
@@ -172,13 +173,13 @@ public void eventPublication() {
172
173
this .protocolHandler .afterSessionStarted (this .session , this .channel );
173
174
174
175
StompHeaderAccessor headers = StompHeaderAccessor .create (StompCommand .CONNECT );
175
- TextMessage textMessage = new TextMessage (new StompEncoder (). encode (
176
- MessageBuilder . withPayload (new byte [ 0 ]). setHeaders ( headers ). build () ));
176
+ Message < byte []> message = MessageBuilder . withPayload (new byte [ 0 ]). setHeaders ( headers ). build ();
177
+ TextMessage textMessage = new TextMessage (new StompEncoder (). encode ( message ));
177
178
this .protocolHandler .handleMessageFromClient (this .session , textMessage , this .channel );
178
179
179
180
headers = StompHeaderAccessor .create (StompCommand .CONNECTED );
180
- Message < byte []> connectedMessage = MessageBuilder .withPayload (new byte [0 ]).setHeaders (headers ).build ();
181
- this .protocolHandler .handleMessageToClient (this .session , connectedMessage );
181
+ message = MessageBuilder .withPayload (new byte [0 ]).setHeaders (headers ).build ();
182
+ this .protocolHandler .handleMessageToClient (this .session , message );
182
183
183
184
this .protocolHandler .afterSessionEnded (this .session , CloseStatus .BAD_DATA , this .channel );
184
185
@@ -188,6 +189,49 @@ public void eventPublication() {
188
189
assertEquals (SessionDisconnectEvent .class , publisher .events .get (2 ).getClass ());
189
190
}
190
191
192
+ @ Test
193
+ public void eventPublicationWithExceptions () {
194
+
195
+ ApplicationEventPublisher publisher = new ApplicationEventPublisher () {
196
+
197
+ @ Override
198
+ public void publishEvent (ApplicationEvent event ) {
199
+ throw new IllegalStateException ();
200
+ }
201
+ };
202
+
203
+ UserSessionRegistry registry = new DefaultUserSessionRegistry ();
204
+ this .protocolHandler .setUserSessionRegistry (registry );
205
+ this .protocolHandler .setApplicationEventPublisher (publisher );
206
+ this .protocolHandler .afterSessionStarted (this .session , this .channel );
207
+
208
+ StompHeaderAccessor headers = StompHeaderAccessor .create (StompCommand .CONNECT );
209
+ Message <byte []> message = MessageBuilder .withPayload (new byte [0 ]).setHeaders (headers ).build ();
210
+ TextMessage textMessage = new TextMessage (new StompEncoder ().encode (message ));
211
+ this .protocolHandler .handleMessageFromClient (this .session , textMessage , this .channel );
212
+
213
+ verify (this .channel ).send (this .messageCaptor .capture ());
214
+ Message <?> actual = this .messageCaptor .getValue ();
215
+ assertNotNull (actual );
216
+ assertEquals (StompCommand .CONNECT , StompHeaderAccessor .wrap (actual ).getCommand ());
217
+ reset (this .channel );
218
+
219
+ headers = StompHeaderAccessor .create (StompCommand .CONNECTED );
220
+ message = MessageBuilder .withPayload (new byte [0 ]).setHeaders (headers ).build ();
221
+ this .protocolHandler .handleMessageToClient (this .session , message );
222
+
223
+ assertEquals (1 , this .session .getSentMessages ().size ());
224
+ textMessage = (TextMessage ) this .session .getSentMessages ().get (0 );
225
+ assertEquals ("CONNECTED\n " + "user-name:joe\n " + "\n " + "\u0000 " , textMessage .getPayload ());
226
+
227
+ this .protocolHandler .afterSessionEnded (this .session , CloseStatus .BAD_DATA , this .channel );
228
+
229
+ verify (this .channel ).send (this .messageCaptor .capture ());
230
+ actual = this .messageCaptor .getValue ();
231
+ assertNotNull (actual );
232
+ assertEquals (StompCommand .DISCONNECT , StompHeaderAccessor .wrap (actual ).getCommand ());
233
+ }
234
+
191
235
@ Test
192
236
public void handleMessageToClientUserDestination () {
193
237
0 commit comments