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