Browse Source

etcd: add destoryCluster for testing

Xiang Li 11 years ago
parent
commit
653a63fa00
5 changed files with 72 additions and 164 deletions
  1. 5 30
      etcd/etcd_functional_test.go
  2. 18 33
      etcd/etcd_start_test.go
  3. 31 37
      etcd/etcd_test.go
  4. 7 42
      etcd/v2_http_endpoint_test.go
  5. 11 22
      etcd/v2_http_kv_test.go

+ 5 - 30
etcd/etcd_functional_test.go

@@ -44,12 +44,7 @@ func TestKillLeader(t *testing.T) {
 			t.Errorf("#%d: lead = %d, want not 0", i, es[1].p.node.Leader())
 			t.Errorf("#%d: lead = %d, want not 0", i, es[1].p.node.Leader())
 		}
 		}
 
 
-		for i := range es {
-			es[len(es)-i-1].Stop()
-		}
-		for i := range hs {
-			hs[len(hs)-i-1].Close()
-		}
+		destoryCluster(t, es, hs)
 	}
 	}
 	afterTest(t)
 	afterTest(t)
 }
 }
@@ -74,12 +69,7 @@ func TestRandomKill(t *testing.T) {
 
 
 		waitLeader(es)
 		waitLeader(es)
 
 
-		for i := range es {
-			es[len(es)-i-1].Stop()
-		}
-		for i := range hs {
-			hs[len(hs)-i-1].Close()
-		}
+		destoryCluster(t, es, hs)
 	}
 	}
 	afterTest(t)
 	afterTest(t)
 }
 }
@@ -106,12 +96,7 @@ func TestJoinThroughFollower(t *testing.T) {
 		}
 		}
 		waitCluster(t, es)
 		waitCluster(t, es)
 
 
-		for i := range hs {
-			es[len(hs)-i-1].Stop()
-		}
-		for i := range hs {
-			hs[len(hs)-i-1].Close()
-		}
+		destoryCluster(t, es, hs)
 	}
 	}
 	afterTest(t)
 	afterTest(t)
 }
 }
@@ -127,12 +112,7 @@ func BenchmarkEndToEndSet(b *testing.B) {
 		}
 		}
 	}
 	}
 	b.StopTimer()
 	b.StopTimer()
-	for i := range hs {
-		es[len(hs)-i-1].Stop()
-	}
-	for i := range hs {
-		hs[len(hs)-i-1].Close()
-	}
+	destoryCluster(nil, es, hs)
 }
 }
 
 
 // TODO(yichengq): cannot handle previous msgDenial correctly now
 // TODO(yichengq): cannot handle previous msgDenial correctly now
@@ -187,12 +167,7 @@ func TestModeSwitch(t *testing.T) {
 			}
 			}
 		}
 		}
 
 
-		for i := range hs {
-			es[len(hs)-i-1].Stop()
-		}
-		for i := range hs {
-			hs[len(hs)-i-1].Close()
-		}
+		destoryCluster(t, es, hs)
 	}
 	}
 	afterTest(t)
 	afterTest(t)
 }
 }

+ 18 - 33
etcd/etcd_start_test.go

