d5df1212c2
It will be important for proper subscription testing and it doesn't hurt even though technically we've got two http servers listening after this change (one is a regular Server's http.Server and one is httptest's Server). Reusing rpc.Server would be nice, but it requires some changes to Start sequence to start Listener with net.Listen and then communicate back its resulting Addr. It's not very convenient especially given that no other code needs it, so doing these changes just for a bit cleaner testing seems like and overkill. Update config appropriately. Update Start comment along the way.
84 lines
2.3 KiB
Go
84 lines
2.3 KiB
Go
package server
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/nspcc-dev/neo-go/pkg/config"
|
|
"github.com/nspcc-dev/neo-go/pkg/core"
|
|
"github.com/nspcc-dev/neo-go/pkg/core/block"
|
|
"github.com/nspcc-dev/neo-go/pkg/core/storage"
|
|
"github.com/nspcc-dev/neo-go/pkg/core/transaction"
|
|
"github.com/nspcc-dev/neo-go/pkg/io"
|
|
"github.com/nspcc-dev/neo-go/pkg/network"
|
|
"github.com/nspcc-dev/neo-go/pkg/util"
|
|
"github.com/stretchr/testify/require"
|
|
"go.uber.org/zap/zaptest"
|
|
)
|
|
|
|
func initServerWithInMemoryChain(t *testing.T) (*core.Blockchain, *Server, *httptest.Server) {
|
|
var nBlocks uint32
|
|
|
|
net := config.ModeUnitTestNet
|
|
configPath := "../../../config"
|
|
cfg, err := config.Load(configPath, net)
|
|
require.NoError(t, err, "could not load config")
|
|
|
|
memoryStore := storage.NewMemoryStore()
|
|
logger := zaptest.NewLogger(t)
|
|
chain, err := core.NewBlockchain(memoryStore, cfg.ProtocolConfiguration, logger)
|
|
require.NoError(t, err, "could not create chain")
|
|
|
|
go chain.Run()
|
|
|
|
// File "./testdata/testblocks.acc" was generated by function core._
|
|
// ("neo-go/pkg/core/helper_test.go").
|
|
// To generate new "./testdata/testblocks.acc", follow the steps:
|
|
// 1. Rename the function
|
|
// 2. Add specific test-case into "neo-go/pkg/core/blockchain_test.go"
|
|
// 3. Run tests with `$ make test`
|
|
f, err := os.Open("testdata/testblocks.acc")
|
|
require.Nil(t, err)
|
|
br := io.NewBinReaderFromIO(f)
|
|
nBlocks = br.ReadU32LE()
|
|
require.Nil(t, br.Err)
|
|
for i := 0; i < int(nBlocks); i++ {
|
|
_ = br.ReadU32LE()
|
|
b := &block.Block{}
|
|
b.DecodeBinary(br)
|
|
require.Nil(t, br.Err)
|
|
require.NoError(t, chain.AddBlock(b))
|
|
}
|
|
|
|
serverConfig := network.NewServerConfig(cfg)
|
|
server, err := network.NewServer(serverConfig, chain, logger)
|
|
require.NoError(t, err)
|
|
rpcServer := New(chain, cfg.ApplicationConfiguration.RPC, server, logger)
|
|
errCh := make(chan error, 2)
|
|
go rpcServer.Start(errCh)
|
|
|
|
handler := http.HandlerFunc(rpcServer.handleHTTPRequest)
|
|
srv := httptest.NewServer(handler)
|
|
|
|
return chain, &rpcServer, srv
|
|
}
|
|
|
|
type FeerStub struct{}
|
|
|
|
func (fs *FeerStub) NetworkFee(*transaction.Transaction) util.Fixed8 {
|
|
return 0
|
|
}
|
|
|
|
func (fs *FeerStub) IsLowPriority(util.Fixed8) bool {
|
|
return false
|
|
}
|
|
|
|
func (fs *FeerStub) FeePerByte(*transaction.Transaction) util.Fixed8 {
|
|
return 0
|
|
}
|
|
|
|
func (fs *FeerStub) SystemFee(*transaction.Transaction) util.Fixed8 {
|
|
return 0
|
|
}
|