Skip to content

Commit cf314c0

Browse files
author
sanjay-saxena
committed
Merge pull request kaazing#27 from pkhanal/develop
Issue kaazing#12: Close event fired only after all outstanding requests are completed
2 parents ded217e + 16f980c commit cf314c0

4 files changed

Lines changed: 34 additions & 9 deletions

File tree

ws/ws/src/main/java/org/kaazing/gateway/client/impl/wseb/DownstreamHandlerImpl.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,11 @@ private void reconnectIfNecessary(DownstreamChannel channel) {
145145
LOG.entering(CLASS_NAME, "reconnectIfNecessary");
146146

147147
if (channel.closing.get() == true) {
148-
LOG.fine("Closing: "+channel);
149-
listener.downstreamClosed(channel);
148+
if (channel.outstandingRequests.size() == 0) {
149+
LOG.fine("Closing: "+channel);
150+
listener.downstreamClosed(channel);
151+
}
152+
150153
}
151154
else if (channel.reconnecting.compareAndSet(true, false)) {
152155
// reconnect if necessary
@@ -361,13 +364,12 @@ public void requestProgressed(HttpRequest request, WrappedByteBuffer payload) {
361364
public void requestLoaded(HttpRequest request, HttpResponse response) {
362365
LOG.entering(CLASS_NAME, "requestLoaded", request);
363366
DownstreamChannel channel = (DownstreamChannel) request.parent;
367+
channel.outstandingRequests.remove(request);
364368
reconnectIfNecessary(channel);
365369
}
366370

367371
@Override
368372
public void requestClosed(HttpRequest request) {
369-
DownstreamChannel channel = (DownstreamChannel) request.parent;
370-
channel.outstandingRequests.remove(request);
371373
}
372374

373375
@Override

ws/ws/src/test/java/org/kaazing/gateway/client/impl/ws/WebSocketIT.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,15 @@
2323

2424
import static java.util.concurrent.TimeUnit.SECONDS;
2525
import static org.junit.Assert.assertEquals;
26+
import static org.junit.Assert.assertSame;
2627
import static org.junit.Assert.assertTrue;
2728
import static org.junit.rules.RuleChain.outerRule;
2829

2930
import java.io.IOException;
3031
import java.net.URI;
3132

3233
import org.junit.After;
34+
import org.junit.Assert;
3335
import org.junit.Before;
3436
import org.junit.Rule;
3537
import org.junit.Test;
@@ -42,6 +44,7 @@
4244
import org.kaazing.net.ws.WebSocketException;
4345
import org.kaazing.net.ws.WebSocketFactory;
4446
import org.kaazing.net.ws.WebSocketMessageReader;
47+
import org.kaazing.net.ws.WebSocketMessageType;
4548
import org.kaazing.net.ws.WebSocketMessageWriter;
4649

4750

@@ -202,12 +205,14 @@ public void clientShouldReceiveDataOverLongpollingRequest() throws Exception {
202205
WebSocketMessageReader reader = webSocket.getMessageReader();
203206

204207
//read Hello
205-
reader.next();
208+
WebSocketMessageType messageType = reader.next();
209+
assertSame(WebSocketMessageType.TEXT, messageType);
206210
String message = (String) reader.getText();
207211
assertEquals("Hello, WebSocket!", message);
208212

209-
webSocket.close();
210-
213+
// connection closed by server
214+
messageType = reader.next();
215+
assertSame(WebSocketMessageType.EOS, messageType);
211216
k3po.finish();
212217
}
213218

ws/ws/src/test/scripts/org/kaazing/gateway/client/impl/ws/echo.payload.over.wse.rpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ connected
2626
read method "GET"
2727
read version "HTTP/1.1"
2828
read header "X-WebSocket-Version" "wseb-1.0"
29-
read header "X-Sequence-No" /(?<sequence>\b[0-9]{1,3}\b)/
29+
read header "X-Sequence-No" /(?<sequence>[0-9]{1,3})/
3030
read header "X-Accept-Commands" "ping"
3131
read closed
3232

ws/ws/src/test/scripts/org/kaazing/gateway/client/impl/ws/receive.data.over.longpolling.request.rpt

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ connected
2727
read method "GET"
2828
read version "HTTP/1.1"
2929
read header "X-WebSocket-Version" "wseb-1.0"
30-
read header "X-Sequence-No" /(?<sequence>\b[0-9]{1,3}\b)/
30+
read header "X-Sequence-No" /(?<sequence>[0-9]{1,3})/
3131
read header "X-Accept-Commands" "ping"
3232
read closed
3333

@@ -85,3 +85,21 @@ write "Hello, WebSocket!"
8585
write [0x01 0x30 0x32 0xFF]
8686
write [0x01 0x30 0x31 0xFF]
8787
write close
88+
89+
# Upstream
90+
accept http://localhost:8001/echo/;e/ubm/NMLBn6kH9nyesgt34tOvDai9EmdrGYSI
91+
accepted
92+
connected
93+
94+
read method "POST"
95+
read version "HTTP/1.1"
96+
read header "X-Sequence-No" ${wse:asString(sequence + 1)}
97+
98+
read [0x01 0x30 0x32 0xFF]
99+
read [0x01 0x30 0x31 0xFF]
100+
read closed
101+
102+
write status "200" "OK"
103+
write version "HTTP/1.1"
104+
write header content-length
105+
write close

0 commit comments

Comments
 (0)