wtclient: show that a client can switch towers

This commit adds a new watchtower client test to demonstrate that a
client is able to successfully switch to a new tower and continue
backing up updates to that new tower.
This commit is contained in:
Elle Mouton 2023-03-23 09:39:52 +02:00
parent d8af5fcc92
commit feb35e65d8
No known key found for this signature in database
GPG Key ID: D7D916376026F177

View File

@ -2168,6 +2168,51 @@ var clientTests = []clientTest{
h.server.waitForUpdates(hints[0:numUpdates], waitTime)
},
},
{
// Assert that the client is able to switch to a new tower if
// the primary one goes down.
name: "switch to new tower",
cfg: harnessCfg{
localBalance: localBalance,
remoteBalance: remoteBalance,
policy: wtpolicy.Policy{
TxPolicy: defaultTxPolicy,
MaxUpdates: 5,
},
},
fn: func(h *testHarness) {
const (
numUpdates = 5
chanID = 0
)
// Generate numUpdates retributions and back a few of
// them up to the main tower.
hints := h.advanceChannelN(chanID, numUpdates)
h.backupStates(chanID, 0, numUpdates/2, nil)
// Wait for all the backed up updates to be populated in
// the server's database.
h.server.waitForUpdates(hints[:numUpdates/2], waitTime)
// Now we add a new tower.
server2 := newServerHarness(
h.t, h.net, towerAddr2Str, nil,
)
server2.start()
h.addTower(server2.addr)
// Stop the old tower and remove it from the client.
h.server.stop()
h.removeTower(h.server.addr.IdentityKey, nil)
// Back up the remaining states.
h.backupStates(chanID, numUpdates/2, numUpdates, nil)
// Assert that the new tower has the remaining states.
server2.waitForUpdates(hints[numUpdates/2:], waitTime)
},
},
}
// TestClient executes the client test suite, asserting the ability to backup