Connection Backoff Interop Test Descriptions

This test is to verify the client is reconnecting the server with correct backoffs as specified in the spec. The test server has a port (control_port) running a rpc service for controlling the server and another port (retry_port) to close any incoming tcp connections. The test has the following flow:

  1. The server starts listening on control_port.
  2. The client calls Start rpc on server control_port.
  3. The server starts listening on retry_port.
  4. The client calls Start rpc on server retry_port with a deadline of 540s.
  5. The client waits until the rpc finishes.
  6. The client calls Stop rpc on server control port.
  7. The client checks the response to see whether the server thinks the backoffs are conforming the spec or do its own check on the backoffs in the response.

Client and server use test.proto. Each language should implement its own client. The C++ server is shared among languages.

Client

Clients should accept these arguments:

  • --server_control_port=PORT
    • The server port to connect to for rpc. For example, "8080"
  • --server_retry_port=PORT
    • The server port to connect to for testing backoffs. For example, "8080"

The client must connect to the control port without TLS. The client should either assert on the server returned backoff status or check the returned backoffs on its own.

Procedure of client:

  1. Calls Start on server control port and checks it succeeded.
  2. Calls Start on server retry port with a deadline of 540s. Waits and checks it got deadline exceeded status.
  3. Calls Stop on server control port and checks it succeeded.
  4. Checks the response to see whether the server thinks the backoffs passed the test.
  5. Optionally, the client can do its own check on the returned backoffs.

Server

A C++ server can be used for the test. Other languages do NOT need to implement a server. To minimize the network delay, the server binary should run on the same machine with the client binary.

A server implements the ReconnectService to its state. It also opens a tcp server on the retry_port, which just shuts down all incoming tcp connections to simulate connection failures. The server will keep a record of all the reconnection timestamps and return the connection backoffs in the response in milliseconds. The server also checks the backoffs to see whether they conform the spec and returns whether the client passes the test.

Servers should accept these arguments:

  • --control_port=PORT
    • The port to listen on for control rpcs. For example, "8080"
  • --retry_port=PORT
    • The tcp server port. For example, "8080"