mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
server: move TestModeChange to functional tests
This commit is contained in:
parent
0c26c0bfab
commit
7aa9838d8d
@ -135,6 +135,68 @@ func BenchmarkEndToEndSet(b *testing.B) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO(yichengq): cannot handle previous msgDenial correctly now
|
||||||
|
func TestModeSwitch(t *testing.T) {
|
||||||
|
t.Skip("not passed")
|
||||||
|
size := 5
|
||||||
|
round := 3
|
||||||
|
|
||||||
|
for i := 0; i < size; i++ {
|
||||||
|
es, hs := buildCluster(size, false)
|
||||||
|
waitCluster(t, es)
|
||||||
|
|
||||||
|
config := config.NewClusterConfig()
|
||||||
|
config.SyncInterval = 0
|
||||||
|
id := int64(i)
|
||||||
|
for j := 0; j < round; j++ {
|
||||||
|
lead, _ := waitActiveLeader(es)
|
||||||
|
// cluster only demotes follower
|
||||||
|
if lead == id {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
config.ActiveSize = size - 1
|
||||||
|
if err := es[lead].p.setClusterConfig(config); err != nil {
|
||||||
|
t.Fatalf("#%d: setClusterConfig err = %v", i, err)
|
||||||
|
}
|
||||||
|
if err := es[lead].p.remove(id); err != nil {
|
||||||
|
t.Fatalf("#%d: remove err = %v", i, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
waitMode(standbyMode, es[i])
|
||||||
|
|
||||||
|
for k := 0; k < 4; k++ {
|
||||||
|
if es[i].s.leader != noneId {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
time.Sleep(20 * time.Millisecond)
|
||||||
|
}
|
||||||
|
if g := es[i].s.leader; g != lead {
|
||||||
|
t.Errorf("#%d: lead = %d, want %d", i, g, lead)
|
||||||
|
}
|
||||||
|
|
||||||
|
config.ActiveSize = size
|
||||||
|
if err := es[lead].p.setClusterConfig(config); err != nil {
|
||||||
|
t.Fatalf("#%d: setClusterConfig err = %v", i, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
waitMode(participantMode, es[i])
|
||||||
|
|
||||||
|
if err := checkParticipant(i, es); err != nil {
|
||||||
|
t.Errorf("#%d: check alive err = %v", i, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := range hs {
|
||||||
|
es[len(hs)-i-1].Stop()
|
||||||
|
}
|
||||||
|
for i := range hs {
|
||||||
|
hs[len(hs)-i-1].Close()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
afterTest(t)
|
||||||
|
}
|
||||||
|
|
||||||
type leadterm struct {
|
type leadterm struct {
|
||||||
lead int64
|
lead int64
|
||||||
term int64
|
term int64
|
||||||
|
@ -280,68 +280,6 @@ func TestBecomeStandby(t *testing.T) {
|
|||||||
afterTest(t)
|
afterTest(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(yichengq): cannot handle previous msgDenial correctly now
|
|
||||||
func TestModeSwitch(t *testing.T) {
|
|
||||||
t.Skip("not passed")
|
|
||||||
size := 5
|
|
||||||
round := 3
|
|
||||||
|
|
||||||
for i := 0; i < size; i++ {
|
|
||||||
es, hs := buildCluster(size, false)
|
|
||||||
waitCluster(t, es)
|
|
||||||
|
|
||||||
config := config.NewClusterConfig()
|
|
||||||
config.SyncInterval = 0
|
|
||||||
id := int64(i)
|
|
||||||
for j := 0; j < round; j++ {
|
|
||||||
lead, _ := waitActiveLeader(es)
|
|
||||||
// cluster only demotes follower
|
|
||||||
if lead == id {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
config.ActiveSize = size - 1
|
|
||||||
if err := es[lead].p.setClusterConfig(config); err != nil {
|
|
||||||
t.Fatalf("#%d: setClusterConfig err = %v", i, err)
|
|
||||||
}
|
|
||||||
if err := es[lead].p.remove(id); err != nil {
|
|
||||||
t.Fatalf("#%d: remove err = %v", i, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
waitMode(standbyMode, es[i])
|
|
||||||
|
|
||||||
for k := 0; k < 4; k++ {
|
|
||||||
if es[i].s.leader != noneId {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
time.Sleep(20 * time.Millisecond)
|
|
||||||
}
|
|
||||||
if g := es[i].s.leader; g != lead {
|
|
||||||
t.Errorf("#%d: lead = %d, want %d", i, g, lead)
|
|
||||||
}
|
|
||||||
|
|
||||||
config.ActiveSize = size
|
|
||||||
if err := es[lead].p.setClusterConfig(config); err != nil {
|
|
||||||
t.Fatalf("#%d: setClusterConfig err = %v", i, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
waitMode(participantMode, es[i])
|
|
||||||
|
|
||||||
if err := checkParticipant(i, es); err != nil {
|
|
||||||
t.Errorf("#%d: check alive err = %v", i, err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for i := range hs {
|
|
||||||
es[len(hs)-i-1].Stop()
|
|
||||||
}
|
|
||||||
for i := range hs {
|
|
||||||
hs[len(hs)-i-1].Close()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
afterTest(t)
|
|
||||||
}
|
|
||||||
|
|
||||||
func buildCluster(number int, tls bool) ([]*Server, []*httptest.Server) {
|
func buildCluster(number int, tls bool) ([]*Server, []*httptest.Server) {
|
||||||
bootstrapper := 0
|
bootstrapper := 0
|
||||||
es := make([]*Server, number)
|
es := make([]*Server, number)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user