@@ -57,7 +57,7 @@ func TestBadDiscoveryService(t *testing.T) {
 
 
 	c := config.New()
 	c := config.New()
 	c.Discovery = ts.URL + "/v2/keys/_etcd/registry/1"
 	c.Discovery = ts.URL + "/v2/keys/_etcd/registry/1"
-	_, _, err := buildServer(c, bootstrapId)
+	_, _, err := buildServer(t, c, bootstrapId)
 	w := `discovery service error`
 	w := `discovery service error`
 	if err == nil || !strings.HasPrefix(err.Error(), w) {
 	if err == nil || !strings.HasPrefix(err.Error(), w) {
 		t.Errorf("err = %v, want %s prefix", err, w)
 		t.Errorf("err = %v, want %s prefix", err, w)
@@ -82,18 +82,13 @@ func TestBadDiscoveryServiceWithAdvisedPeers(t *testing.T) {
 	c := config.New()
 	c := config.New()
 	c.Discovery = ts.URL + "/v2/keys/_etcd/registry/1"
 	c.Discovery = ts.URL + "/v2/keys/_etcd/registry/1"
 	c.Peers = []string{hs[0].URL}
 	c.Peers = []string{hs[0].URL}
-	_, _, err := buildServer(c, bootstrapId)
+	_, _, err := buildServer(t, c, bootstrapId)
 	w := `discovery service error`
 	w := `discovery service error`
 	if err == nil || !strings.HasPrefix(err.Error(), w) {
 	if err == nil || !strings.HasPrefix(err.Error(), w) {
 		t.Errorf("err = %v, want %s prefix", err, w)
 		t.Errorf("err = %v, want %s prefix", err, w)
 	}
 	}
 
 
-	for i := range hs {
-		es[len(hs)-i-1].Stop()
-	}
-	for i := range hs {
-		hs[len(hs)-i-1].Close()
-	}
+	destoryCluster(t, es, hs)
 	ts.Close()
 	ts.Close()
 	afterTest(t)
 	afterTest(t)
 }
 }
@@ -101,7 +96,7 @@ func TestBadDiscoveryServiceWithAdvisedPeers(t *testing.T) {
 func TestBootstrapByEmptyPeers(t *testing.T) {
 func TestBootstrapByEmptyPeers(t *testing.T) {
 	c := config.New()
 	c := config.New()
 	id := genId()
 	id := genId()
-	e, h, err := buildServer(c, id)
+	e, h, err := buildServer(t, c, id)
 
 
 	if err != nil {
 	if err != nil {
 		t.Error(err)
 		t.Error(err)
@@ -109,22 +104,22 @@ func TestBootstrapByEmptyPeers(t *testing.T) {
 	if e.p.node.Leader() != id {
 	if e.p.node.Leader() != id {
 		t.Error("leader = %x, want %x", e.p.node.Leader(), id)
 		t.Error("leader = %x, want %x", e.p.node.Leader(), id)
 	}
 	}
-	destroyServer(e, h)
+	destroyServer(t, e, h)
 	afterTest(t)
 	afterTest(t)
 }
 }
 
 
 func TestBootstrapByDiscoveryService(t *testing.T) {
 func TestBootstrapByDiscoveryService(t *testing.T) {
-	de, dh, _ := buildServer(config.New(), genId())
+	de, dh, _ := buildServer(t, config.New(), genId())
 
 
 	c := config.New()
 	c := config.New()
 	c.Discovery = dh.URL + "/v2/keys/_etcd/registry/1"
 	c.Discovery = dh.URL + "/v2/keys/_etcd/registry/1"
-	e, h, err := buildServer(c, bootstrapId)
+	e, h, err := buildServer(t, c, bootstrapId)
 	if err != nil {
 	if err != nil {
 		t.Fatalf("build server err = %v, want nil", err)
 		t.Fatalf("build server err = %v, want nil", err)
 	}
 	}
 
 
-	destroyServer(e, h)
-	destroyServer(de, dh)
+	destroyServer(t, e, h)
+	destroyServer(t, de, dh)
 	afterTest(t)
 	afterTest(t)
 }
 }
 
 
@@ -134,7 +129,7 @@ func TestRunByAdvisedPeers(t *testing.T) {
 
 
 	c := config.New()
 	c := config.New()
 	c.Peers = []string{hs[0].URL}
 	c.Peers = []string{hs[0].URL}
-	e, h, err := buildServer(c, bootstrapId)
+	e, h, err := buildServer(t, c, bootstrapId)
 	if err != nil {
 	if err != nil {
 		t.Fatalf("build server err = %v, want nil", err)
 		t.Fatalf("build server err = %v, want nil", err)
 	}
 	}
@@ -143,18 +138,13 @@ func TestRunByAdvisedPeers(t *testing.T) {
 		t.Errorf("leader = %d, want %d", g, w)
 		t.Errorf("leader = %d, want %d", g, w)
 	}
 	}
 
 
-	destroyServer(e, h)
-	for i := range hs {
-		es[len(hs)-i-1].Stop()
-	}
-	for i := range hs {
-		hs[len(hs)-i-1].Close()
-	}
+	destroyServer(t, e, h)
+	destoryCluster(t, es, hs)
 	afterTest(t)
 	afterTest(t)
 }
 }
 
 
 func TestRunByDiscoveryService(t *testing.T) {
 func TestRunByDiscoveryService(t *testing.T) {
-	de, dh, _ := buildServer(config.New(), genId())
+	de, dh, _ := buildServer(t, config.New(), genId())
 
 
 	tc := NewTestClient()
 	tc := NewTestClient()
 	v := url.Values{}
 	v := url.Values{}
@@ -174,7 +164,7 @@ func TestRunByDiscoveryService(t *testing.T) {
 
 
 	c := config.New()
 	c := config.New()
 	c.Discovery = dh.URL + "/v2/keys/_etcd/registry/1"
 	c.Discovery = dh.URL + "/v2/keys/_etcd/registry/1"
-	e, h, err := buildServer(c, bootstrapId)
+	e, h, err := buildServer(t, c, bootstrapId)
 	if err != nil {
 	if err != nil {
 		t.Fatalf("build server err = %v, want nil", err)
 		t.Fatalf("build server err = %v, want nil", err)
 	}
 	}
@@ -183,12 +173,12 @@ func TestRunByDiscoveryService(t *testing.T) {
 		t.Errorf("leader = %d, want %d", g, w)
 		t.Errorf("leader = %d, want %d", g, w)
 	}
 	}
 
 
-	destroyServer(e, h)
-	destroyServer(de, dh)
+	destroyServer(t, e, h)
+	destroyServer(t, de, dh)
 	afterTest(t)
 	afterTest(t)
 }
 }
 
 
-func buildServer(c *config.Config, id int64) (e *Server, h *httptest.Server, err error) {
+func buildServer(t *testing.T, c *config.Config, id int64) (e *Server, h *httptest.Server, err error) {
 	e, h = initTestServer(c, id, false)
 	e, h = initTestServer(c, id, false)
 	go func() { err = e.Run() }()
 	go func() { err = e.Run() }()
 	for {
 	for {
@@ -196,15 +186,10 @@ func buildServer(c *config.Config, id int64) (e *Server, h *httptest.Server, err
 			break
 			break
 		}
 		}
 		if err != nil {
 		if err != nil {
-			destroyServer(e, h)
+			destroyServer(t, e, h)
 			return nil, nil, err
 			return nil, nil, err
 		}
 		}
 		time.Sleep(10 * time.Millisecond)
 		time.Sleep(10 * time.Millisecond)
 	}
 	}
 	return e, h, nil
 	return e, h, nil
 }
 }
-
-func destroyServer(e *Server, h *httptest.Server) {
-	e.Stop()
-	h.Close()
-}

+ 31 - 37
etcd/etcd_test.go

@@ -37,12 +37,7 @@ func TestMultipleNodes(t *testing.T) {
 	for _, tt := range tests {
 	for _, tt := range tests {
 		es, hs := buildCluster(tt, false)
 		es, hs := buildCluster(tt, false)
 		waitCluster(t, es)
 		waitCluster(t, es)
-		for i := range es {
-			es[len(es)-i-1].Stop()
-		}
-		for i := range hs {
-			hs[len(hs)-i-1].Close()
-		}
+		destoryCluster(t, es, hs)
 	}
 	}
 	afterTest(t)
 	afterTest(t)
 }
 }
@@ -53,12 +48,7 @@ func TestMultipleTLSNodes(t *testing.T) {
 	for _, tt := range tests {
 	for _, tt := range tests {
 		es, hs := buildCluster(tt, true)
 		es, hs := buildCluster(tt, true)
 		waitCluster(t, es)
 		waitCluster(t, es)
-		for i := range es {
-			es[len(es)-i-1].Stop()
-		}
-		for i := range hs {
-			hs[len(hs)-i-1].Close()
-		}
+		destoryCluster(t, es, hs)
 	}
 	}
 	afterTest(t)
 	afterTest(t)
 }
 }
@@ -86,12 +76,7 @@ func TestV2Redirect(t *testing.T) {
 	}
 	}
 
 
 	resp.Body.Close()
 	resp.Body.Close()
