fix(store-and-forward): resolve StoreAndForward-006,007,008,009 — transactional parked reads, PipeTo, fault-isolated activity events; 002/011/012 deferred
This commit is contained in:
@@ -250,6 +250,39 @@ public class StoreAndForwardStorageTests : IAsyncLifetime, IDisposable
|
||||
Assert.Equal(2, page2.Count);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetParkedMessagesAsync_TransactionedReads_CountMatchesFullResultSet()
|
||||
{
|
||||
// StoreAndForward-006: the COUNT(*) and paged SELECT now run inside one
|
||||
// transaction so they share a consistent snapshot. This functional check
|
||||
// guards the fix — it verifies the transaction wiring did not break paging:
|
||||
// the reported TotalCount and the rows assembled across all pages agree, and
|
||||
// a page wide enough to hold every parked row contains exactly TotalCount rows.
|
||||
for (int i = 0; i < 25; i++)
|
||||
{
|
||||
var m = CreateMessage($"txn-{i}", StoreAndForwardCategory.ExternalSystem);
|
||||
m.Status = StoreAndForwardMessageStatus.Parked;
|
||||
await _storage.EnqueueAsync(m);
|
||||
await _storage.UpdateMessageAsync(m);
|
||||
}
|
||||
|
||||
var (wholePage, wholeTotal) = await _storage.GetParkedMessagesAsync(pageNumber: 1, pageSize: 1000);
|
||||
Assert.Equal(25, wholeTotal);
|
||||
Assert.Equal(wholeTotal, wholePage.Count);
|
||||
|
||||
var collected = new List<string>();
|
||||
int reportedTotal = -1;
|
||||
for (int page = 1; ; page++)
|
||||
{
|
||||
var (rows, total) = await _storage.GetParkedMessagesAsync(pageNumber: page, pageSize: 7);
|
||||
reportedTotal = total;
|
||||
collected.AddRange(rows.Select(r => r.Id));
|
||||
if (rows.Count < 7) break;
|
||||
}
|
||||
Assert.Equal(reportedTotal, collected.Count);
|
||||
Assert.Equal(25, collected.Distinct().Count());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetMessageCountByStatusAsync_ReturnsAccurateCount()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user