Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions logs/log1756012262.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- Updated GossipTransportTests to await topology consensus using ExpectUpdatedTopologyConsensus, removing manual polling via AwaitConditionAsync. This ensures tests wait for deterministic membership updates before sending gossip.
2 changes: 2 additions & 0 deletions logs/log1756013526.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
- Added ExpectMemberToExist helper in Proto.TestKit for clearer cluster membership checks.
- Updated GossipTransportTests to use ExpectMemberToExist instead of manual AwaitConditionAsync calls.
16 changes: 16 additions & 0 deletions src/Proto.TestKit/ClusterTestKitExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,5 +34,21 @@ await TestKit.AwaitConditionAsync(async () =>

return updatedTopologyHash;
}

/// <summary>
/// Waits until the cluster's member list contains the specified <paramref name="member"/>.
/// </summary>
/// <param name="cluster">Cluster to inspect.</param>
/// <param name="member">Member expected to exist in the cluster.</param>
/// <param name="timeout">Maximum time to wait. Defaults to 10 seconds.</param>
/// <returns>A task that completes when the member is present.</returns>
public static Task ExpectMemberToExist(this Proto.Cluster.Cluster cluster, Member member, TimeSpan? timeout = null)
{
var waitTimeout = timeout ?? TimeSpan.FromSeconds(10);
return TestKit.AwaitConditionAsync(
() => cluster.MemberList.ContainsMemberId(member.Id),
waitTimeout,
$"Member {member.Id} was not found within {waitTimeout}");
}
}

14 changes: 9 additions & 5 deletions tests/Proto.Cluster.Tests/GossipTransportTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@
using Proto;
using Proto.Cluster;
using Proto.Cluster.Gossip;
using Proto.TestKit;
using Xunit;
using static Proto.TestKit.TestKit;

namespace Proto.Cluster.Tests;

Expand Down Expand Up @@ -41,7 +41,8 @@ public async Task Success_should_commit_offsets()
await fixture.InitializeAsync();
var cluster = fixture.Members[0];
var targetMember = fixture.Members[1].MemberList.Self;
await AwaitConditionAsync(() => cluster.MemberList.ContainsMemberId(targetMember.Id), TimeSpan.FromSeconds(10));
// Wait for the cluster to register the other member before proceeding
await cluster.ExpectMemberToExist(targetMember);
var committed = false;
var delta = new MemberStateDelta(targetMember.Id, true, new GossipState(), () => committed = true);
var request = new GossipRequest { MemberId = cluster.System.Id, State = delta.State };
Expand Down Expand Up @@ -73,7 +74,8 @@ public async Task Rejection_should_not_commit_offsets()
await fixture.InitializeAsync();
var cluster = fixture.Members[0];
var targetMember = fixture.Members[1].MemberList.Self;
await AwaitConditionAsync(() => cluster.MemberList.ContainsMemberId(targetMember.Id), TimeSpan.FromSeconds(10));
// Wait for the cluster to register the other member before proceeding
await cluster.ExpectMemberToExist(targetMember);
var committed = false;
var delta = new MemberStateDelta(targetMember.Id, true, new GossipState(), () => committed = true);
var request = new GossipRequest { MemberId = cluster.System.Id, State = delta.State };
Expand Down Expand Up @@ -106,7 +108,8 @@ public async Task Timeout_should_not_commit_offsets()
await fixture.InitializeAsync();
var cluster = fixture.Members[0];
var targetMember = fixture.Members[1].MemberList.Self;
await AwaitConditionAsync(() => cluster.MemberList.ContainsMemberId(targetMember.Id), TimeSpan.FromSeconds(10));
// Wait for the cluster to register the other member before proceeding
await cluster.ExpectMemberToExist(targetMember);
var committed = false;
var delta = new MemberStateDelta(targetMember.Id, true, new GossipState(), () => committed = true);
var request = new GossipRequest { MemberId = cluster.System.Id, State = delta.State };
Expand Down Expand Up @@ -138,7 +141,8 @@ public async Task DeadLetter_should_not_commit_offsets()
await fixture.InitializeAsync();
var cluster = fixture.Members[0];
var targetMember = fixture.Members[1].MemberList.Self;
await AwaitConditionAsync(() => cluster.MemberList.ContainsMemberId(targetMember.Id), TimeSpan.FromSeconds(10));
// Wait for the cluster to register the other member before proceeding
await cluster.ExpectMemberToExist(targetMember);
var committed = false;
var delta = new MemberStateDelta(targetMember.Id, true, new GossipState(), () => committed = true);
var request = new GossipRequest { MemberId = cluster.System.Id, State = delta.State };
Expand Down
Loading