6.5840/src/kvraft1/rsm/rsm_test.go
Frans Kaashoek 25a43f7a5e update
2025-02-02 10:50:29 -05:00

64 lines
1.1 KiB
Go

package rsm
import (
//"log"
"testing"
)
// test that each server executes increments and updates its counter.
func TestBasic(t *testing.T) {
ts := makeTest(t, -1)
defer ts.cleanup()
ts.Begin("Test RSM basic")
for i := 0; i < 10; i++ {
r := ts.one()
if r.N != i+1 {
ts.t.Fatalf("expected %d instead of %d", i, r.N)
}
ts.checkCounter(r.N, NSRV)
}
}
// test that each server executes increments after disconnecting and
// reconnecting leader
func TestLeaderFailure(t *testing.T) {
ts := makeTest(t, -1)
defer ts.cleanup()
r := ts.one()
ts.checkCounter(r.N, NSRV)
l := ts.disconnectLeader()
r = ts.one()
ts.checkCounter(r.N, NSRV-1)
ts.connect(l)
ts.checkCounter(r.N, NSRV)
}
// test snapshot and restore
func TestSnapshot(t *testing.T) {
const N = 100
ts := makeTest(t, 1000)
defer ts.cleanup()
for i := 0; i < N; i++ {
ts.one()
}
ts.checkCounter(N, NSRV)
// rsm must have made snapshots by now shutdown all servers and
// restart them from a snapshot
ts.g.Shutdown()
ts.g.StartServers()
// make restarted servers do one increment
ts.one()
ts.checkCounter(N+1, NSRV)
}