Skip to content

Instantly share code, notes, and snippets.

@iocanel
Created February 24, 2016 12:06
Show Gist options
  • Save iocanel/b3a9cb6d62e5aabe5426 to your computer and use it in GitHub Desktop.
Save iocanel/b3a9cb6d62e5aabe5426 to your computer and use it in GitHub Desktop.
A test case which demonstrates that the body is response body is lost if the websocket requests fails (e.g. http 500)
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import com.squareup.okhttp.ResponseBody;
import com.squareup.okhttp.mockwebserver.MockResponse;
import com.squareup.okhttp.mockwebserver.MockWebServer;
import okio.Buffer;
import org.junit.Rule;
import org.junit.Test;
import java.io.IOException;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.TimeUnit;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
public class ResponseBodyLostTest {
@Rule
public final MockWebServer server = new MockWebServer();
@Test
public void test() throws Exception {
server.enqueue(new MockResponse()
.setBody("abc")
.setResponseCode(500)
.setHeader("Upgrade", "websocket")
.setHeader("Connection", "Downgrade")
.setHeader("Sec-WebSocket-Accept", "ujmZX4KXZqjwy6vi1aQFH5p4Ygk="));
final Request request = new Request.Builder()
.url(server.url("/path"))
.header("User-Agent", "Test Case")
.get()
.build();
OkHttpClient client = new OkHttpClient();
WebSocketCall webSocketCall = WebSocketCall.create(client, request);
final BlockingQueue<Response> responses = new LinkedBlockingDeque<>();
webSocketCall.enqueue(new WebSocketListener() {
@Override
public void onOpen(WebSocket webSocket, Response response) {
responses.add(response);
}
@Override
public void onFailure(IOException e, Response response) {
responses.add(response);
}
@Override
public void onMessage(ResponseBody message) throws IOException {
System.exit(0);
}
@Override
public void onPong(Buffer payload) {}
@Override
public void onClose(int code, String reason) {}
});
Response r = responses.poll(5, TimeUnit.SECONDS);
assertNotNull(r);
assertNotNull(r.body());
assertEquals("abc", r.body());
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment