From 94af8f44e6397abe4fe1e3d3659cb005359169c6 Mon Sep 17 00:00:00 2001 From: Geeta Gharpure Date: Fri, 9 Jun 2023 16:38:54 +0000 Subject: [PATCH] Update downgrade test to use snapshot Signed-off-by: Geeta Gharpure --- tests/e2e/cluster_downgrade_test.go | 45 +++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/tests/e2e/cluster_downgrade_test.go b/tests/e2e/cluster_downgrade_test.go index fb6f7d954f28..28f81accdfac 100644 --- a/tests/e2e/cluster_downgrade_test.go +++ b/tests/e2e/cluster_downgrade_test.go @@ -23,12 +23,14 @@ import ( "time" "github.com/coreos/go-semver/semver" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "go.uber.org/zap" "go.etcd.io/etcd/api/v3/version" "go.etcd.io/etcd/client/pkg/v3/fileutil" clientv3 "go.etcd.io/etcd/client/v3" + "go.etcd.io/etcd/tests/v3/framework/config" "go.etcd.io/etcd/tests/v3/framework/e2e" "go.etcd.io/etcd/tests/v3/framework/testutils" ) @@ -67,7 +69,7 @@ func testDowngradeUpgrade(t *testing.T, clusterSize int) { e2e.BeforeTest(t) t.Logf("Create cluster with version %s", currentVersionStr) - epc := newCluster(t, clusterSize) + epc := newCluster(t, clusterSize, 10, t.TempDir()) for i := 0; i < len(epc.Procs); i++ { validateVersion(t, epc.Cfg, epc.Procs[i], version.Versions{ Cluster: currentVersionStr, @@ -76,6 +78,8 @@ func testDowngradeUpgrade(t *testing.T, clusterSize int) { }) } t.Logf("Cluster created") + generateSnapshot(t, 10, epc) + bm, bkv := getMembersAndKeys(t, epc) t.Logf("etcdctl downgrade enable %s", lastVersionStr) downgradeEnable(t, epc, lastVersion) @@ -108,6 +112,10 @@ func testDowngradeUpgrade(t *testing.T, clusterSize int) { } t.Log("Downgrade complete") + am, akv := getMembersAndKeys(t, epc) + assert.Equal(t, bkv.Kvs, akv.Kvs) + assert.Equal(t, bm.Members, am.Members) + t.Logf("Starting upgrade process to %q", currentVersionStr) for i := 0; i < len(epc.Procs); i++ { t.Logf("Upgrading member %d", i) @@ -129,9 +137,11 @@ func testDowngradeUpgrade(t *testing.T, clusterSize int) { t.Log("Upgrade complete") } -func newCluster(t *testing.T, clusterSize int) *e2e.EtcdProcessCluster { +func newCluster(t *testing.T, clusterSize int, snapshotCount uint64, dataDir string) *e2e.EtcdProcessCluster { epc, err := e2e.NewEtcdProcessCluster(context.TODO(), t, e2e.WithClusterSize(clusterSize), + e2e.WithDataDirPath(dataDir), + e2e.WithSnapshotCount(snapshotCount), e2e.WithKeepDataDir(true), ) if err != nil { @@ -243,3 +253,34 @@ func getMemberVersionByCurl(cfg *e2e.EtcdProcessClusterConfig, member e2e.EtcdPr } return result, nil } + +func generateSnapshot(t *testing.T, snapshotCount uint64, epc *e2e.EtcdProcessCluster) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + t.Log("Adding and removing keys") + cc, err := e2e.NewEtcdctl(epc.Cfg.Client, epc.EndpointsGRPC()) + assert.NoError(t, err) + + var i uint64 + for i = 0; i < snapshotCount*3; i++ { + err := cc.Put(ctx, fmt.Sprintf("%d", i), "1", config.PutOptions{}) + assert.NoError(t, err) + } +} + +func getMembersAndKeys(t *testing.T, epc *e2e.EtcdProcessCluster) (*clientv3.MemberListResponse, *clientv3.GetResponse) { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + cc, err := e2e.NewEtcdctl(epc.Cfg.Client, epc.EndpointsGRPC()) + assert.NoError(t, err) + + kvs, err := cc.Get(ctx, "", config.GetOptions{Prefix: true}) + assert.NoError(t, err) + + members, err := cc.MemberList(ctx, false) + assert.NoError(t, err) + + return members, kvs +}