C#: tests kill the replay-details and unreliable non-write mutants
Some checks failed
CultMesh QUIC native / Build win32-x64 (pull_request) Has been skipped
CultMesh QUIC native / Build linux-x64 (pull_request) Has been skipped
CultMesh QUIC native / Release native binaries (pull_request) Has been skipped
CultMesh QUIC native / Verify committed binaries match SHA256SUMS (pull_request) Has been cancelled
CultMesh portability and performance / ubuntu-latest reactive semantics and leases (pull_request) Has been cancelled
Some checks failed
CultMesh QUIC native / Build win32-x64 (pull_request) Has been skipped
CultMesh QUIC native / Build linux-x64 (pull_request) Has been skipped
CultMesh QUIC native / Release native binaries (pull_request) Has been skipped
CultMesh QUIC native / Verify committed binaries match SHA256SUMS (pull_request) Has been cancelled
CultMesh portability and performance / ubuntu-latest reactive semantics and leases (pull_request) Has been cancelled
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
0a67b4d8aa
commit
48cf3b3323
2 changed files with 37 additions and 0 deletions
|
|
@ -231,6 +231,9 @@ namespace GameCult.Networking.Tests
|
|||
receipt.SendUnreliable(HelloOf(BothFrames)); // not a write: answered with nothing on the unreliable channel
|
||||
receipt.Send(running.PutOf("r1", KeyA, "one"));
|
||||
Assert.That(receipt.Next<CultNetWriteAdmittedMessage>().MessageId, Is.EqualTo("r1"), "nothing else was sent ahead of the receipt");
|
||||
receipt.Send(running.PutOf("r2", KeyA, "two"));
|
||||
Assert.That(receipt.Next<CultNetWriteAdmittedMessage>().MessageId, Is.EqualTo("r2"));
|
||||
receipt.ExpectNothingMore("the unreliable hello was answered with nothing");
|
||||
|
||||
using var legacy = running.Connect();
|
||||
legacy.Send(HelloOf());
|
||||
|
|
|
|||
|
|
@ -1171,5 +1171,39 @@ namespace GameCult.Networking.Tests
|
|||
GC.KeepAlive(session);
|
||||
Assert.That(growth, Is.LessThan(8L * 1024 * 1024));
|
||||
}
|
||||
|
||||
// A remembered refusal is replayed with the details its code carries: the schema id of an unowned write, no details
|
||||
// at all for the routing refusal.
|
||||
[Test]
|
||||
public void AReplayedRefusalCarriesTheDetailsOfItsCodeAndNoOthers()
|
||||
{
|
||||
var session = new CultNetWriteReceiptSession();
|
||||
var sent = new List<ICultNetSchemaMessage>();
|
||||
CultNetReceiptedWrite Write(string id) => new(session, sent.Add, "put", id, "schema.v1", "note:1", [1]);
|
||||
|
||||
var unowned = Write("u1");
|
||||
Assert.That(unowned.Begin(), Is.True);
|
||||
unowned.Refused(CultNetErrorMessage.ForUnownedSchema(new CultNetUnownedSchemaException("schema.v1", new CultRecordKey("note:1"))));
|
||||
Assert.That(Write("u1").Begin(), Is.False);
|
||||
|
||||
var routed = Write("g1");
|
||||
Assert.That(routed.Begin(), Is.True);
|
||||
routed.Refused(new CultNetErrorMessage
|
||||
{
|
||||
Error = CultNetDatabaseServer.RoutingRefusalText,
|
||||
RoutingHint = new CultNetShardRoutingHint { Reason = "not_primary" }
|
||||
});
|
||||
Assert.That(Write("g1").Begin(), Is.False);
|
||||
|
||||
var unownedAgain = (CultNetErrorV1Message)sent[1];
|
||||
Assert.That(unownedAgain.Code, Is.EqualTo("unowned_schema"));
|
||||
Assert.That(unownedAgain.Details!.Field, Is.EqualTo("schemaId"));
|
||||
Assert.That(unownedAgain.Details.Value, Is.EqualTo("schema.v1"));
|
||||
Assert.That(unownedAgain.Error, Is.EqualTo(((CultNetErrorV1Message)sent[0]).Error));
|
||||
var routedAgain = (CultNetErrorV1Message)sent[3];
|
||||
Assert.That(routedAgain.Details, Is.Null);
|
||||
Assert.That(routedAgain.RoutingHint!.Reason, Is.EqualTo("not_primary"));
|
||||
Assert.That(routedAgain.Error, Is.EqualTo(CultNetDatabaseServer.RoutingRefusalText));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue