diff options
author | Ferenc Szabo <frncmx@gmail.com> | 2019-04-11 18:44:15 +0800 |
---|---|---|
committer | Viktor TrĂ³n <viktor.tron@gmail.com> | 2019-04-11 18:44:15 +0800 |
commit | 26b50e3ebe3be197c68763e71e41926ed7df0863 (patch) | |
tree | efe8e25640577328a87a6eafae7c68270f206fb5 /swarm | |
parent | 54dfce8af7aa0f4561cd1ede5ea820b15f235ab0 (diff) | |
download | go-tangerine-26b50e3ebe3be197c68763e71e41926ed7df0863.tar go-tangerine-26b50e3ebe3be197c68763e71e41926ed7df0863.tar.gz go-tangerine-26b50e3ebe3be197c68763e71e41926ed7df0863.tar.bz2 go-tangerine-26b50e3ebe3be197c68763e71e41926ed7df0863.tar.lz go-tangerine-26b50e3ebe3be197c68763e71e41926ed7df0863.tar.xz go-tangerine-26b50e3ebe3be197c68763e71e41926ed7df0863.tar.zst go-tangerine-26b50e3ebe3be197c68763e71e41926ed7df0863.zip |
cmd/swarm: fix resource leaks in tests (#19443)
* swarm/api: fix file descriptor leak in NewTestSwarmServer
Swarm storage (localstore) was not closed. That resulted a
"too many open files" error if `TestClientUploadDownloadRawEncrypted`
was run with `-count 1000`.
* cmd/swarm: speed up StartNewNodes() by parallelization
Reduce cluster startup time from 13s to 7s.
* swarm/api: disable flaky TestClientUploadDownloadRawEncrypted with -race
* swarm/storage: disable flaky TestLDBStoreCollectGarbage (-race)
With race detection turned on the disabled cases often fail with:
"ldbstore_test.go:535: expected surplus chunk 150 to be missing, but got no error"
* cmd/swarm: fix process leak in TestACT and TestSwarmUp
Each test run we start 3 nodes, but we did not terminate them. So
those 3 nodes continued eating up 1.2GB (3.4GB with -race) after test
completion.
6b6c4d1c2754f8dd70172ab58d7ee33cf9058c7d changed how we start clusters
to speed up tests. The changeset merged together test cases
and introduced a global cluster. But "forgot" about termination.
Let's get rid of "global cluster" so we have a clear owner of
termination (some time sacrifice), while leaving subtests to use the
same cluster.
Diffstat (limited to 'swarm')
-rw-r--r-- | swarm/api/client/client_test.go | 8 | ||||
-rw-r--r-- | swarm/api/http/test_server.go | 35 | ||||
-rw-r--r-- | swarm/storage/ldbstore_test.go | 8 |
3 files changed, 34 insertions, 17 deletions
diff --git a/swarm/api/client/client_test.go b/swarm/api/client/client_test.go index 39f6e4797..9c9bde5d6 100644 --- a/swarm/api/client/client_test.go +++ b/swarm/api/client/client_test.go @@ -25,6 +25,8 @@ import ( "sort" "testing" + "github.com/ethereum/go-ethereum/swarm/testutil" + "github.com/ethereum/go-ethereum/swarm/storage" "github.com/ethereum/go-ethereum/swarm/storage/feed/lookup" @@ -43,7 +45,13 @@ func serverFunc(api *api.API) swarmhttp.TestServer { func TestClientUploadDownloadRaw(t *testing.T) { testClientUploadDownloadRaw(false, t) } + func TestClientUploadDownloadRawEncrypted(t *testing.T) { + if testutil.RaceEnabled { + t.Skip("flaky with -race on Travis") + // See: https://github.com/ethersphere/go-ethereum/issues/1254 + } + testClientUploadDownloadRaw(true, t) } diff --git a/swarm/api/http/test_server.go b/swarm/api/http/test_server.go index 9245c9c5b..97fdf0d8a 100644 --- a/swarm/api/http/test_server.go +++ b/swarm/api/http/test_server.go @@ -33,44 +33,45 @@ type TestServer interface { } func NewTestSwarmServer(t *testing.T, serverFunc func(*api.API) TestServer, resolver api.Resolver) *TestSwarmServer { - dir, err := ioutil.TempDir("", "swarm-storage-test") + swarmDir, err := ioutil.TempDir("", "swarm-storage-test") if err != nil { t.Fatal(err) } - storeparams := storage.NewDefaultLocalStoreParams() - storeparams.DbCapacity = 5000000 - storeparams.CacheCapacity = 5000 - storeparams.Init(dir) - localStore, err := storage.NewLocalStore(storeparams, nil) + + storeParams := storage.NewDefaultLocalStoreParams() + storeParams.DbCapacity = 5000000 + storeParams.CacheCapacity = 5000 + storeParams.Init(swarmDir) + localStore, err := storage.NewLocalStore(storeParams, nil) if err != nil { - os.RemoveAll(dir) + os.RemoveAll(swarmDir) t.Fatal(err) } fileStore := storage.NewFileStore(localStore, storage.NewFileStoreParams()) - // Swarm feeds test setup feedsDir, err := ioutil.TempDir("", "swarm-feeds-test") if err != nil { t.Fatal(err) } - rhparams := &feed.HandlerParams{} - rh, err := feed.NewTestHandler(feedsDir, rhparams) + feeds, err := feed.NewTestHandler(feedsDir, &feed.HandlerParams{}) if err != nil { t.Fatal(err) } - a := api.NewAPI(fileStore, resolver, rh.Handler, nil) - srv := httptest.NewServer(serverFunc(a)) + swarmApi := api.NewAPI(fileStore, resolver, feeds.Handler, nil) + apiServer := httptest.NewServer(serverFunc(swarmApi)) + tss := &TestSwarmServer{ - Server: srv, + Server: apiServer, FileStore: fileStore, - dir: dir, + dir: swarmDir, Hasher: storage.MakeHashFunc(storage.DefaultHash)(), cleanup: func() { - srv.Close() - rh.Close() - os.RemoveAll(dir) + apiServer.Close() + fileStore.Close() + feeds.Close() + os.RemoveAll(swarmDir) os.RemoveAll(feedsDir) }, CurrentTime: 42, diff --git a/swarm/storage/ldbstore_test.go b/swarm/storage/ldbstore_test.go index d17bd7d0e..70b0d6bb4 100644 --- a/swarm/storage/ldbstore_test.go +++ b/swarm/storage/ldbstore_test.go @@ -27,6 +27,8 @@ import ( "strings" "testing" + "github.com/ethereum/go-ethereum/swarm/testutil" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/swarm/chunk" "github.com/ethereum/go-ethereum/swarm/log" @@ -322,6 +324,12 @@ func TestLDBStoreCollectGarbage(t *testing.T) { initialCap := defaultMaxGCRound / 100 cap := initialCap / 2 t.Run(fmt.Sprintf("A/%d/%d", cap, cap*4), testLDBStoreCollectGarbage) + + if testutil.RaceEnabled { + t.Skip("only the simplest case run as others are flaky with race") + // Note: some tests fail consistently and even locally with `-race` + } + t.Run(fmt.Sprintf("B/%d/%d", cap, cap*4), testLDBStoreRemoveThenCollectGarbage) // at max round |