mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
server: move TestSingleNodeRecovery under etcd/
This commit is contained in:
parent
ffa5eb08c3
commit
efaef49734
@ -311,6 +311,60 @@ func TestVersionCheck(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestSingleNodeRecovery(t *testing.T) {
|
||||
id := genId()
|
||||
dataDir, err := ioutil.TempDir(os.TempDir(), "etcd")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
c := config.New()
|
||||
c.DataDir = dataDir
|
||||
e, h, _ := buildServer(t, c, id)
|
||||
key := "/foo"
|
||||
|
||||
ev, err := e.p.Set(key, false, "bar", time.Now().Add(time.Second*100))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
w, err := e.p.Watch(key, false, false, ev.Index())
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
select {
|
||||
case v := <-w.EventChan:
|
||||
if v.Node.TTL < 95 {
|
||||
t.Errorf("ttl = %d, want >= 95", v.Node.TTL)
|
||||
}
|
||||
case <-time.After(8 * defaultHeartbeat * e.tickDuration):
|
||||
t.Fatal("watch timeout")
|
||||
}
|
||||
|
||||
e.Stop()
|
||||
h.Close()
|
||||
|
||||
time.Sleep(2 * time.Second)
|
||||
|
||||
c = config.New()
|
||||
c.DataDir = dataDir
|
||||
e, h, _ = buildServer(t, c, id)
|
||||
|
||||
w, err = e.p.Watch(key, false, false, ev.Index())
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
select {
|
||||
case v := <-w.EventChan:
|
||||
if v.Node.TTL > 99 {
|
||||
t.Errorf("ttl = %d, want <= 99", v.Node.TTL)
|
||||
}
|
||||
case <-time.After(8 * defaultHeartbeat * e.tickDuration):
|
||||
t.Fatal("2nd watch timeout")
|
||||
}
|
||||
|
||||
destroyServer(t, e, h)
|
||||
}
|
||||
|
||||
func buildCluster(number int, tls bool) ([]*Server, []*httptest.Server) {
|
||||
bootstrapper := 0
|
||||
es := make([]*Server, number)
|
||||
@ -342,23 +396,26 @@ func buildCluster(number int, tls bool) ([]*Server, []*httptest.Server) {
|
||||
}
|
||||
|
||||
func initTestServer(c *config.Config, id int64, tls bool) (e *Server, h *httptest.Server) {
|
||||
n, err := ioutil.TempDir(os.TempDir(), "etcd")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
if c.DataDir == "" {
|
||||
n, err := ioutil.TempDir(os.TempDir(), "etcd")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
c.DataDir = n
|
||||
}
|
||||
c.DataDir = n
|
||||
|
||||
e, err = New(c)
|
||||
srv, err := New(c)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
e = srv
|
||||
e.setId(id)
|
||||
e.SetTick(time.Millisecond * 5)
|
||||
|
||||
m := http.NewServeMux()
|
||||
m.Handle("/", e)
|
||||
m.Handle("/raft", e.RaftHandler())
|
||||
m.Handle("/raft/", e.RaftHandler())
|
||||
|
||||
if tls {
|
||||
h = httptest.NewTLSServer(m)
|
||||
} else {
|
||||
|
@ -1,68 +0,0 @@
|
||||
package test
|
||||
|
||||
import (
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/coreos/etcd/third_party/github.com/coreos/go-etcd/etcd"
|
||||
)
|
||||
|
||||
// This test creates a single node and then set a value to it.
|
||||
// Then this test kills the node and restart it and tries to get the value again.
|
||||
func TestSingleNodeRecovery(t *testing.T) {
|
||||
procAttr := new(os.ProcAttr)
|
||||
procAttr.Files = []*os.File{nil, os.Stdout, os.Stderr}
|
||||
args := []string{"etcd", "-name=node1", "-data-dir=/tmp/node1"}
|
||||
|
||||
process, err := os.StartProcess(EtcdBinPath, append(args, "-f"), procAttr)
|
||||
if err != nil {
|
||||
t.Fatal("start process failed:" + err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
time.Sleep(time.Second)
|
||||
|
||||
c := etcd.NewClient(nil)
|
||||
|
||||
c.SyncCluster()
|
||||
// Test Set
|
||||
result, err := c.Set("foo", "bar", 100)
|
||||
node := result.Node
|
||||
|
||||
if err != nil || node.Key != "/foo" || node.Value != "bar" || node.TTL < 95 {
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
t.Fatalf("Set 1 failed with %s %s %v", node.Key, node.Value, node.TTL)
|
||||
}
|
||||
|
||||
time.Sleep(time.Second)
|
||||
|
||||
process.Kill()
|
||||
|
||||
process, err = os.StartProcess(EtcdBinPath, args, procAttr)
|
||||
defer process.Kill()
|
||||
if err != nil {
|
||||
t.Fatal("start process failed:" + err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
time.Sleep(time.Second)
|
||||
|
||||
result, err = c.Get("foo", false, false)
|
||||
node = result.Node
|
||||
|
||||
if err != nil {
|
||||
t.Fatal("get fail: " + err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
if err != nil || node.Key != "/foo" || node.Value != "bar" || node.TTL > 99 {
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Fatalf("Recovery Get failed with %s %s %v", node.Key, node.Value, node.TTL)
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user