diff --git a/config/member.go b/config/member.go index eccf946..9fbbf76 100644 --- a/config/member.go +++ b/config/member.go @@ -34,6 +34,17 @@ func (c *Config) getMemberMaxId() int { return maxId } +// VotingMembers returns an int of how many members have zero or more votes +func (c *Config) VotingMembers() int { + var votingMembers int + for _, member := range c.Members { + if member.Votes > 0 { + votingMembers++ + } + } + return votingMembers +} + // Add a *Member struct to the Config, if it does not already exist. Takes in a *Member struct to be added. func (c *Config) AddMember(member *Member) { if c.HasMember(member.Host) { diff --git a/config/member_test.go b/config/member_test.go index 47e4680..67f6486 100644 --- a/config/member_test.go +++ b/config/member_test.go @@ -34,6 +34,17 @@ func TestGetMemberMaxIdBeforeAdd(t *testing.T) { assert.Equal(t, 0, testConfig.getMemberMaxId(), "config.getMemberMaxId() returned an incorrect value") } +func TestVotingMembers(t *testing.T) { + config := &Config{Members: []*Member{ + {Votes: 1}, + {Votes: 2}, + {Votes: 3}, + }} + assert.Equal(t, 3, config.VotingMembers(), ".VotingMembers() returned incorrect result") + config = &Config{Members: []*Member{}} + assert.Equal(t, 0, config.VotingMembers(), ".VotingMembers() returned incorrect result") +} + func TestGetMember(t *testing.T) { member := testConfig.GetMember("localhost:27017") assert.NotNil(t, member, "config.GetMember() returned nil")