mockwebserver / okhttp3.mockwebserver / SocketPolicy

SocketPolicy

enum class SocketPolicy

What should be done with the incoming socket.

Be careful when using values like DISCONNECT_AT_END, SHUTDOWN_INPUT_AT_END and SHUTDOWN_OUTPUT_AT_END that close a socket after a response, and where there are follow-up requests. The client is unblocked and free to continue as soon as it has received the entire response body. If and when the client makes a subsequent request using a pooled socket the server may not have had time to close the socket. The socket will be closed at an indeterminate point before or during the second request. It may be closed after client has started sending the request body. If a request body is not retryable then the client may fail the request, making client behavior non-deterministic. Add delays in the client to improve the chances that the server has closed the socket before follow up requests are made.

Enum Values

Name Summary
SHUTDOWN_SERVER_AFTER_RESPONSE Shutdown MockWebServer after writing response.
KEEP_OPEN Keep the socket open after the response. This is the default HTTP/1.1 behavior.
DISCONNECT_AT_END Close the socket after the response. This is the default HTTP/1.0 behavior. For HTTP/2 connections, this sends a GOAWAYframe immediately after the response and will close the connection when the client’s socket is exhausted.
UPGRADE_TO_SSL_AT_END Wrap the socket with SSL at the completion of this request/response pair. Used for CONNECT messages to tunnel SSL over an HTTP proxy.
DISCONNECT_AT_START Request immediate close of connection without even reading the request. Use to simulate buggy SSL servers closing connections in response to unrecognized TLS extensions.
DISCONNECT_AFTER_REQUEST Close connection after reading the request but before writing the response. Use this to simulate late connection pool failures.
DISCONNECT_DURING_REQUEST_BODY Close connection after reading half of the request body (if present).
DISCONNECT_DURING_RESPONSE_BODY Close connection after writing half of the response body (if present).
FAIL_HANDSHAKE Don’t trust the client during the SSL handshake.
SHUTDOWN_INPUT_AT_END Shutdown the socket input after sending the response. For testing bad behavior.
SHUTDOWN_OUTPUT_AT_END Shutdown the socket output after sending the response. For testing bad behavior.
STALL_SOCKET_AT_START After accepting the connection and doing TLS (if configured) don’t do HTTP/1.1 or HTTP/2 framing. Ignore the socket completely until the server is shut down.
NO_RESPONSE Read the request but don’t respond to it. Just keep the socket open. For testing read response header timeout issue.
RESET_STREAM_AT_START Fail HTTP/2 requests without processing them by sending an MockResponse.getHttp2ErrorCode.
EXPECT_CONTINUE Transmit a HTTP/1.1 100 Continue response before reading the HTTP request body. Typically this response is sent when a client makes a request with the header Expect: 100-continue.
CONTINUE_ALWAYS Transmit a HTTP/1.1 100 Continue response before reading the HTTP request body even if the client does not send the header Expect: 100-continue in its request.