From 2f30760b3715e5e87273a0478e1060745ed88569 Mon Sep 17 00:00:00 2001 From: Marek Siarkowicz Date: Wed, 22 Nov 2023 15:07:41 +0100 Subject: [PATCH] Add tests for setting cluster version using v2 request Signed-off-by: Marek Siarkowicz --- server/etcdserver/server_test.go | 34 +++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/server/etcdserver/server_test.go b/server/etcdserver/server_test.go index 62e32c776..0ee94a93b 100644 --- a/server/etcdserver/server_test.go +++ b/server/etcdserver/server_test.go @@ -27,12 +27,14 @@ import ( "testing" "time" + "github.com/coreos/go-semver/semver" "github.com/stretchr/testify/assert" "go.uber.org/zap" "go.uber.org/zap/zaptest" pb "go.etcd.io/etcd/api/v3/etcdserverpb" "go.etcd.io/etcd/api/v3/membershippb" + "go.etcd.io/etcd/api/v3/version" "go.etcd.io/etcd/client/pkg/v3/fileutil" "go.etcd.io/etcd/client/pkg/v3/testutil" "go.etcd.io/etcd/client/pkg/v3/types" @@ -42,6 +44,7 @@ import ( "go.etcd.io/etcd/pkg/v3/wait" "go.etcd.io/etcd/server/v3/auth" "go.etcd.io/etcd/server/v3/config" + "go.etcd.io/etcd/server/v3/etcdserver/api" "go.etcd.io/etcd/server/v3/etcdserver/api/membership" "go.etcd.io/etcd/server/v3/etcdserver/api/rafthttp" "go.etcd.io/etcd/server/v3/etcdserver/api/snap" @@ -376,7 +379,9 @@ func TestApplyRequest(t *testing.T) { } } -func TestApplyRequestOnAdminMemberAttributes(t *testing.T) { +// TestV2SetMemberAttributes validates support of hybrid v3.5 cluster which still uses v2 request. +// TODO: Remove in v3.7 +func TestV2SetMemberAttributes(t *testing.T) { be, _ := betesting.NewDefaultTmpBackend(t) defer betesting.Close(t, be) cl := newTestClusterWithBackend(t, []*membership.Member{{ID: 1}}, be) @@ -401,6 +406,33 @@ func TestApplyRequestOnAdminMemberAttributes(t *testing.T) { } } +// TestV2SetClusterVersion validates support of hybrid v3.5 cluster which still uses v2 request. +// TODO: Remove in v3.7 +func TestV2SetClusterVersion(t *testing.T) { + be, _ := betesting.NewDefaultTmpBackend(t) + defer betesting.Close(t, be) + cl := newTestClusterWithBackend(t, []*membership.Member{}, be) + cl.SetVersion(semver.New("3.4.0"), api.UpdateCapability, membership.ApplyBoth) + srv := &EtcdServer{ + lgMu: new(sync.RWMutex), + lg: zaptest.NewLogger(t), + v2store: mockstore.NewRecorder(), + cluster: cl, + } + srv.applyV2 = NewApplierV2(srv.lg, srv.v2store, srv.cluster) + + req := pb.Request{ + Method: "PUT", + ID: 1, + Path: membership.StoreClusterVersionKey(), + Val: "3.5.0", + } + srv.applyV2Request((*RequestV2)(&req), membership.ApplyBoth) + if g := cl.Version(); !reflect.DeepEqual(*g, version.V3_5) { + t.Errorf("attributes = %v, want %v", *g, version.V3_5) + } +} + func TestApplyConfChangeError(t *testing.T) { lg := zaptest.NewLogger(t) be, _ := betesting.NewDefaultTmpBackend(t)