feat(client): add rendezvous traversal coordinators (#12)
quality-gate / quality (push) Successful in 56s

This commit is contained in:
KyuubiYoru
2026-07-16 08:39:05 +02:00
parent 6d076c281a
commit b4b6072fe1
28 changed files with 2949 additions and 57 deletions
@@ -152,12 +152,47 @@ public sealed class JoinAttemptServiceTests
Assert.True(fixture.Service.Cancel(
created.AttemptId,
created.ClientPunchCapability).Succeeded);
Assert.Empty(fixture.Service.BrowseForHost(
Assert.True(fixture.Service.Cancel(
created.AttemptId,
created.ClientPunchCapability).Succeeded);
HostJoinAttempt cancelled = Assert.Single(fixture.Service.BrowseForHost(
registration.ListingId,
ContractLimits.ContractVersion,
registration.LeaseToken,
10,
null).Value!.Items);
Assert.Equal(created.AttemptId, cancelled.AttemptId);
Assert.True(cancelled.IsCancelled);
}
[Fact]
public void CancellationAfterIntroductionRevokesTicketIssuanceAndConsumption()
{
using JoinAttemptFixture fixture = new();
(RegisterSessionResponse registration, _) = fixture.CreateHost();
CreateJoinAttemptResponse created = fixture.Create(registration.ListingId);
IntroductionEndpoints introduction = fixture.Introduce(registration, created);
JoinAttemptServiceResult<ConnectionTicketGrant> issued =
fixture.Service.IssueConnectionTicket(introduction.Attempt);
Assert.True(issued.Succeeded);
Assert.True(fixture.Sessions.Capabilities.TryFingerprint(
issued.Value!.Ticket,
out SecretFingerprint ticketFingerprint));
Assert.True(fixture.Service.Cancel(
created.AttemptId,
created.ClientPunchCapability).Succeeded);
StoredJoinAttempt cancelled = fixture.GetAttempt(registration, created.AttemptId);
Assert.True(cancelled.IsCancelled);
Assert.Equal(
RendezvousErrorCode.Conflict,
fixture.Service.IssueConnectionTicket(cancelled).Error);
Assert.Equal(
StoreResultCode.Conflict,
fixture.Sessions.Store.ConsumeConnectionTicket(new(
created.AttemptId,
ticketFingerprint)).Code);
}
[Fact]