github.com/linapex/ethereum-dpos-chinese@v0.0.0-20190316121959-b78b3a4a1ece/swarm/testutil/http.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 12:09:50</date> 10 //</624342684806418432> 11 12 // 13 // 14 // 15 // 16 // 17 // 18 // 19 // 20 // 21 // 22 // 23 // 24 // 25 // 26 // 27 28 package testutil 29 30 import ( 31 "io/ioutil" 32 "net/http" 33 "net/http/httptest" 34 "os" 35 "testing" 36 37 "github.com/ethereum/go-ethereum/swarm/api" 38 "github.com/ethereum/go-ethereum/swarm/storage" 39 "github.com/ethereum/go-ethereum/swarm/storage/mru" 40 ) 41 42 type TestServer interface { 43 ServeHTTP(http.ResponseWriter, *http.Request) 44 } 45 46 // 47 type fakeTimeProvider struct { 48 currentTime uint64 49 } 50 51 func (f *fakeTimeProvider) Tick() { 52 f.currentTime++ 53 } 54 55 func (f *fakeTimeProvider) Now() mru.Timestamp { 56 return mru.Timestamp{Time: f.currentTime} 57 } 58 59 func NewTestSwarmServer(t *testing.T, serverFunc func(*api.API) TestServer) *TestSwarmServer { 60 dir, err := ioutil.TempDir("", "swarm-storage-test") 61 if err != nil { 62 t.Fatal(err) 63 } 64 storeparams := storage.NewDefaultLocalStoreParams() 65 storeparams.DbCapacity = 5000000 66 storeparams.CacheCapacity = 5000 67 storeparams.Init(dir) 68 localStore, err := storage.NewLocalStore(storeparams, nil) 69 if err != nil { 70 os.RemoveAll(dir) 71 t.Fatal(err) 72 } 73 fileStore := storage.NewFileStore(localStore, storage.NewFileStoreParams()) 74 75 // 76 resourceDir, err := ioutil.TempDir("", "swarm-resource-test") 77 if err != nil { 78 t.Fatal(err) 79 } 80 81 fakeTimeProvider := &fakeTimeProvider{ 82 currentTime: 42, 83 } 84 mru.TimestampProvider = fakeTimeProvider 85 rhparams := &mru.HandlerParams{} 86 rh, err := mru.NewTestHandler(resourceDir, rhparams) 87 if err != nil { 88 t.Fatal(err) 89 } 90 91 a := api.NewAPI(fileStore, nil, rh.Handler, nil) 92 srv := httptest.NewServer(serverFunc(a)) 93 return &TestSwarmServer{ 94 Server: srv, 95 FileStore: fileStore, 96 dir: dir, 97 Hasher: storage.MakeHashFunc(storage.DefaultHash)(), 98 timestampProvider: fakeTimeProvider, 99 cleanup: func() { 100 srv.Close() 101 rh.Close() 102 os.RemoveAll(dir) 103 os.RemoveAll(resourceDir) 104 }, 105 } 106 } 107 108 type TestSwarmServer struct { 109 *httptest.Server 110 Hasher storage.SwarmHash 111 FileStore *storage.FileStore 112 dir string 113 cleanup func() 114 timestampProvider *fakeTimeProvider 115 } 116 117 func (t *TestSwarmServer) Close() { 118 t.cleanup() 119 } 120 121 func (t *TestSwarmServer) GetCurrentTime() mru.Timestamp { 122 return t.timestampProvider.Now() 123 } 124