public static async Task EmptyLogEntry() { IPersistentState auditTrail = new ConsensusOnlyState(); await auditTrail.AppendAsync(new EmptyLogEntry(10)); Equal(1, auditTrail.GetLastIndex(false)); await auditTrail.CommitAsync(1L); Equal(1, auditTrail.GetLastIndex(true)); Func <IReadOnlyList <IRaftLogEntry>, long?, CancellationToken, ValueTask <Missing> > checker = static (entries, snapshotIndex, token) =>
public static async Task EmptyLogEntry() { IPersistentState auditTrail = new ConsensusOnlyState(); await auditTrail.AppendAsync(new EmptyEntry(10)); Equal(1, auditTrail.GetLastIndex(false)); await auditTrail.CommitAsync(1L); Equal(1, auditTrail.GetLastIndex(true)); Func <IReadOnlyList <IRaftLogEntry>, long?, ValueTask> checker = (entries, snapshotIndex) => { Equal(1, snapshotIndex); Equal(10, entries[0].Term); Equal(0, entries[0].Length); True(entries[0].IsReusable); True(entries[0].IsSnapshot); return(new ValueTask()); }; await auditTrail.ReadAsync <TestReader, DBNull>(checker, 1L); }
public static async Task Appending() { IPersistentState auditTrail = new ConsensusOnlyState(); Equal(0, auditTrail.GetLastIndex(false)); Equal(0, auditTrail.GetLastIndex(true)); var entry1 = new EmptyEntry(41); var entry2 = new EmptyEntry(42); Equal(1, await auditTrail.AppendAsync(new LogEntryList(entry1, entry2))); Equal(0, auditTrail.GetLastIndex(true)); Equal(2, auditTrail.GetLastIndex(false)); Func <IReadOnlyList <IRaftLogEntry>, long?, ValueTask> checker = (entries, snapshotIndex) => { Null(snapshotIndex); Equal(2, entries.Count); Equal(41, entries[0].Term); False(entries[0].IsSnapshot); Equal(42, entries[1].Term); False(entries[1].IsSnapshot); return(default);