32
32
import static org .junit .Assert .*;
33
33
34
34
/**
35
- * Unit tests for
36
- * {@link org.springframework.web.socket.handler.ConcurrentWebSocketSessionDecorator}.
37
- *
35
+ * Unit tests for {@link ConcurrentWebSocketSessionDecorator}.
38
36
* @author Rossen Stoyanchev
39
37
*/
40
38
@ SuppressWarnings ("resource" )
41
39
public class ConcurrentWebSocketSessionDecoratorTests {
42
40
43
-
44
41
@ Test
45
42
public void send () throws IOException {
46
43
47
44
TestWebSocketSession session = new TestWebSocketSession ();
48
45
session .setOpen (true );
49
46
50
- ConcurrentWebSocketSessionDecorator concurrentSession =
47
+ ConcurrentWebSocketSessionDecorator decorator =
51
48
new ConcurrentWebSocketSessionDecorator (session , 1000 , 1024 );
52
49
53
50
TextMessage textMessage = new TextMessage ("payload" );
54
- concurrentSession .sendMessage (textMessage );
51
+ decorator .sendMessage (textMessage );
55
52
56
53
assertEquals (1 , session .getSentMessages ().size ());
57
54
assertEquals (textMessage , session .getSentMessages ().get (0 ));
58
55
59
- assertEquals (0 , concurrentSession .getBufferSize ());
60
- assertEquals (0 , concurrentSession .getTimeSinceSendStarted ());
56
+ assertEquals (0 , decorator .getBufferSize ());
57
+ assertEquals (0 , decorator .getTimeSinceSendStarted ());
61
58
assertTrue (session .isOpen ());
62
59
}
63
60
64
61
@ Test
65
62
public void sendAfterBlockedSend () throws IOException , InterruptedException {
66
63
67
- BlockingSession blockingSession = new BlockingSession ();
68
- blockingSession .setOpen (true );
69
- CountDownLatch sentMessageLatch = blockingSession .getSentMessageLatch ();
64
+ BlockingSession session = new BlockingSession ();
65
+ session .setOpen (true );
70
66
71
- final ConcurrentWebSocketSessionDecorator concurrentSession =
72
- new ConcurrentWebSocketSessionDecorator (blockingSession , 10 * 1000 , 1024 );
67
+ final ConcurrentWebSocketSessionDecorator decorator =
68
+ new ConcurrentWebSocketSessionDecorator (session , 10 * 1000 , 1024 );
73
69
74
- Executors .newSingleThreadExecutor ().submit ((Runnable ) () -> {
75
- TextMessage message = new TextMessage ("slow message" );
76
- try {
77
- concurrentSession .sendMessage (message );
78
- }
79
- catch (IOException e ) {
80
- e .printStackTrace ();
81
- }
82
- });
70
+ sendBlockingMessage (decorator );
83
71
84
- assertTrue (sentMessageLatch .await (5 , TimeUnit .SECONDS ));
85
-
86
- // ensure some send time elapses
87
- Thread .sleep (100 );
88
- assertTrue (concurrentSession .getTimeSinceSendStarted () > 0 );
72
+ Thread .sleep (50 );
73
+ assertTrue (decorator .getTimeSinceSendStarted () > 0 );
89
74
90
75
TextMessage payload = new TextMessage ("payload" );
91
76
for (int i = 0 ; i < 5 ; i ++) {
92
- concurrentSession .sendMessage (payload );
77
+ decorator .sendMessage (payload );
93
78
}
94
79
95
- assertTrue (concurrentSession .getTimeSinceSendStarted () > 0 );
96
- assertEquals (5 * payload .getPayloadLength (), concurrentSession .getBufferSize ());
97
- assertTrue (blockingSession .isOpen ());
80
+ assertTrue (decorator .getTimeSinceSendStarted () > 0 );
81
+ assertEquals (5 * payload .getPayloadLength (), decorator .getBufferSize ());
82
+ assertTrue (session .isOpen ());
98
83
}
99
84
100
85
@ Test
101
86
public void sendTimeLimitExceeded () throws IOException , InterruptedException {
102
87
103
- BlockingSession blockingSession = new BlockingSession ();
104
- blockingSession .setId ("123" );
105
- blockingSession .setOpen (true );
106
- CountDownLatch sentMessageLatch = blockingSession .getSentMessageLatch ();
107
-
108
- int sendTimeLimit = 100 ;
109
- int bufferSizeLimit = 1024 ;
88
+ BlockingSession session = new BlockingSession ();
89
+ session .setId ("123" );
90
+ session .setOpen (true );
110
91
111
- final ConcurrentWebSocketSessionDecorator concurrentSession =
112
- new ConcurrentWebSocketSessionDecorator (blockingSession , sendTimeLimit , bufferSizeLimit );
92
+ final ConcurrentWebSocketSessionDecorator decorator =
93
+ new ConcurrentWebSocketSessionDecorator (session , 100 , 1024 );
113
94
114
- Executors .newSingleThreadExecutor ().submit ((Runnable ) () -> {
115
- TextMessage message = new TextMessage ("slow message" );
116
- try {
117
- concurrentSession .sendMessage (message );
118
- }
119
- catch (IOException e ) {
120
- e .printStackTrace ();
121
- }
122
- });
95
+ sendBlockingMessage (decorator );
123
96
124
- assertTrue (sentMessageLatch .await (5 , TimeUnit .SECONDS ));
125
-
126
- // ensure some send time elapses
127
- Thread .sleep (sendTimeLimit + 100 );
97
+ // Exceed send time..
98
+ Thread .sleep (200 );
128
99
129
100
try {
130
101
TextMessage payload = new TextMessage ("payload" );
131
- concurrentSession .sendMessage (payload );
102
+ decorator .sendMessage (payload );
132
103
fail ("Expected exception" );
133
104
}
134
105
catch (SessionLimitExceededException ex ) {
@@ -142,42 +113,28 @@ public void sendTimeLimitExceeded() throws IOException, InterruptedException {
142
113
@ Test
143
114
public void sendBufferSizeExceeded () throws IOException , InterruptedException {
144
115
145
- BlockingSession blockingSession = new BlockingSession ();
146
- blockingSession .setId ("123" );
147
- blockingSession .setOpen (true );
148
- CountDownLatch sentMessageLatch = blockingSession .getSentMessageLatch ();
149
-
150
- int sendTimeLimit = 10 * 1000 ;
151
- int bufferSizeLimit = 1024 ;
152
-
153
- final ConcurrentWebSocketSessionDecorator concurrentSession =
154
- new ConcurrentWebSocketSessionDecorator (blockingSession , sendTimeLimit , bufferSizeLimit );
116
+ BlockingSession session = new BlockingSession ();
117
+ session .setId ("123" );
118
+ session .setOpen (true );
155
119
156
- Executors .newSingleThreadExecutor ().submit ((Runnable ) () -> {
157
- TextMessage message = new TextMessage ("slow message" );
158
- try {
159
- concurrentSession .sendMessage (message );
160
- }
161
- catch (IOException e ) {
162
- e .printStackTrace ();
163
- }
164
- });
120
+ final ConcurrentWebSocketSessionDecorator decorator =
121
+ new ConcurrentWebSocketSessionDecorator (session , 10 *1000 , 1024 );
165
122
166
- assertTrue ( sentMessageLatch . await ( 5 , TimeUnit . SECONDS ) );
123
+ sendBlockingMessage ( decorator );
167
124
168
125
StringBuilder sb = new StringBuilder ();
169
126
for (int i = 0 ; i < 1023 ; i ++) {
170
127
sb .append ("a" );
171
128
}
172
129
173
130
TextMessage message = new TextMessage (sb .toString ());
174
- concurrentSession .sendMessage (message );
131
+ decorator .sendMessage (message );
175
132
176
- assertEquals (1023 , concurrentSession .getBufferSize ());
177
- assertTrue (blockingSession .isOpen ());
133
+ assertEquals (1023 , decorator .getBufferSize ());
134
+ assertTrue (session .isOpen ());
178
135
179
136
try {
180
- concurrentSession .sendMessage (message );
137
+ decorator .sendMessage (message );
181
138
fail ("Expected exception" );
182
139
}
183
140
catch (SessionLimitExceededException ex ) {
@@ -191,35 +148,35 @@ public void sendBufferSizeExceeded() throws IOException, InterruptedException {
191
148
@ Test
192
149
public void closeStatusNormal () throws Exception {
193
150
194
- BlockingSession delegate = new BlockingSession ();
195
- delegate .setOpen (true );
196
- WebSocketSession decorator = new ConcurrentWebSocketSessionDecorator (delegate , 10 * 1000 , 1024 );
151
+ BlockingSession session = new BlockingSession ();
152
+ session .setOpen (true );
153
+ WebSocketSession decorator = new ConcurrentWebSocketSessionDecorator (session , 10 * 1000 , 1024 );
197
154
198
155
decorator .close (CloseStatus .PROTOCOL_ERROR );
199
- assertEquals (CloseStatus .PROTOCOL_ERROR , delegate .getCloseStatus ());
156
+ assertEquals (CloseStatus .PROTOCOL_ERROR , session .getCloseStatus ());
200
157
201
158
decorator .close (CloseStatus .SERVER_ERROR );
202
- assertEquals ("Should have been ignored" , CloseStatus .PROTOCOL_ERROR , delegate .getCloseStatus ());
159
+ assertEquals ("Should have been ignored" , CloseStatus .PROTOCOL_ERROR , session .getCloseStatus ());
203
160
}
204
161
205
162
@ Test
206
163
public void closeStatusChangesToSessionNotReliable () throws Exception {
207
164
208
- BlockingSession blockingSession = new BlockingSession ();
209
- blockingSession .setId ("123" );
210
- blockingSession .setOpen (true );
211
- CountDownLatch sentMessageLatch = blockingSession .getSentMessageLatch ();
165
+ BlockingSession session = new BlockingSession ();
166
+ session .setId ("123" );
167
+ session .setOpen (true );
168
+ CountDownLatch sentMessageLatch = session .getSentMessageLatch ();
212
169
213
170
int sendTimeLimit = 100 ;
214
171
int bufferSizeLimit = 1024 ;
215
172
216
- final ConcurrentWebSocketSessionDecorator concurrentSession =
217
- new ConcurrentWebSocketSessionDecorator (blockingSession , sendTimeLimit , bufferSizeLimit );
173
+ final ConcurrentWebSocketSessionDecorator decorator =
174
+ new ConcurrentWebSocketSessionDecorator (session , sendTimeLimit , bufferSizeLimit );
218
175
219
176
Executors .newSingleThreadExecutor ().submit ((Runnable ) () -> {
220
177
TextMessage message = new TextMessage ("slow message" );
221
178
try {
222
- concurrentSession .sendMessage (message );
179
+ decorator .sendMessage (message );
223
180
}
224
181
catch (IOException e ) {
225
182
e .printStackTrace ();
@@ -231,10 +188,24 @@ public void closeStatusChangesToSessionNotReliable() throws Exception {
231
188
// ensure some send time elapses
232
189
Thread .sleep (sendTimeLimit + 100 );
233
190
234
- concurrentSession .close (CloseStatus .PROTOCOL_ERROR );
191
+ decorator .close (CloseStatus .PROTOCOL_ERROR );
235
192
236
193
assertEquals ("CloseStatus should have changed to SESSION_NOT_RELIABLE" ,
237
- CloseStatus .SESSION_NOT_RELIABLE , blockingSession .getCloseStatus ());
194
+ CloseStatus .SESSION_NOT_RELIABLE , session .getCloseStatus ());
195
+ }
196
+
197
+ private void sendBlockingMessage (ConcurrentWebSocketSessionDecorator session ) throws InterruptedException {
198
+ Executors .newSingleThreadExecutor ().submit (() -> {
199
+ TextMessage message = new TextMessage ("slow message" );
200
+ try {
201
+ session .sendMessage (message );
202
+ }
203
+ catch (IOException e ) {
204
+ e .printStackTrace ();
205
+ }
206
+ });
207
+ BlockingSession delegate = (BlockingSession ) session .getDelegate ();
208
+ assertTrue (delegate .getSentMessageLatch ().await (5 , TimeUnit .SECONDS ));
238
209
}
239
210
240
211
0 commit comments