github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/swarm/api/http/test_server.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 19:16:43</date> 10 //</624450112243896320> 11 12 13 package http 14 15 import ( 16 "io/ioutil" 17 "net/http" 18 "net/http/httptest" 19 "os" 20 "testing" 21 22 "github.com/ethereum/go-ethereum/swarm/api" 23 "github.com/ethereum/go-ethereum/swarm/storage" 24 "github.com/ethereum/go-ethereum/swarm/storage/feed" 25 ) 26 27 type TestServer interface { 28 ServeHTTP(http.ResponseWriter, *http.Request) 29 } 30 31 func NewTestSwarmServer(t *testing.T, serverFunc func(*api.API) TestServer, resolver api.Resolver) *TestSwarmServer { 32 dir, err := ioutil.TempDir("", "swarm-storage-test") 33 if err != nil { 34 t.Fatal(err) 35 } 36 storeparams := storage.NewDefaultLocalStoreParams() 37 storeparams.DbCapacity = 5000000 38 storeparams.CacheCapacity = 5000 39 storeparams.Init(dir) 40 localStore, err := storage.NewLocalStore(storeparams, nil) 41 if err != nil { 42 os.RemoveAll(dir) 43 t.Fatal(err) 44 } 45 fileStore := storage.NewFileStore(localStore, storage.NewFileStoreParams()) 46 47 //Swarm Feeds测试设置 48 feedsDir, err := ioutil.TempDir("", "swarm-feeds-test") 49 if err != nil { 50 t.Fatal(err) 51 } 52 53 rhparams := &feed.HandlerParams{} 54 rh, err := feed.NewTestHandler(feedsDir, rhparams) 55 if err != nil { 56 t.Fatal(err) 57 } 58 59 a := api.NewAPI(fileStore, resolver, rh.Handler, nil) 60 srv := httptest.NewServer(serverFunc(a)) 61 tss := &TestSwarmServer{ 62 Server: srv, 63 FileStore: fileStore, 64 dir: dir, 65 Hasher: storage.MakeHashFunc(storage.DefaultHash)(), 66 cleanup: func() { 67 srv.Close() 68 rh.Close() 69 os.RemoveAll(dir) 70 os.RemoveAll(feedsDir) 71 }, 72 CurrentTime: 42, 73 } 74 feed.TimestampProvider = tss 75 return tss 76 } 77 78 type TestSwarmServer struct { 79 *httptest.Server 80 Hasher storage.SwarmHash 81 FileStore *storage.FileStore 82 dir string 83 cleanup func() 84 CurrentTime uint64 85 } 86 87 func (t *TestSwarmServer) Close() { 88 t.cleanup() 89 } 90 91 func (t *TestSwarmServer) Now() feed.Timestamp { 92 return feed.Timestamp{Time: t.CurrentTime} 93 } 94