@@ -22,6 +22,8 @@ import (
22
22
"strings"
23
23
"testing"
24
24
25
+ "github.com/stretchr/testify/require"
26
+
25
27
"go.etcd.io/etcd/api/v3/etcdserverpb"
26
28
"go.etcd.io/etcd/tests/v3/framework/e2e"
27
29
)
@@ -227,3 +229,32 @@ func ctlV3MemberUpdate(cx ctlCtx, memberID, peerURL string) error {
227
229
cmdArgs := append (cx .PrefixArgs (), "member" , "update" , memberID , fmt .Sprintf ("--peer-urls=%s" , peerURL ))
228
230
return e2e .SpawnWithExpectWithEnv (cmdArgs , cx .envMap , " updated in cluster " )
229
231
}
232
+
233
+ func TestCtlV3PromotingLearner (t * testing.T ) {
234
+ e2e .BeforeTest (t )
235
+
236
+ t .Log ("Create a single node etcd cluster" )
237
+ cfg := e2e .NewConfigNoTLS ()
238
+ cfg .BasePeerScheme = "unix"
239
+ cfg .ClusterSize = 1
240
+
241
+ epc , err := e2e .NewEtcdProcessCluster (t , cfg )
242
+ require .NoError (t , err , "failed to start etcd cluster: %v" , err )
243
+ defer func () {
244
+ derr := epc .Close ()
245
+ require .NoError (t , derr , "failed to close etcd cluster: %v" , derr )
246
+ }()
247
+
248
+ t .Log ("Add and start a learner" )
249
+ learnerID , err := epc .StartNewProc (nil , true , t )
250
+ require .NoError (t , err )
251
+
252
+ t .Log ("Write a key to ensure the cluster is healthy so far" )
253
+ etcdctl := epc .Procs [0 ].Etcdctl (e2e .ClientNonTLS , false , false )
254
+ err = etcdctl .Put ("foo" , "bar" )
255
+ require .NoError (t , err )
256
+
257
+ t .Logf ("Promoting the learner %x" , learnerID )
258
+ _ , err = etcdctl .MemberPromote (learnerID )
259
+ require .NoError (t , err )
260
+ }
0 commit comments