github.com/yinchengtsinghua/golang-Eos-dpos-Ethereum@v0.0.0-20190121132951-92cc4225ed8e/swarm/testutil/http.go (about) 1 2 //此源码被清华学神尹成大魔王专业翻译分析并修改 3 //尹成QQ77025077 4 //尹成微信18510341407 5 //尹成所在QQ群721929980 6 //尹成邮箱 yinc13@mails.tsinghua.edu.cn 7 //尹成毕业于清华大学,微软区块链领域全球最有价值专家 8 //https://mvp.microsoft.com/zh-cn/PublicProfile/4033620 9 // 10 // 11 // 12 // 13 // 14 // 15 // 16 // 17 // 18 // 19 // 20 // 21 // 22 // 23 // 24 25 package testutil 26 27 import ( 28 "io/ioutil" 29 "net/http" 30 "net/http/httptest" 31 "os" 32 "testing" 33 34 "github.com/ethereum/go-ethereum/swarm/api" 35 "github.com/ethereum/go-ethereum/swarm/storage" 36 "github.com/ethereum/go-ethereum/swarm/storage/mru" 37 ) 38 39 type TestServer interface { 40 ServeHTTP(http.ResponseWriter, *http.Request) 41 } 42 43 // 44 type fakeTimeProvider struct { 45 currentTime uint64 46 } 47 48 func (f *fakeTimeProvider) Tick() { 49 f.currentTime++ 50 } 51 52 func (f *fakeTimeProvider) Now() mru.Timestamp { 53 return mru.Timestamp{Time: f.currentTime} 54 } 55 56 func NewTestSwarmServer(t *testing.T, serverFunc func(*api.API) TestServer) *TestSwarmServer { 57 dir, err := ioutil.TempDir("", "swarm-storage-test") 58 if err != nil { 59 t.Fatal(err) 60 } 61 storeparams := storage.NewDefaultLocalStoreParams() 62 storeparams.DbCapacity = 5000000 63 storeparams.CacheCapacity = 5000 64 storeparams.Init(dir) 65 localStore, err := storage.NewLocalStore(storeparams, nil) 66 if err != nil { 67 os.RemoveAll(dir) 68 t.Fatal(err) 69 } 70 fileStore := storage.NewFileStore(localStore, storage.NewFileStoreParams()) 71 72 // 73 resourceDir, err := ioutil.TempDir("", "swarm-resource-test") 74 if err != nil { 75 t.Fatal(err) 76 } 77 78 fakeTimeProvider := &fakeTimeProvider{ 79 currentTime: 42, 80 } 81 mru.TimestampProvider = fakeTimeProvider 82 rhparams := &mru.HandlerParams{} 83 rh, err := mru.NewTestHandler(resourceDir, rhparams) 84 if err != nil { 85 t.Fatal(err) 86 } 87 88 a := api.NewAPI(fileStore, nil, rh.Handler, nil) 89 srv := httptest.NewServer(serverFunc(a)) 90 return &TestSwarmServer{ 91 Server: srv, 92 FileStore: fileStore, 93 dir: dir, 94 Hasher: storage.MakeHashFunc(storage.DefaultHash)(), 95 timestampProvider: fakeTimeProvider, 96 cleanup: func() { 97 srv.Close() 98 rh.Close() 99 os.RemoveAll(dir) 100 os.RemoveAll(resourceDir) 101 }, 102 } 103 } 104 105 type TestSwarmServer struct { 106 *httptest.Server 107 Hasher storage.SwarmHash 108 FileStore *storage.FileStore 109 dir string 110 cleanup func() 111 timestampProvider *fakeTimeProvider 112 } 113 114 func (t *TestSwarmServer) Close() { 115 t.cleanup() 116 } 117 118 func (t *TestSwarmServer) GetCurrentTime() mru.Timestamp { 119 return t.timestampProvider.Now() 120 }