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`.
This commit is contained in:
Ferenc Szabo 2019-03-18 13:17:49 +01:00
parent 54cd3e89a4
commit 729a6e59b1

View file

@ -33,44 +33,45 @@ type TestServer interface {
} }
func NewTestSwarmServer(t *testing.T, serverFunc func(*api.API) TestServer, resolver api.Resolver) *TestSwarmServer { 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 { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
storeparams := storage.NewDefaultLocalStoreParams()
storeparams.DbCapacity = 5000000 storeParams := storage.NewDefaultLocalStoreParams()
storeparams.CacheCapacity = 5000 storeParams.DbCapacity = 5000000
storeparams.Init(dir) storeParams.CacheCapacity = 5000
localStore, err := storage.NewLocalStore(storeparams, nil) storeParams.Init(swarmDir)
localStore, err := storage.NewLocalStore(storeParams, nil)
if err != nil { if err != nil {
os.RemoveAll(dir) os.RemoveAll(swarmDir)
t.Fatal(err) t.Fatal(err)
} }
fileStore := storage.NewFileStore(localStore, storage.NewFileStoreParams()) fileStore := storage.NewFileStore(localStore, storage.NewFileStoreParams())
// Swarm feeds test setup // Swarm feeds test setup
feedsDir, err := ioutil.TempDir("", "swarm-feeds-test") feedsDir, err := ioutil.TempDir("", "swarm-feeds-test")
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
rhparams := &feed.HandlerParams{} feeds, err := feed.NewTestHandler(feedsDir, &feed.HandlerParams{})
rh, err := feed.NewTestHandler(feedsDir, rhparams)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
a := api.NewAPI(fileStore, resolver, rh.Handler, nil) swarmApi := api.NewAPI(fileStore, resolver, feeds.Handler, nil)
srv := httptest.NewServer(serverFunc(a)) apiServer := httptest.NewServer(serverFunc(swarmApi))
tss := &TestSwarmServer{ tss := &TestSwarmServer{
Server: srv, Server: apiServer,
FileStore: fileStore, FileStore: fileStore,
dir: dir, dir: swarmDir,
Hasher: storage.MakeHashFunc(storage.DefaultHash)(), Hasher: storage.MakeHashFunc(storage.DefaultHash)(),
cleanup: func() { cleanup: func() {
srv.Close() apiServer.Close()
rh.Close() fileStore.Close()
os.RemoveAll(dir) feeds.Close()
os.RemoveAll(swarmDir)
os.RemoveAll(feedsDir) os.RemoveAll(feedsDir)
}, },
CurrentTime: 42, CurrentTime: 42,