Add a method to export membership info to v2 store from RaftCluster

Signed-off-by: Geeta Gharpure <geetagh@amazon.com>
This commit is contained in:
Geeta Gharpure
2023-06-23 20:42:35 +00:00
parent 0ba8b0fb16
commit e5b7dde17e
5 changed files with 125 additions and 18 deletions

View File

@ -21,6 +21,7 @@ import (
"reflect"
"testing"
"github.com/stretchr/testify/assert"
"go.uber.org/zap/zaptest"
"go.etcd.io/etcd/client/pkg/v3/testutil"
@ -975,3 +976,69 @@ func TestIsReadyToPromoteMember(t *testing.T) {
}
}
}
func TestClusterStore(t *testing.T) {
name := "etcd"
clientURLs := []string{"http://127.0.0.1:4001"}
tests := []struct {
name string
mems []*Member
removed map[types.ID]bool
}{
{
name: "Single member, no removed members",
mems: []*Member{
newTestMember(1, nil, name, clientURLs),
},
removed: map[types.ID]bool{},
},
{
name: "Multiple members, no removed members",
mems: []*Member{
newTestMember(1, nil, name, clientURLs),
newTestMember(2, nil, name, clientURLs),
newTestMember(3, nil, name, clientURLs),
},
removed: map[types.ID]bool{},
},
{
name: "Single member, one removed member",
mems: []*Member{
newTestMember(1, nil, name, clientURLs),
},
removed: map[types.ID]bool{types.ID(2): true},
},
{
name: "Multiple members, some removed members",
mems: []*Member{
newTestMember(1, nil, name, clientURLs),
newTestMember(2, nil, name, clientURLs),
newTestMember(3, nil, name, clientURLs),
},
removed: map[types.ID]bool{
types.ID(4): true,
types.ID(5): true,
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
c := newTestCluster(t, tt.mems)
c.removed = tt.removed
st := v2store.New("/0", "/1")
c.Store(st)
// Verify that the members are properly stored
mst, rst := membersFromStore(c.lg, st)
for _, mem := range tt.mems {
assert.Equal(t, mem, mst[mem.ID])
}
// Verify that removed members are correctly stored
assert.Equal(t, tt.removed, rst)
})
}
}