-	for i := range es {
-		es[len(es)-i-1].Stop()
-	}
-	for i := range hs {
-		hs[len(hs)-i-1].Close()
-	}
+	destoryCluster(t, es, hs)
 	afterTest(t)
 	afterTest(t)
 }
 }
 
 
@@ -148,12 +133,7 @@ func TestAdd(t *testing.T) {
 			}
 			}
 		}
 		}
 
 
-		for i := range hs {
-			es[len(hs)-i-1].Stop()
-		}
-		for i := range hs {
-			hs[len(hs)-i-1].Close()
-		}
+		destoryCluster(t, es, hs)
 	}
 	}
 	afterTest(t)
 	afterTest(t)
 }
 }
@@ -210,12 +190,7 @@ func TestRemove(t *testing.T) {
 			waitMode(standbyMode, es[i])
 			waitMode(standbyMode, es[i])
 		}
 		}
 
 
-		for i := range es {
-			es[len(hs)-i-1].Stop()
-		}
-		for i := range hs {
-			hs[len(hs)-i-1].Close()
-		}
+		destoryCluster(t, es, hs)
 	}
 	}
 	afterTest(t)
 	afterTest(t)
 	// ensure that no goroutines are running
 	// ensure that no goroutines are running
@@ -272,12 +247,7 @@ func TestBecomeStandby(t *testing.T) {
 			t.Errorf("#%d: lead = %d, want %d", i, g, lead)
 			t.Errorf("#%d: lead = %d, want %d", i, g, lead)
 		}
 		}
 
 
