Repository navigation
Expand file tree
/
Copy pathRuntimeJournalReopenTests.cs
More file actions
38 lines (35 loc) · 2.01 KB
/
Copy pathRuntimeJournalReopenTests.cs
File metadata and controls
38 lines (35 loc) · 2.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
namespace KeyLoad.UnitTests.Features.ClusterRouting;
internal sealed class RuntimeJournalReopenTests
{
private const string JournalName = "reopen-journal";
private const string Instance = "55667788-99aa-bbcc-ddee-ff0011223344";
[Test]
public async Task CommittedNativeHeaderAndOpaqueChunksSurviveStoreReopen()
{
using var fixture = new RuntimeJournalReopenFixture();
await Assert.That(fixture.MinimumReaderContract).IsEqualTo(KeyLoad.Storage.StoreReaderContract.RuntimeJournal);
var create = new RuntimeJournalMutation(RuntimeJournalAction.Create, JournalName, Guid.Parse(Instance), 0, 0,
null, ReadOnlyMemory<byte>.Empty, new(StringComparer.Ordinal), []);
var header = fixture.Submit(create).Snapshot!;
var expected = Enumerable.Range(0, 90_000).Select(index => (byte)(index % byte.MaxValue)).ToArray();
header = fixture.Submit(RuntimeJournalFixture.Mutation(RuntimeJournalAction.Append, header, expected)).Snapshot!;
fixture.Reopen();
await Assert.That(fixture.MinimumReaderContract).IsEqualTo(KeyLoad.Storage.StoreReaderContract.RuntimeJournal);
var recovered = fixture.Database.GetRuntimeJournalHeader(RuntimeJournalFixture.JournalPrincipal, JournalName)!;
var actual = new List<byte>();
var offset = 0L;
var complete = false;
while (!complete)
{
var page = fixture.Database.ReadRuntimeJournal(RuntimeJournalFixture.JournalPrincipal,
new(JournalName, recovered.InstanceId, recovered.OwnerGeneration, recovered.ContentRevision, offset));
actual.AddRange(page.Data.ToArray());
offset += page.Data.Length;
complete = page.IsCompleted;
}
await Assert.That(actual).IsEquivalentTo(expected);
await Assert.That(recovered.ContentRevision).IsEqualTo(1L);
var deleted = fixture.Submit(RuntimeJournalFixture.Mutation(RuntimeJournalAction.Delete, recovered));
await Assert.That(deleted.Applied).IsTrue();
}
}