From 653a63fa00a21a77a504a7f8392c07f94c8332fc Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Mon, 28 Jul 2014 15:01:09 -0700 Subject: [PATCH] etcd: add destoryCluster for testing --- etcd/etcd_functional_test.go | 35 +++--------------- etcd/etcd_start_test.go | 51 ++++++++++---------------- etcd/etcd_test.go | 68 ++++++++++++++++------------------- etcd/v2_http_endpoint_test.go | 49 ++++--------------------- etcd/v2_http_kv_test.go | 33 ++++++----------- 5 files changed, 72 insertions(+), 164 deletions(-) diff --git a/etcd/etcd_functional_test.go b/etcd/etcd_functional_test.go index 196139ff0..776aa44ec 100644 --- a/etcd/etcd_functional_test.go +++ b/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()) } - 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) } @@ -74,12 +69,7 @@ func TestRandomKill(t *testing.T) { 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) } @@ -106,12 +96,7 @@ func TestJoinThroughFollower(t *testing.T) { } 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) } @@ -127,12 +112,7 @@ func BenchmarkEndToEndSet(b *testing.B) { } } 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 @@ -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) } diff --git a/etcd/etcd_start_test.go b/etcd/etcd_start_test.go index 2b4464025..508238258 100644 --- a/etcd/etcd_start_test.go +++ b/etcd/etcd_start_test.go @@ -57,7 +57,7 @@ func TestBadDiscoveryService(t *testing.T) { c := config.New() c.Discovery = ts.URL + "/v2/keys/_etcd/registry/1" - _, _, err := buildServer(c, bootstrapId) + _, _, err := buildServer(t, c, bootstrapId) w := `discovery service error` if err == nil || !strings.HasPrefix(err.Error(), w) { t.Errorf("err = %v, want %s prefix", err, w) @@ -82,18 +82,13 @@ func TestBadDiscoveryServiceWithAdvisedPeers(t *testing.T) { c := config.New() c.Discovery = ts.URL + "/v2/keys/_etcd/registry/1" c.Peers = []string{hs[0].URL} - _, _, err := buildServer(c, bootstrapId) + _, _, err := buildServer(t, c, bootstrapId) w := `discovery service error` if err == nil || !strings.HasPrefix(err.Error(), 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() afterTest(t) } @@ -101,7 +96,7 @@ func TestBadDiscoveryServiceWithAdvisedPeers(t *testing.T) { func TestBootstrapByEmptyPeers(t *testing.T) { c := config.New() id := genId() - e, h, err := buildServer(c, id) + e, h, err := buildServer(t, c, id) if err != nil { t.Error(err) @@ -109,22 +104,22 @@ func TestBootstrapByEmptyPeers(t *testing.T) { if 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) } func TestBootstrapByDiscoveryService(t *testing.T) { - de, dh, _ := buildServer(config.New(), genId()) + de, dh, _ := buildServer(t, config.New(), genId()) c := config.New() 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 { 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) } @@ -134,7 +129,7 @@ func TestRunByAdvisedPeers(t *testing.T) { c := config.New() c.Peers = []string{hs[0].URL} - e, h, err := buildServer(c, bootstrapId) + e, h, err := buildServer(t, c, bootstrapId) if err != nil { 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) } - 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) } func TestRunByDiscoveryService(t *testing.T) { - de, dh, _ := buildServer(config.New(), genId()) + de, dh, _ := buildServer(t, config.New(), genId()) tc := NewTestClient() v := url.Values{} @@ -174,7 +164,7 @@ func TestRunByDiscoveryService(t *testing.T) { c := config.New() 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 { 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) } - destroyServer(e, h) - destroyServer(de, dh) + destroyServer(t, e, h) + destroyServer(t, de, dh) 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) go func() { err = e.Run() }() for { @@ -196,15 +186,10 @@ func buildServer(c *config.Config, id int64) (e *Server, h *httptest.Server, err break } if err != nil { - destroyServer(e, h) + destroyServer(t, e, h) return nil, nil, err } time.Sleep(10 * time.Millisecond) } return e, h, nil } - -func destroyServer(e *Server, h *httptest.Server) { - e.Stop() - h.Close() -} diff --git a/etcd/etcd_test.go b/etcd/etcd_test.go index 06fb2f495..31d36e92a 100644 --- a/etcd/etcd_test.go +++ b/etcd/etcd_test.go @@ -37,12 +37,7 @@ func TestMultipleNodes(t *testing.T) { for _, tt := range tests { es, hs := buildCluster(tt, false) 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) } @@ -53,12 +48,7 @@ func TestMultipleTLSNodes(t *testing.T) { for _, tt := range tests { es, hs := buildCluster(tt, true) 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) } @@ -86,12 +76,7 @@ func TestV2Redirect(t *testing.T) { } 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) } @@ -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) } @@ -210,12 +190,7 @@ func TestRemove(t *testing.T) { 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) // 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) } - 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) } @@ -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) { c.DataDir = fmt.Sprintf("tests/etcd_%d", id) - os.RemoveAll(c.DataDir) e, err := New(c) if err != nil { @@ -397,6 +366,31 @@ func initTestServer(c *config.Config, id int64, tls bool) (e *Server, h *httptes 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) { n := len(es) for _, e := range es { diff --git a/etcd/v2_http_endpoint_test.go b/etcd/v2_http_endpoint_test.go index e13ca5235..690a3712f 100644 --- a/etcd/v2_http_endpoint_test.go +++ b/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) } @@ -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) } @@ -125,12 +115,7 @@ func TestStoreStatsEndPoint(t *testing.T) { 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) } @@ -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) } @@ -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) } @@ -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) } @@ -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) } diff --git a/etcd/v2_http_kv_test.go b/etcd/v2_http_kv_test.go index 67c8f6d42..a098ba419 100644 --- a/etcd/v2_http_kv_test.go +++ b/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) } @@ -185,8 +184,7 @@ func TestV2CreateUpdate(t *testing.T) { } } - es[0].Stop() - hs[0].Close() + destoryCluster(t, es, hs) afterTest(t) } @@ -314,8 +312,7 @@ func TestV2CAS(t *testing.T) { } } - es[0].Stop() - hs[0].Close() + destoryCluster(t, es, hs) afterTest(t) } @@ -411,8 +408,7 @@ func TestV2Delete(t *testing.T) { } } - es[0].Stop() - hs[0].Close() + destoryCluster(t, es, hs) afterTest(t) } @@ -510,8 +506,7 @@ func TestV2CAD(t *testing.T) { } } - es[0].Stop() - hs[0].Close() + destoryCluster(t, es, hs) afterTest(t) } @@ -574,8 +569,7 @@ func TestV2Unique(t *testing.T) { } } - es[0].Stop() - hs[0].Close() + destoryCluster(t, es, hs) afterTest(t) } @@ -669,8 +663,7 @@ func TestV2Get(t *testing.T) { } } - es[0].Stop() - hs[0].Close() + destoryCluster(t, es, hs) afterTest(t) } @@ -715,8 +708,7 @@ func TestV2Watch(t *testing.T) { t.Error(err) } - es[0].Stop() - hs[0].Close() + destoryCluster(t, es, hs) afterTest(t) } @@ -773,8 +765,7 @@ func TestV2WatchWithIndex(t *testing.T) { t.Error(err) } - es[0].Stop() - hs[0].Close() + destoryCluster(t, es, hs) afterTest(t) } @@ -821,8 +812,7 @@ func TestV2WatchKeyInDir(t *testing.T) { t.Error(err) } - es[0].Stop() - hs[0].Close() + destoryCluster(t, es, hs) afterTest(t) } @@ -855,8 +845,7 @@ func TestV2Head(t *testing.T) { t.Errorf("ContentLength = %d, want -1", resp.ContentLength) } - es[0].Stop() - hs[0].Close() + destoryCluster(t, es, hs) afterTest(t) }