| # Transicator Stress Tests |
| |
| These tests are designed to allow us to load up Transicator, break various |
| components, and see what breaks. |
| |
| The tests will use a database schema designed as follows: |
| |
| ``` |
| create table stress_table ( |
| id integer primary key, |
| group integer not null, |
| sequence integer not null, |
| content varchar, |
| end bool, |
| _change_selector varchar not null |
| ); |
| ``` |
| |
| In order to ensure that the server receives what it expects, in order, the |
| client will be constructed to send groups of messages. |
| |
| ## Test Jobs |
| |
| Each "job" is a goroutine... |
| |
| ### Sender |
| |
| The sender job sends groups of records as described above by inserting, |
| updating, and deleting records in the table described above. All the records |
| in each batch will have the same group id. The client will perform a mix of |
| inserts, deletes, and updates containing random "content" for the specified |
| set of selectors. |
| |
| Periodically, the sender will increment the "group" id and send an "end" |
| record. It will notify the main of this fact for flow control. |
| |
| ### Receiver |
| |
| The receiver will retrieve a snapshot for a particular selector, and then |
| apply all changes that come to the replication scheme to the database. |
| The receiver will also periodically throw away its database, fetch a |
| new snapshot, and fetch a new set of changes. |
| |
| When a receiver sees an "end" record it will notify the main for flow control. |
| |
| ### Verifier |
| |
| Once the senders and receivers have stopped, the verifier will inspect the |
| contents of the Postgres database and also inspect the contents of the |
| SQLite databases to see if they match. |
| |
| ### Main |
| |
| The main will start the sender and receivers. It will also direct the |
| senders to send special messages at the end so that we know that everything |
| has finished. |
| |
| Eventually, the main wil use the Docker SDK to stop the database so that we |
| can see what affect the Transicator database has on the SDK. |