| A scripted login reaches an empty character list |
Sign-on, login and world in one go, on the configured realm |
| A mixed-case email logs in to the account |
Case doesn't matter at any step |
| A created character appears in the next list |
Create, then select refused for want of a world, then the list |
| A character survives a restart |
A second host on the same database lists it |
| Two accounts can't share a name in any case |
The name rule holds across accounts |
| A wrong password never reaches the login server |
Sign-on refuses it |
| An unknown account looks like a wrong password |
The same refusal |
| A game token works once |
A replayed token is denied |
| An expired game token is denied |
Advancing the clock past its life |
| A second login replaces the first |
The first session is kicked and closed |
| A suspended account is denied |
After account suspend ... forever |
| Delete removes a character from the list |
The list no longer holds it |
| A message with no row is dropped and the session continues |
The gate drops it without ending the session |
| A created character is committed once the harness has stopped |
The harness's own drain; the host's shutdown wait is proven by the host's tests |