Skip to content

Commit

Permalink
test(raft): verify member type updates
Browse files Browse the repository at this point in the history
  • Loading branch information
lenaschoenburg committed Aug 24, 2023
1 parent 4da76b7 commit e8349d8
Showing 1 changed file with 42 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,48 @@ void shouldRemoveContextsOnReconfiguration() {
.allSatisfy(member -> assertThat(context.getMemberContext(member.memberId())).isNull());
}

@Test
void shouldUpdateMemberType() {
// given -- stored configuration that contains all members
final var localMember = new DefaultRaftMember(new MemberId("1"), Type.ACTIVE, Instant.now());
final var oldRemoteMembers =
List.<RaftMember>of(
new DefaultRaftMember(new MemberId("2"), Type.ACTIVE, Instant.now()),
new DefaultRaftMember(new MemberId("3"), Type.ACTIVE, Instant.now()));
final var oldMembers =
Stream.concat(Stream.of(localMember), oldRemoteMembers.stream()).toList();

final var raft =
raftWithStoredConfiguration(
new Configuration(1, 1, Instant.now().toEpochMilli(), oldMembers));
final var context = new RaftClusterContext(localMember.memberId(), raft);

// when -- reconfigure with a new configuration only contains the local member
final var newLocalMember =
new DefaultRaftMember(new MemberId("1"), Type.PASSIVE, Instant.now());
final var newRemoteMembers =
List.<RaftMember>of(
new DefaultRaftMember(new MemberId("2"), Type.PASSIVE, Instant.now()),
new DefaultRaftMember(new MemberId("3"), Type.PASSIVE, Instant.now()));
final var newMembers =
Stream.concat(Stream.of(newLocalMember), newRemoteMembers.stream()).toList();

context.configure(
new Configuration(2, 1, Instant.now().toEpochMilli(), newMembers, oldMembers));

// then -- new configuration is used
assertThat(context.getLocalMember().memberId()).isEqualTo(MemberId.from("1"));
assertThat(context.getLocalMember().getType()).isEqualTo(Type.PASSIVE);
assertThat(context.isSingleMemberCluster()).isFalse();
assertThat(context.inJointConsensus()).isTrue();
assertThat(context.getMembers()).containsExactlyInAnyOrderElementsOf(newMembers);
assertThat(newMembers)
.allMatch(member -> context.isMember(member.memberId()))
.allSatisfy(
member ->
assertThat(context.getMember(member.memberId()).getType()).isEqualTo(Type.PASSIVE));
}

@Test
void shouldCountVoteFromLocalMember() {
// given
Expand Down

0 comments on commit e8349d8

Please sign in to comment.