@@ -25,6 +25,7 @@ import (
2525 "github.com/stretchr/testify/assert"
2626 "github.com/stretchr/testify/require"
2727
28+ pb "go.etcd.io/etcd/api/v3/etcdserverpb"
2829 "go.etcd.io/etcd/api/v3/version"
2930 "go.etcd.io/etcd/client/pkg/v3/fileutil"
3031 "go.etcd.io/etcd/client/pkg/v3/types"
@@ -51,6 +52,10 @@ func TestDowngradeUpgradeClusterOf1(t *testing.T) {
5152 testDowngradeUpgrade (t , 1 , 1 , false , noCancellation )
5253}
5354
55+ func TestDowngradeUpgrade2InClusterOf3 (t * testing.T ) {
56+ testDowngradeUpgrade (t , 2 , 3 , false , noCancellation )
57+ }
58+
5459func TestDowngradeUpgradeClusterOf3 (t * testing.T ) {
5560 testDowngradeUpgrade (t , 3 , 3 , false , noCancellation )
5661}
@@ -128,6 +133,9 @@ func testDowngradeUpgrade(t *testing.T, numberOfMembersToDowngrade int, clusterS
128133 time .Sleep (etcdserver .HealthInterval )
129134 }
130135
136+ t .Log ("Downgrade should be disabled" )
137+ e2e .ValidateDowngradeInfo (t , epc , & pb.DowngradeInfo {Enabled : false })
138+
131139 t .Log ("Adding member to test membership, but a learner avoid breaking quorum" )
132140 resp , err := cc .MemberAddAsLearner (context .Background (), "fake1" , []string {"http://127.0.0.1:1001" })
133141 require .NoError (t , err )
@@ -150,6 +158,10 @@ func testDowngradeUpgrade(t *testing.T, numberOfMembersToDowngrade int, clusterS
150158 return // No need to perform downgrading, end the test here
151159 }
152160 e2e .DowngradeEnable (t , epc , lastVersion )
161+
162+ t .Log ("Downgrade should be enabled" )
163+ e2e .ValidateDowngradeInfo (t , epc , & pb.DowngradeInfo {Enabled : true , TargetVersion : lastClusterVersion .String ()})
164+
153165 if triggerCancellation == cancelRightAfterEnable {
154166 t .Logf ("Cancelling downgrade right after enabling (no node is downgraded yet)" )
155167 e2e .DowngradeCancel (t , epc )
@@ -165,7 +177,7 @@ func testDowngradeUpgrade(t *testing.T, numberOfMembersToDowngrade int, clusterS
165177 err = e2e .DowngradeUpgradeMembersByID (t , nil , epc , membersToChange , currentVersion , lastClusterVersion )
166178 require .NoError (t , err )
167179 if len (membersToChange ) == len (epc .Procs ) {
168- e2e .AssertProcessLogs (t , leader ( t , epc ) , "the cluster has been downgraded" )
180+ e2e .AssertProcessLogs (t , epc . Procs [ epc . WaitLeader ( t )] , "the cluster has been downgraded" )
169181 }
170182
171183 t .Log ("Downgrade complete" )
@@ -202,6 +214,14 @@ func testDowngradeUpgrade(t *testing.T, numberOfMembersToDowngrade int, clusterS
202214 require .NoError (t , err )
203215 t .Log ("Upgrade complete" )
204216
217+ if triggerCancellation == noCancellation && numberOfMembersToDowngrade < clusterSize {
218+ t .Log ("Downgrade should be still enabled" )
219+ e2e .ValidateDowngradeInfo (t , epc , & pb.DowngradeInfo {Enabled : true , TargetVersion : lastClusterVersion .String ()})
220+ } else {
221+ t .Log ("Downgrade should be disabled" )
222+ e2e .ValidateDowngradeInfo (t , epc , & pb.DowngradeInfo {Enabled : false })
223+ }
224+
205225 afterMembers , afterKV = getMembersAndKeys (t , cc )
206226 assert .Equal (t , beforeKV .Kvs , afterKV .Kvs )
207227 assert .Equal (t , beforeMembers .Members , afterMembers .Members )
@@ -224,27 +244,6 @@ func newCluster(t *testing.T, clusterSize int, snapshotCount uint64) *e2e.EtcdPr
224244 return epc
225245}
226246
227- func leader (t * testing.T , epc * e2e.EtcdProcessCluster ) e2e.EtcdProcess {
228- ctx , cancel := context .WithTimeout (context .Background (), time .Second * 10 )
229- defer cancel ()
230- for i := 0 ; i < len (epc .Procs ); i ++ {
231- endpoints := epc .Procs [i ].EndpointsGRPC ()
232- cli , err := clientv3 .New (clientv3.Config {
233- Endpoints : endpoints ,
234- DialTimeout : 3 * time .Second ,
235- })
236- require .NoError (t , err )
237- defer cli .Close ()
238- resp , err := cli .Status (ctx , endpoints [0 ])
239- require .NoError (t , err )
240- if resp .Header .GetMemberId () == resp .Leader {
241- return epc .Procs [i ]
242- }
243- }
244- t .Fatal ("Leader not found" )
245- return nil
246- }
247-
248247func generateSnapshot (t * testing.T , snapshotCount uint64 , cc * e2e.EtcdctlV3 ) {
249248 ctx , cancel := context .WithCancel (context .Background ())
250249 defer cancel ()
0 commit comments