package integration import ( "io/ioutil" "os" "testing" ) func TestPauseMember(t *testing.T) { defer afterTest(t) c := NewCluster(t, 5) c.Launch(t) defer c.Terminate(t) for i := 0; i < 5; i++ { c.Members[i].Pause() membs := append([]*member{}, c.Members[:i]...) membs = append(membs, c.Members[i+1:]...) c.waitLeader(t, membs) clusterMustProgress(t, membs) c.Members[i].Resume() } c.waitLeader(t, c.Members) clusterMustProgress(t, c.Members) } func TestRestartMember(t *testing.T) { defer afterTest(t) c := NewCluster(t, 3) c.Launch(t) defer c.Terminate(t) for i := 0; i < 3; i++ { c.Members[i].Stop(t) membs := append([]*member{}, c.Members[:i]...) membs = append(membs, c.Members[i+1:]...) c.waitLeader(t, membs) clusterMustProgress(t, membs) err := c.Members[i].Restart(t) if err != nil { t.Fatal(err) } } clusterMustProgress(t, c.Members) } func TestLaunchDuplicateMemberShouldFail(t *testing.T) { size := 3 c := NewCluster(t, size) m := c.Members[0].Clone(t) var err error m.DataDir, err = ioutil.TempDir(os.TempDir(), "etcd") if err != nil { t.Fatal(err) } c.Launch(t) defer c.Terminate(t) if err := m.Launch(); err == nil { t.Errorf("unexpect successful launch") } }