-		for i := range hs {
-			es[len(hs)-i-1].Stop()
-		}
-		for i := range hs {
-			hs[len(hs)-i-1].Close()
-		}
+		destoryCluster(t, es, hs)
 	}
 	}
 	afterTest(t)
 	afterTest(t)
 }
 }
@@ -373,7 +343,6 @@ func buildCluster(number int, tls bool) ([]*Server, []*httptest.Server) {
 
 
 func initTestServer(c *config.Config, id int64, tls bool) (e *Server, h *httptest.Server) {
 func initTestServer(c *config.Config, id int64, tls bool) (e *Server, h *httptest.Server) {
 	c.DataDir = fmt.Sprintf("tests/etcd_%d", id)
 	c.DataDir = fmt.Sprintf("tests/etcd_%d", id)
-	os.RemoveAll(c.DataDir)
 
 
 	e, err := New(c)
 	e, err := New(c)
 	if err != nil {
 	if err != nil {
@@ -397,6 +366,31 @@ func initTestServer(c *config.Config, id int64, tls bool) (e *Server, h *httptes
 	return
 	return
 }
 }
 
 
+func destoryCluster(t *testing.T, es []*Server, hs []*httptest.Server) {
+	for i := range es {
+		e := es[len(es)-i-1]
+		e.Stop()
+		err := os.RemoveAll(e.config.DataDir)
+		if err != nil {
+			panic(err)
+			t.Fatal(err)
+		}
+	}
+	for i := range hs {
+		hs[len(hs)-i-1].Close()
+	}
+}
+
+func destroyServer(t *testing.T, e *Server, h *httptest.Server) {
+	e.Stop()
+	h.Close()
+	err := os.RemoveAll(e.config.DataDir)
+	if err != nil {
+		panic(err)
+		t.Fatal(err)
+	}
+}
+
 func waitCluster(t *testing.T, es []*Server) {
 func waitCluster(t *testing.T, es []*Server) {
 	n := len(es)
 	n := len(es)
 	for _, e := range es {
 	for _, e := range es {

+ 7 - 42
etcd/v2_http_endpoint_test.go

@@ -59,12 +59,7 @@ func TestMachinesEndPoint(t *testing.T) {
 		}
 		}
 	}
 	}
 
 
-	for i := range es {
-		es[len(es)-i-1].Stop()
-	}
-	for i := range hs {
-		hs[len(hs)-i-1].Close()
-	}
+	destoryCluster(t, es, hs)
 	afterTest(t)
 	afterTest(t)
 }
 }
 
 
@@ -96,12 +91,7 @@ func TestLeaderEndPoint(t *testing.T) {
 		}
 		}
 	}
 	}
 
 
-	for i := range es {
-		es[len(es)-i-1].Stop()
-	}
-	for i := range hs {
-		hs[len(hs)-i-1].Close()
-	}
+	destoryCluster(t, es, hs)
 	afterTest(t)
 	afterTest(t)
 }
 }
 
 
@@ -125,12 +115,7 @@ func TestStoreStatsEndPoint(t *testing.T) {
 		t.Errorf("setSuccess = %d, want 1", stats.SetSuccess)
 		t.Errorf("setSuccess = %d, want 1", stats.SetSuccess)
 	}
 	}
 
 
-	for i := range es {
-		es[len(es)-i-1].Stop()
-	}
-	for i := range hs {
-		hs[len(hs)-i-1].Close()
-	}
+	destoryCluster(t, es, hs)
 	afterTest(t)
 	afterTest(t)
 }
 }
 
 
@@ -164,12 +149,7 @@ func TestGetAdminConfigEndPoint(t *testing.T) {
 		}
 		}
 	}
 	}
 
 
-	for i := range es {
-		es[len(es)-i-1].Stop()
-	}
-	for i := range hs {
-		hs[len(hs)-i-1].Close()
-	}
+	destoryCluster(t, es, hs)
 	afterTest(t)
 	afterTest(t)
 }
 }
 
 
@@ -225,12 +205,7 @@ func TestPutAdminConfigEndPoint(t *testing.T) {
 			}
 			}
 		}
 		}
 
 
-		for j := range es {
-			es[len(es)-j-1].Stop()
-		}
-		for j := range hs {
-			hs[len(hs)-j-1].Close()
-		}
+		destoryCluster(t, es, hs)
 	}
 	}
 	afterTest(t)
 	afterTest(t)
 }
 }
