OLD | NEW |
(Empty) | |
| 1 Connection Backoff Interop Test Descriptions |
| 2 =============================================== |
| 3 |
| 4 This test is to verify the client is reconnecting the server with correct |
| 5 backoffs as specified in |
| 6 [the spec](http://github.com/grpc/grpc/blob/master/doc/connection-backoff.md). |
| 7 The test server has a port (control_port) running a rpc service for controlling |
| 8 the server and another port (retry_port) to close any incoming tcp connections. |
| 9 The test has the following flow: |
| 10 |
| 11 1. The server starts listening on control_port. |
| 12 2. The client calls Start rpc on server control_port. |
| 13 3. The server starts listening on retry_port. |
| 14 4. The client connects to server retry_port and retries with backoff for 540s, |
| 15 which translates to about 13 retries. |
| 16 5. The client calls Stop rpc on server control port. |
| 17 6. The client checks the response to see whether the server thinks the backoffs |
| 18 are conforming the spec or do its own check on the backoffs in the response. |
| 19 |
| 20 Client and server use |
| 21 [test.proto](https://github.com/grpc/grpc/blob/master/src/proto/grpc/testing/tes
t.proto). |
| 22 Each language should implement its own client. The C++ server is shared among |
| 23 languages. |
| 24 |
| 25 Client |
| 26 ------ |
| 27 |
| 28 Clients should accept these arguments: |
| 29 * --server_control_port=PORT |
| 30 * The server port to connect to for rpc. For example, "8080" |
| 31 * --server_retry_port=PORT |
| 32 * The server port to connect to for testing backoffs. For example, "8081" |
| 33 |
| 34 The client must connect to the control port without TLS. The client must connect |
| 35 to the retry port with TLS. The client should either assert on the server |
| 36 returned backoff status or check the returned backoffs on its own. |
| 37 |
| 38 Procedure of client: |
| 39 |
| 40 1. Calls Start on server control port with a large deadline or no deadline, |
| 41 waits for its finish and checks it succeeded. |
| 42 2. Initiates a channel connection to server retry port, which should perform |
| 43 reconnections with proper backoffs. A convienent way to achieve this is to |
| 44 call Start with a deadline of 540s. The rpc should fail with deadline exceeded. |
| 45 3. Calls Stop on server control port and checks it succeeded. |
| 46 4. Checks the response to see whether the server thinks the backoffs passed the |
| 47 test. |
| 48 5. Optionally, the client can do its own check on the returned backoffs. |
| 49 |
| 50 |
| 51 Server |
| 52 ------ |
| 53 |
| 54 A C++ server can be used for the test. Other languages do NOT need to implement |
| 55 a server. To minimize the network delay, the server binary should run on the |
| 56 same machine or on a nearby machine (in terms of network distance) with the |
| 57 client binary. |
| 58 |
| 59 A server implements the ReconnectService to its state. It also opens a |
| 60 tcp server on the retry_port, which just shuts down all incoming tcp |
| 61 connections to simulate connection failures. The server will keep a record of |
| 62 all the reconnection timestamps and return the connection backoffs in the |
| 63 response in milliseconds. The server also checks the backoffs to see whether |
| 64 they conform the spec and returns whether the client passes the test. |
| 65 |
| 66 If the server receives a Start call when another client is being tested, it |
| 67 finishes the call when the other client is done. If some other host connects |
| 68 to the server retry_port when a client is being tested, the server will log an |
| 69 error but likely would think the client fails the test. |
| 70 |
| 71 The server accepts these arguments: |
| 72 |
| 73 * --control_port=PORT |
| 74 * The port to listen on for control rpcs. For example, "8080" |
| 75 * --retry_port=PORT |
| 76 * The tcp server port. For example, "8081" |
| 77 |
OLD | NEW |