@@ -276,12 +251,7 @@ func TestGetAdminMachineEndPoint(t *testing.T) {
 		}
 		}
 	}
 	}
 
 
-	for i := range es {
-		es[len(es)-i-1].Stop()
-	}
-	for i := range hs {
-		hs[len(hs)-i-1].Close()
-	}
+	destoryCluster(t, es, hs)
 	afterTest(t)
 	afterTest(t)
 }
 }
 
 
@@ -324,12 +294,7 @@ func TestGetAdminMachinesEndPoint(t *testing.T) {
 		}
 		}
 	}
 	}
 
 
-	for i := range es {
-		es[len(es)-i-1].Stop()
-	}
-	for i := range hs {
-		hs[len(hs)-i-1].Close()
-	}
+	destoryCluster(t, es, hs)
 	afterTest(t)
 	afterTest(t)
 }
 }
 
 

+ 11 - 22
etcd/v2_http_kv_test.go

@@ -76,8 +76,7 @@ func TestV2Set(t *testing.T) {
 		}
 		}
 	}
 	}
 
 
-	es[0].Stop()
-	hs[0].Close()
+	destoryCluster(t, es, hs)
 	afterTest(t)
 	afterTest(t)
 }
 }
 
 
@@ -185,8 +184,7 @@ func TestV2CreateUpdate(t *testing.T) {
 		}
 		}
 	}
 	}
 
 
-	es[0].Stop()
-	hs[0].Close()
+	destoryCluster(t, es, hs)
 	afterTest(t)
 	afterTest(t)
 }
 }
 
 
@@ -314,8 +312,7 @@ func TestV2CAS(t *testing.T) {
 		}
 		}
 	}
 	}
 
 
-	es[0].Stop()
-	hs[0].Close()
+	destoryCluster(t, es, hs)
 	afterTest(t)
 	afterTest(t)
 }
 }
 
 
@@ -411,8 +408,7 @@ func TestV2Delete(t *testing.T) {
 		}
 		}
 	}
 	}
 
 
-	es[0].Stop()
-	hs[0].Close()
+	destoryCluster(t, es, hs)
 	afterTest(t)
 	afterTest(t)
 }
 }
 
 
@@ -510,8 +506,7 @@ func TestV2CAD(t *testing.T) {
 		}
 		}
 	}
 	}
 
 
-	es[0].Stop()
-	hs[0].Close()
+	destoryCluster(t, es, hs)
 	afterTest(t)
 	afterTest(t)
 }
 }
 
 
@@ -574,8 +569,7 @@ func TestV2Unique(t *testing.T) {
 		}
 		}
 	}
 	}
 
 
-	es[0].Stop()
-	hs[0].Close()
+	destoryCluster(t, es, hs)
 	afterTest(t)
 	afterTest(t)
 }
 }
 
 
@@ -669,8 +663,7 @@ func TestV2Get(t *testing.T) {
 		}
 		}
 	}
 	}
 
 
-	es[0].Stop()
-	hs[0].Close()
+	destoryCluster(t, es, hs)
 	afterTest(t)
 	afterTest(t)
 }
 }
 
 
@@ -715,8 +708,7 @@ func TestV2Watch(t *testing.T) {
 		t.Error(err)
 		t.Error(err)
 	}
 	}
 
 
-	es[0].Stop()
-	hs[0].Close()
+	destoryCluster(t, es, hs)
 	afterTest(t)
 	afterTest(t)
 }
 }
 
 
@@ -773,8 +765,7 @@ func TestV2WatchWithIndex(t *testing.T) {
 		t.Error(err)
 		t.Error(err)
 	}
 	}
 
 
-	es[0].Stop()
-	hs[0].Close()
+	destoryCluster(t, es, hs)
 	afterTest(t)
 	afterTest(t)
 }
 }
 
 
@@ -821,8 +812,7 @@ func TestV2WatchKeyInDir(t *testing.T) {
 		t.Error(err)
 		t.Error(err)
 	}
 	}
 
 
-	es[0].Stop()
-	hs[0].Close()
+	destoryCluster(t, es, hs)
 	afterTest(t)
 	afterTest(t)
 }
 }
 
 
@@ -855,8 +845,7 @@ func TestV2Head(t *testing.T) {
 		t.Errorf("ContentLength = %d, want -1", resp.ContentLength)
 		t.Errorf("ContentLength = %d, want -1", resp.ContentLength)
 	}
 	}
 
 
-	es[0].Stop()
-	hs[0].Close()
+	destoryCluster(t, es, hs)
 	afterTest(t)
 	afterTest(t)
 }
 }