Merge pull request #3335 from nspcc-dev/TestFailedPreconditionShutdown

rpcsrv: fix TestFailedPreconditionShutdown shutdown
This commit is contained in:
Roman Khimov 2024-03-06 10:24:30 +03:00 committed by GitHub
commit 025bf228a2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 52 additions and 157 deletions

View file

@ -172,6 +172,7 @@ func TestWSClientEvents(t *testing.T) {
return return
} }
})) }))
t.Cleanup(srv.Close)
wsc, err := NewWS(context.TODO(), httpURLtoWS(srv.URL), WSOptions{}) wsc, err := NewWS(context.TODO(), httpURLtoWS(srv.URL), WSOptions{})
require.NoError(t, err) require.NoError(t, err)
wsc.getNextRequestID = getTestRequestID wsc.getNextRequestID = getTestRequestID
@ -314,6 +315,7 @@ func TestWSClientNonBlockingEvents(t *testing.T) {
return return
} }
})) }))
t.Cleanup(srv.Close)
wsc, err := NewWS(context.TODO(), httpURLtoWS(srv.URL), WSOptions{CloseNotificationChannelIfFull: true}) wsc, err := NewWS(context.TODO(), httpURLtoWS(srv.URL), WSOptions{CloseNotificationChannelIfFull: true})
require.NoError(t, err) require.NoError(t, err)
wsc.getNextRequestID = getTestRequestID wsc.getNextRequestID = getTestRequestID
@ -744,6 +746,7 @@ func TestWSFilteredSubscriptions(t *testing.T) {
ws.Close() ws.Close()
} }
})) }))
t.Cleanup(srv.Close)
wsc, err := NewWS(context.TODO(), httpURLtoWS(srv.URL), WSOptions{}) wsc, err := NewWS(context.TODO(), httpURLtoWS(srv.URL), WSOptions{})
require.NoError(t, err) require.NoError(t, err)
wsc.getNextRequestID = getTestRequestID wsc.getNextRequestID = getTestRequestID

View file

@ -65,9 +65,7 @@ import (
) )
func TestClient_NEP17(t *testing.T) { func TestClient_NEP17(t *testing.T) {
chain, rpcSrv, httpSrv := initServerWithInMemoryChain(t) _, _, httpSrv := initServerWithInMemoryChain(t)
defer chain.Close()
defer rpcSrv.Shutdown()
c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{}) c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{})
require.NoError(t, err) require.NoError(t, err)
@ -109,9 +107,7 @@ func TestClient_NEP17(t *testing.T) {
} }
func TestClientRoleManagement(t *testing.T) { func TestClientRoleManagement(t *testing.T) {
chain, rpcSrv, httpSrv := initServerWithInMemoryChain(t) chain, _, httpSrv := initServerWithInMemoryChain(t)
defer chain.Close()
defer rpcSrv.Shutdown()
c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{}) c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{})
require.NoError(t, err) require.NoError(t, err)
@ -161,9 +157,7 @@ func TestClientRoleManagement(t *testing.T) {
} }
func TestClientPolicyContract(t *testing.T) { func TestClientPolicyContract(t *testing.T) {
chain, rpcSrv, httpSrv := initServerWithInMemoryChain(t) chain, _, httpSrv := initServerWithInMemoryChain(t)
defer chain.Close()
defer rpcSrv.Shutdown()
c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{}) c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{})
require.NoError(t, err) require.NoError(t, err)
@ -252,9 +246,7 @@ func TestClientPolicyContract(t *testing.T) {
} }
func TestClientManagementContract(t *testing.T) { func TestClientManagementContract(t *testing.T) {
chain, rpcSrv, httpSrv := initServerWithInMemoryChain(t) chain, _, httpSrv := initServerWithInMemoryChain(t)
defer chain.Close()
defer rpcSrv.Shutdown()
c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{}) c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{})
require.NoError(t, err) require.NoError(t, err)
@ -338,9 +330,7 @@ func TestClientManagementContract(t *testing.T) {
} }
func TestClientNEOContract(t *testing.T) { func TestClientNEOContract(t *testing.T) {
chain, rpcSrv, httpSrv := initServerWithInMemoryChain(t) chain, _, httpSrv := initServerWithInMemoryChain(t)
defer chain.Close()
defer rpcSrv.Shutdown()
c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{}) c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{})
require.NoError(t, err) require.NoError(t, err)
@ -467,9 +457,7 @@ func TestClientNEOContract(t *testing.T) {
} }
func TestClientNotary(t *testing.T) { func TestClientNotary(t *testing.T) {
chain, rpcSrv, httpSrv := initServerWithInMemoryChain(t) chain, _, httpSrv := initServerWithInMemoryChain(t)
defer chain.Close()
defer rpcSrv.Shutdown()
c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{}) c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{})
require.NoError(t, err) require.NoError(t, err)
@ -544,9 +532,7 @@ func TestClientNotary(t *testing.T) {
} }
func TestCalculateNetworkFee_Base(t *testing.T) { func TestCalculateNetworkFee_Base(t *testing.T) {
chain, rpcSrv, httpSrv := initServerWithInMemoryChain(t) chain, _, httpSrv := initServerWithInMemoryChain(t)
defer chain.Close()
defer rpcSrv.Shutdown()
const extraFee = 10 const extraFee = 10
var nonce uint32 var nonce uint32
@ -734,9 +720,7 @@ func TestCalculateNetworkFee_Base(t *testing.T) {
} }
func TestCalculateNetworkFee(t *testing.T) { func TestCalculateNetworkFee(t *testing.T) {
chain, rpcSrv, httpSrv := initServerWithInMemoryChain(t) chain, _, httpSrv := initServerWithInMemoryChain(t)
defer chain.Close()
defer rpcSrv.Shutdown()
const extraFee = 10 const extraFee = 10
c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{}) c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{})
@ -862,9 +846,7 @@ func TestCalculateNetworkFee(t *testing.T) {
} }
func TestNotaryActor(t *testing.T) { func TestNotaryActor(t *testing.T) {
chain, rpcSrv, httpSrv := initServerWithInMemoryChainAndServices(t, false, true, false) _, _, httpSrv := initServerWithInMemoryChainAndServices(t, false, true, false)
defer chain.Close()
defer rpcSrv.Shutdown()
c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{}) c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{})
require.NoError(t, err) require.NoError(t, err)
@ -898,9 +880,7 @@ func TestGetRawNotaryPoolAndTransaction(t *testing.T) {
tx1, tx2 *transaction.Transaction tx1, tx2 *transaction.Transaction
) )
chain, rpcSrv, httpSrv := initServerWithInMemoryChainAndServices(t, false, true, false) _, _, httpSrv := initServerWithInMemoryChainAndServices(t, false, true, false)
defer chain.Close()
defer rpcSrv.Shutdown()
c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{}) c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{})
require.NoError(t, err) require.NoError(t, err)
@ -1024,8 +1004,7 @@ func TestGetRawNotaryPoolAndTransaction(t *testing.T) {
} }
func TestPing(t *testing.T) { func TestPing(t *testing.T) {
chain, rpcSrv, httpSrv := initServerWithInMemoryChain(t) _, rpcSrv, httpSrv := initServerWithInMemoryChain(t)
defer chain.Close()
c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{}) c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{})
require.NoError(t, err) require.NoError(t, err)
@ -1038,9 +1017,7 @@ func TestPing(t *testing.T) {
} }
func TestCreateNEP17TransferTx(t *testing.T) { func TestCreateNEP17TransferTx(t *testing.T) {
chain, rpcSrv, httpSrv := initServerWithInMemoryChain(t) chain, _, httpSrv := initServerWithInMemoryChain(t)
defer chain.Close()
defer rpcSrv.Shutdown()
c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{}) c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{})
require.NoError(t, err) require.NoError(t, err)
@ -1115,9 +1092,7 @@ func TestCreateNEP17TransferTx(t *testing.T) {
} }
func TestInvokeVerify(t *testing.T) { func TestInvokeVerify(t *testing.T) {
chain, rpcSrv, httpSrv := initServerWithInMemoryChain(t) chain, _, httpSrv := initServerWithInMemoryChain(t)
defer chain.Close()
defer rpcSrv.Shutdown()
c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{}) c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{})
require.NoError(t, err) require.NoError(t, err)
@ -1207,9 +1182,7 @@ func TestInvokeVerify(t *testing.T) {
} }
func TestClient_GetNativeContracts(t *testing.T) { func TestClient_GetNativeContracts(t *testing.T) {
chain, rpcSrv, httpSrv := initServerWithInMemoryChain(t) chain, _, httpSrv := initServerWithInMemoryChain(t)
defer chain.Close()
defer rpcSrv.Shutdown()
c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{}) c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{})
require.NoError(t, err) require.NoError(t, err)
@ -1221,9 +1194,7 @@ func TestClient_GetNativeContracts(t *testing.T) {
} }
func TestClient_NEP11_ND(t *testing.T) { func TestClient_NEP11_ND(t *testing.T) {
chain, rpcSrv, httpSrv := initServerWithInMemoryChain(t) chain, _, httpSrv := initServerWithInMemoryChain(t)
defer chain.Close()
defer rpcSrv.Shutdown()
c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{}) c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{})
require.NoError(t, err) require.NoError(t, err)
@ -1306,9 +1277,7 @@ func TestClient_NEP11_ND(t *testing.T) {
} }
func TestClient_NEP11_D(t *testing.T) { func TestClient_NEP11_D(t *testing.T) {
chain, rpcSrv, httpSrv := initServerWithInMemoryChain(t) _, _, httpSrv := initServerWithInMemoryChain(t)
defer chain.Close()
defer rpcSrv.Shutdown()
c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{}) c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{})
require.NoError(t, err) require.NoError(t, err)
@ -1390,9 +1359,7 @@ func TestClient_NEP11_D(t *testing.T) {
} }
func TestClient_NNS(t *testing.T) { func TestClient_NNS(t *testing.T) {
chain, rpcSrv, httpSrv := initServerWithInMemoryChain(t) _, _, httpSrv := initServerWithInMemoryChain(t)
defer chain.Close()
defer rpcSrv.Shutdown()
c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{}) c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{})
require.NoError(t, err) require.NoError(t, err)
@ -1456,9 +1423,7 @@ func TestClient_NNS(t *testing.T) {
} }
func TestClient_IteratorSessions(t *testing.T) { func TestClient_IteratorSessions(t *testing.T) {
chain, rpcSrv, httpSrv := initServerWithInMemoryChain(t) _, rpcSrv, httpSrv := initServerWithInMemoryChain(t)
defer chain.Close()
defer rpcSrv.Shutdown()
c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{}) c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{})
require.NoError(t, err) require.NoError(t, err)
@ -1600,9 +1565,7 @@ func TestClient_IteratorSessions(t *testing.T) {
} }
func TestClient_States(t *testing.T) { func TestClient_States(t *testing.T) {
chain, rpcSrv, httpSrv := initServerWithInMemoryChain(t) chain, _, httpSrv := initServerWithInMemoryChain(t)
defer chain.Close()
defer rpcSrv.Shutdown()
c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{}) c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{})
require.NoError(t, err) require.NoError(t, err)
@ -1627,9 +1590,7 @@ func TestClient_States(t *testing.T) {
} }
func TestClientOracle(t *testing.T) { func TestClientOracle(t *testing.T) {
chain, rpcSrv, httpSrv := initServerWithInMemoryChain(t) chain, _, httpSrv := initServerWithInMemoryChain(t)
defer chain.Close()
defer rpcSrv.Shutdown()
c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{}) c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{})
require.NoError(t, err) require.NoError(t, err)
@ -1700,9 +1661,8 @@ func TestClient_Iterator_SessionConfigVariations(t *testing.T) {
} }
} }
t.Run("default sessions enabled", func(t *testing.T) { t.Run("default sessions enabled", func(t *testing.T) {
chain, rpcSrv, httpSrv := initClearServerWithServices(t, false, false, false) chain, _, httpSrv := initClearServerWithServices(t, false, false, false)
defer chain.Close()
defer rpcSrv.Shutdown()
for _, b := range getTestBlocks(t) { for _, b := range getTestBlocks(t) {
require.NoError(t, chain.AddBlock(b)) require.NoError(t, chain.AddBlock(b))
} }
@ -1741,7 +1701,7 @@ func TestClient_Iterator_SessionConfigVariations(t *testing.T) {
rpcSrv.Start() rpcSrv.Start()
handler := http.HandlerFunc(rpcSrv.handleHTTPRequest) handler := http.HandlerFunc(rpcSrv.handleHTTPRequest)
httpSrv := httptest.NewServer(handler) httpSrv := httptest.NewServer(handler)
defer chain.Close() t.Cleanup(httpSrv.Close)
defer rpcSrv.Shutdown() defer rpcSrv.Shutdown()
for _, b := range getTestBlocks(t) { for _, b := range getTestBlocks(t) {
require.NoError(t, chain.AddBlock(b)) require.NoError(t, chain.AddBlock(b))
@ -1755,8 +1715,7 @@ func TestClient_Iterator_SessionConfigVariations(t *testing.T) {
}) })
t.Run("sessions disabled", func(t *testing.T) { t.Run("sessions disabled", func(t *testing.T) {
chain, rpcSrv, httpSrv := initClearServerWithServices(t, false, false, true) chain, rpcSrv, httpSrv := initClearServerWithServices(t, false, false, true)
defer chain.Close()
defer rpcSrv.Shutdown()
for _, b := range getTestBlocks(t) { for _, b := range getTestBlocks(t) {
require.NoError(t, chain.AddBlock(b)) require.NoError(t, chain.AddBlock(b))
} }
@ -1785,9 +1744,7 @@ func TestClient_Iterator_SessionConfigVariations(t *testing.T) {
} }
func TestClient_Wait(t *testing.T) { func TestClient_Wait(t *testing.T) {
chain, rpcSrv, httpSrv := initServerWithInMemoryChain(t) chain, _, httpSrv := initServerWithInMemoryChain(t)
defer chain.Close()
defer rpcSrv.Shutdown()
run := func(t *testing.T, ws bool) { run := func(t *testing.T, ws bool) {
acc, err := wallet.NewAccount() acc, err := wallet.NewAccount()
@ -1904,8 +1861,6 @@ func TestSubClientWait(t *testing.T) {
func testSubClientWait(t *testing.T, local bool) { func testSubClientWait(t *testing.T, local bool) {
chain, rpcSrv, httpSrv := initClearServerWithServices(t, false, false, true) chain, rpcSrv, httpSrv := initClearServerWithServices(t, false, false, true)
defer chain.Close()
defer rpcSrv.Shutdown()
c := mkSubsClient(t, rpcSrv, httpSrv, local) c := mkSubsClient(t, rpcSrv, httpSrv, local)
acc, err := wallet.NewAccount() acc, err := wallet.NewAccount()
@ -2007,8 +1962,6 @@ func TestSubClientWaitWithLateSubscription(t *testing.T) {
func testSubClientWaitWithLateSubscription(t *testing.T, local bool) { func testSubClientWaitWithLateSubscription(t *testing.T, local bool) {
chain, rpcSrv, httpSrv := initClearServerWithServices(t, false, false, true) chain, rpcSrv, httpSrv := initClearServerWithServices(t, false, false, true)
defer chain.Close()
defer rpcSrv.Shutdown()
c := mkSubsClient(t, rpcSrv, httpSrv, local) c := mkSubsClient(t, rpcSrv, httpSrv, local)
acc, err := wallet.NewAccount() acc, err := wallet.NewAccount()
@ -2038,11 +1991,9 @@ func testSubClientWaitWithLateSubscription(t *testing.T, local bool) {
} }
func TestWSClientHandshakeError(t *testing.T) { func TestWSClientHandshakeError(t *testing.T) {
chain, rpcSrv, httpSrv := initClearServerWithCustomConfig(t, func(cfg *config.Config) { _, _, httpSrv := initClearServerWithCustomConfig(t, func(cfg *config.Config) {
cfg.ApplicationConfiguration.RPC.MaxWebSocketClients = -1 cfg.ApplicationConfiguration.RPC.MaxWebSocketClients = -1
}) })
defer chain.Close()
defer rpcSrv.Shutdown()
url := "ws" + strings.TrimPrefix(httpSrv.URL, "http") + "/ws" url := "ws" + strings.TrimPrefix(httpSrv.URL, "http") + "/ws"
_, err := rpcclient.NewWS(context.Background(), url, rpcclient.WSOptions{}) _, err := rpcclient.NewWS(context.Background(), url, rpcclient.WSOptions{})
@ -2055,8 +2006,6 @@ func TestSubClientWaitWithMissedEvent(t *testing.T) {
func testSubClientWaitWithMissedEvent(t *testing.T, local bool) { func testSubClientWaitWithMissedEvent(t *testing.T, local bool) {
chain, rpcSrv, httpSrv := initClearServerWithServices(t, false, false, true) chain, rpcSrv, httpSrv := initClearServerWithServices(t, false, false, true)
defer chain.Close()
defer rpcSrv.Shutdown()
c := mkSubsClient(t, rpcSrv, httpSrv, local) c := mkSubsClient(t, rpcSrv, httpSrv, local)
acc, err := wallet.NewAccount() acc, err := wallet.NewAccount()
@ -2137,8 +2086,6 @@ waitloop:
// user side. // user side.
func TestWSClient_SubscriptionsCompat(t *testing.T) { func TestWSClient_SubscriptionsCompat(t *testing.T) {
chain, rpcSrv, httpSrv := initClearServerWithServices(t, false, false, true) chain, rpcSrv, httpSrv := initClearServerWithServices(t, false, false, true)
defer chain.Close()
defer rpcSrv.Shutdown()
c := mkSubsClient(t, rpcSrv, httpSrv, false) c := mkSubsClient(t, rpcSrv, httpSrv, false)
blocks := getTestBlocks(t) blocks := getTestBlocks(t)
@ -2254,9 +2201,7 @@ func TestWSClient_SubscriptionsCompat(t *testing.T) {
} }
func TestActor_CallWithNilParam(t *testing.T) { func TestActor_CallWithNilParam(t *testing.T) {
chain, rpcSrv, httpSrv := initServerWithInMemoryChain(t) chain, _, httpSrv := initServerWithInMemoryChain(t)
defer chain.Close()
defer rpcSrv.Shutdown()
c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{}) c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{})
require.NoError(t, err) require.NoError(t, err)
@ -2285,9 +2230,7 @@ func TestActor_CallWithNilParam(t *testing.T) {
} }
func TestClient_FindStorage(t *testing.T) { func TestClient_FindStorage(t *testing.T) {
chain, rpcSrv, httpSrv := initServerWithInMemoryChain(t) _, _, httpSrv := initServerWithInMemoryChain(t)
defer chain.Close()
defer rpcSrv.Shutdown()
c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{}) c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{})
require.NoError(t, err) require.NoError(t, err)
@ -2347,9 +2290,7 @@ func TestClient_FindStorage(t *testing.T) {
} }
func TestClient_FindStorageHistoric(t *testing.T) { func TestClient_FindStorageHistoric(t *testing.T) {
chain, rpcSrv, httpSrv := initServerWithInMemoryChain(t) chain, _, httpSrv := initServerWithInMemoryChain(t)
defer chain.Close()
defer rpcSrv.Shutdown()
c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{}) c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{})
require.NoError(t, err) require.NoError(t, err)
@ -2413,9 +2354,7 @@ func TestClient_FindStorageHistoric(t *testing.T) {
} }
func TestClient_GetStorageHistoric(t *testing.T) { func TestClient_GetStorageHistoric(t *testing.T) {
chain, rpcSrv, httpSrv := initServerWithInMemoryChain(t) chain, _, httpSrv := initServerWithInMemoryChain(t)
defer chain.Close()
defer rpcSrv.Shutdown()
c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{}) c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{})
require.NoError(t, err) require.NoError(t, err)
@ -2446,9 +2385,7 @@ func TestClient_GetStorageHistoric(t *testing.T) {
} }
func TestClient_GetVersion_Hardforks(t *testing.T) { func TestClient_GetVersion_Hardforks(t *testing.T) {
chain, rpcSrv, httpSrv := initServerWithInMemoryChain(t) _, _, httpSrv := initServerWithInMemoryChain(t)
defer chain.Close()
defer rpcSrv.Shutdown()
c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{}) c, err := rpcclient.New(context.Background(), httpSrv.URL, rpcclient.Options{})
require.NoError(t, err) require.NoError(t, err)

View file

@ -83,6 +83,7 @@ func getUnitTestChainWithCustomConfig(t testing.TB, enableOracle bool, enableNot
} }
go chain.Run() go chain.Run()
t.Cleanup(chain.Close)
return chain, orc, cfg, logger return chain, orc, cfg, logger
} }
@ -125,10 +126,11 @@ func wrapUnitTestChain(t testing.TB, chain *core.Blockchain, orc OracleHandler,
errCh := make(chan error, 2) errCh := make(chan error, 2)
rpcServer := New(chain, cfg.ApplicationConfiguration.RPC, server, orc, logger, errCh) rpcServer := New(chain, cfg.ApplicationConfiguration.RPC, server, orc, logger, errCh)
rpcServer.Start() rpcServer.Start()
t.Cleanup(rpcServer.Shutdown)
handler := http.HandlerFunc(rpcServer.handleHTTPRequest) handler := http.HandlerFunc(rpcServer.handleHTTPRequest)
srv := httptest.NewServer(handler) srv := httptest.NewServer(handler)
t.Cleanup(srv.Close)
return chain, &rpcServer, srv return chain, &rpcServer, srv
} }

View file

@ -2235,19 +2235,15 @@ func TestSubmitOracle(t *testing.T) {
rpc := `{"jsonrpc": "2.0", "id": 1, "method": "submitoracleresponse", "params": %s}` rpc := `{"jsonrpc": "2.0", "id": 1, "method": "submitoracleresponse", "params": %s}`
t.Run("OracleDisabled", func(t *testing.T) { t.Run("OracleDisabled", func(t *testing.T) {
chain, rpcSrv, httpSrv := initClearServerWithCustomConfig(t, func(c *config.Config) { _, _, httpSrv := initClearServerWithCustomConfig(t, func(c *config.Config) {
c.ApplicationConfiguration.Oracle.Enabled = false c.ApplicationConfiguration.Oracle.Enabled = false
}) })
defer chain.Close()
defer rpcSrv.Shutdown()
req := fmt.Sprintf(rpc, "[]") req := fmt.Sprintf(rpc, "[]")
body := doRPCCallOverHTTP(req, httpSrv.URL, t) body := doRPCCallOverHTTP(req, httpSrv.URL, t)
checkErrGetResult(t, body, true, neorpc.ErrOracleDisabledCode) checkErrGetResult(t, body, true, neorpc.ErrOracleDisabledCode)
}) })
chain, rpcSrv, httpSrv := initClearServerWithServices(t, true, false, false) _, _, httpSrv := initClearServerWithServices(t, true, false, false)
defer chain.Close()
defer rpcSrv.Shutdown()
runCase := func(t *testing.T, fail bool, errCode int64, params ...string) func(t *testing.T) { runCase := func(t *testing.T, fail bool, errCode int64, params ...string) func(t *testing.T) {
return func(t *testing.T) { return func(t *testing.T) {
@ -2283,11 +2279,9 @@ func TestNotaryRequestRPC(t *testing.T) {
rpcTx := `{"jsonrpc": "2.0", "id": 1, "method": "getrawnotarytransaction", "params": ["%s", %d]}` rpcTx := `{"jsonrpc": "2.0", "id": 1, "method": "getrawnotarytransaction", "params": ["%s", %d]}`
t.Run("disabled P2PSigExtensions", func(t *testing.T) { t.Run("disabled P2PSigExtensions", func(t *testing.T) {
chain, rpcSrv, httpSrv := initClearServerWithCustomConfig(t, func(c *config.Config) { _, _, httpSrv := initClearServerWithCustomConfig(t, func(c *config.Config) {
c.ProtocolConfiguration.P2PSigExtensions = false c.ProtocolConfiguration.P2PSigExtensions = false
}) })
defer chain.Close()
defer rpcSrv.Shutdown()
t.Run("submitnotaryrequest", func(t *testing.T) { t.Run("submitnotaryrequest", func(t *testing.T) {
body := doRPCCallOverHTTP(fmt.Sprintf(rpcSubmit, "[]"), httpSrv.URL, t) body := doRPCCallOverHTTP(fmt.Sprintf(rpcSubmit, "[]"), httpSrv.URL, t)
checkErrGetResult(t, body, true, neorpc.InternalServerErrorCode) checkErrGetResult(t, body, true, neorpc.InternalServerErrorCode)
@ -2302,9 +2296,7 @@ func TestNotaryRequestRPC(t *testing.T) {
}) })
}) })
chain, rpcSrv, httpSrv := initServerWithInMemoryChainAndServices(t, false, true, false) chain, _, httpSrv := initServerWithInMemoryChainAndServices(t, false, true, false)
defer chain.Close()
defer rpcSrv.Shutdown()
submitNotaryRequest := func(t *testing.T, fail bool, errCode int64, params ...string) func(t *testing.T) { submitNotaryRequest := func(t *testing.T, fail bool, errCode int64, params ...string) func(t *testing.T) {
return func(t *testing.T) { return func(t *testing.T) {
@ -2548,9 +2540,6 @@ func runTestCasesWithExecutor(t *testing.T, e *executor, rpcCall string, method
func testRPCProtocol(t *testing.T, doRPCCall func(string, string, *testing.T) []byte) { func testRPCProtocol(t *testing.T, doRPCCall func(string, string, *testing.T) []byte) {
chain, rpcSrv, httpSrv := initServerWithInMemoryChain(t) chain, rpcSrv, httpSrv := initServerWithInMemoryChain(t)
defer chain.Close()
defer rpcSrv.Shutdown()
e := &executor{chain: chain, httpSrv: httpSrv} e := &executor{chain: chain, httpSrv: httpSrv}
t.Run("single request", func(t *testing.T) { t.Run("single request", func(t *testing.T) {
rpc := `{"jsonrpc": "2.0", "id": 1, "method": "%s", "params": %s}` rpc := `{"jsonrpc": "2.0", "id": 1, "method": "%s", "params": %s}`
@ -3336,13 +3325,10 @@ func testRPCProtocol(t *testing.T, doRPCCall func(string, string, *testing.T) []
checkErrGetResult(t, body, true, neorpc.ErrInvalidSizeCode) checkErrGetResult(t, body, true, neorpc.ErrInvalidSizeCode)
}) })
t.Run("mempool OOM", func(t *testing.T) { t.Run("mempool OOM", func(t *testing.T) {
chain, rpcSrv, httpSrv := initClearServerWithCustomConfig(t, func(c *config.Config) { chain, _, httpSrv := initClearServerWithCustomConfig(t, func(c *config.Config) {
c.ProtocolConfiguration.MemPoolSize = 1 c.ProtocolConfiguration.MemPoolSize = 1
}) })
defer chain.Close()
defer rpcSrv.Shutdown()
// create and push the first (prioritized) transaction with increased networkFee // create and push the first (prioritized) transaction with increased networkFee
tx := newTxWithParams(t, chain, opcode.PUSH1, 10, 1, 2, false) tx := newTxWithParams(t, chain, opcode.PUSH1, 10, 1, 2, false)
rawTx := encodeBinaryToString(t, tx) rawTx := encodeBinaryToString(t, tx)
@ -3357,13 +3343,10 @@ func testRPCProtocol(t *testing.T, doRPCCall func(string, string, *testing.T) []
}) })
}) })
t.Run("test functions with unsupported states", func(t *testing.T) { t.Run("test functions with unsupported states", func(t *testing.T) {
chain, rpcSrv, httpSrv := initClearServerWithCustomConfig(t, func(c *config.Config) { chain, _, httpSrv := initClearServerWithCustomConfig(t, func(c *config.Config) {
c.ApplicationConfiguration.Ledger.KeepOnlyLatestState = true c.ApplicationConfiguration.Ledger.KeepOnlyLatestState = true
}) })
defer chain.Close()
defer rpcSrv.Shutdown()
e := &executor{chain: chain, httpSrv: httpSrv} e := &executor{chain: chain, httpSrv: httpSrv}
rpc := `{"jsonrpc": "2.0", "id": 1, "method": "%s", "params": %s}` rpc := `{"jsonrpc": "2.0", "id": 1, "method": "%s", "params": %s}`
for method, cases := range rpcFunctionsWithUnsupportedStatesTestCases { for method, cases := range rpcFunctionsWithUnsupportedStatesTestCases {
@ -4100,7 +4083,6 @@ func BenchmarkHandleIn(b *testing.B) {
server, err := network.NewServer(serverConfig, chain, chain.GetStateSyncModule(), logger) server, err := network.NewServer(serverConfig, chain, chain.GetStateSyncModule(), logger)
require.NoError(b, err) require.NoError(b, err)
rpcServer := New(chain, cfg.ApplicationConfiguration.RPC, server, orc, logger, make(chan error)) rpcServer := New(chain, cfg.ApplicationConfiguration.RPC, server, orc, logger, make(chan error))
defer chain.Close()
do := func(b *testing.B, req []byte) { do := func(b *testing.B, req []byte) {
b.ReportAllocs() b.ReportAllocs()
@ -4153,9 +4135,7 @@ func TestFailedPreconditionShutdown(t *testing.T) {
} }
func TestErrorResponseContentType(t *testing.T) { func TestErrorResponseContentType(t *testing.T) {
chain, rpcSrv, httpSrv := initClearServerWithServices(t, true, false, false) _, _, httpSrv := initClearServerWithServices(t, true, false, false)
defer chain.Close()
defer rpcSrv.Shutdown()
const ( const (
expectedContentType = "application/json; charset=utf-8" expectedContentType = "application/json; charset=utf-8"

View file

@ -96,8 +96,6 @@ func TestSubscriptions(t *testing.T) {
var subFeeds = []string{"block_added", "transaction_added", "notification_from_execution", "transaction_executed", "notary_request_event", "header_of_added_block"} var subFeeds = []string{"block_added", "transaction_added", "notification_from_execution", "transaction_executed", "notary_request_event", "header_of_added_block"}
chain, rpcSrv, c, respMsgs, finishedFlag := initCleanServerAndWSClient(t) chain, rpcSrv, c, respMsgs, finishedFlag := initCleanServerAndWSClient(t)
defer chain.Close()
defer rpcSrv.Shutdown()
rpcSrv.coreServer.Start() rpcSrv.coreServer.Start()
defer rpcSrv.coreServer.Shutdown() defer rpcSrv.coreServer.Shutdown()
@ -295,10 +293,7 @@ func TestFilteredSubscriptions(t *testing.T) {
for name, this := range cases { for name, this := range cases {
t.Run(name, func(t *testing.T) { t.Run(name, func(t *testing.T) {
chain, rpcSrv, c, respMsgs, finishedFlag := initCleanServerAndWSClient(t) chain, _, c, respMsgs, finishedFlag := initCleanServerAndWSClient(t)
defer chain.Close()
defer rpcSrv.Shutdown()
// It's used as an end-of-event-stream, so it's always present. // It's used as an end-of-event-stream, so it's always present.
blockSubID := callSubscribe(t, c, respMsgs, `["block_added"]`) blockSubID := callSubscribe(t, c, respMsgs, `["block_added"]`)
@ -397,9 +392,6 @@ func TestFilteredNotaryRequestSubscriptions(t *testing.T) {
chain, rpcSrv, c, respMsgs, finishedFlag := initCleanServerAndWSClient(t) chain, rpcSrv, c, respMsgs, finishedFlag := initCleanServerAndWSClient(t)
rpcSrv.coreServer.Start() rpcSrv.coreServer.Start()
defer chain.Close()
defer rpcSrv.Shutdown()
// blocks are needed to make GAS deposit for priv0 // blocks are needed to make GAS deposit for priv0
blocks := getTestBlocks(t) blocks := getTestBlocks(t)
for _, b := range blocks { for _, b := range blocks {
@ -437,10 +429,7 @@ func TestFilteredBlockSubscriptions(t *testing.T) {
// We can't fit this into TestFilteredSubscriptions, because it uses // We can't fit this into TestFilteredSubscriptions, because it uses
// blocks as EOF events to wait for. // blocks as EOF events to wait for.
const numBlocks = 10 const numBlocks = 10
chain, rpcSrv, c, respMsgs, finishedFlag := initCleanServerAndWSClient(t) chain, _, c, respMsgs, finishedFlag := initCleanServerAndWSClient(t)
defer chain.Close()
defer rpcSrv.Shutdown()
blockSubID := callSubscribe(t, c, respMsgs, `["block_added", {"primary":3}]`) blockSubID := callSubscribe(t, c, respMsgs, `["block_added", {"primary":3}]`)
@ -475,10 +464,7 @@ func TestFilteredBlockSubscriptions(t *testing.T) {
func TestHeaderOfAddedBlockSubscriptions(t *testing.T) { func TestHeaderOfAddedBlockSubscriptions(t *testing.T) {
const numBlocks = 10 const numBlocks = 10
chain, rpcSrv, c, respMsgs, finishedFlag := initCleanServerAndWSClient(t) chain, _, c, respMsgs, finishedFlag := initCleanServerAndWSClient(t)
defer chain.Close()
defer rpcSrv.Shutdown()
headerSubID := callSubscribe(t, c, respMsgs, `["header_of_added_block", {"primary":3}]`) headerSubID := callSubscribe(t, c, respMsgs, `["header_of_added_block", {"primary":3}]`)
@ -513,10 +499,7 @@ func TestHeaderOfAddedBlockSubscriptions(t *testing.T) {
func TestMaxSubscriptions(t *testing.T) { func TestMaxSubscriptions(t *testing.T) {
var subIDs = make([]string, 0) var subIDs = make([]string, 0)
chain, rpcSrv, c, respMsgs, finishedFlag := initCleanServerAndWSClient(t) _, _, c, respMsgs, finishedFlag := initCleanServerAndWSClient(t)
defer chain.Close()
defer rpcSrv.Shutdown()
for i := 0; i < maxFeeds+1; i++ { for i := 0; i < maxFeeds+1; i++ {
var s string var s string
@ -559,10 +542,7 @@ func TestBadSubUnsub(t *testing.T) {
"bad id": `{"jsonrpc": "2.0", "method": "unsubscribe", "params": ["vasiliy"], "id": 1}`, "bad id": `{"jsonrpc": "2.0", "method": "unsubscribe", "params": ["vasiliy"], "id": 1}`,
"not subscribed id": `{"jsonrpc": "2.0", "method": "unsubscribe", "params": ["7"], "id": 1}`, "not subscribed id": `{"jsonrpc": "2.0", "method": "unsubscribe", "params": ["7"], "id": 1}`,
} }
chain, rpcSrv, c, respMsgs, finishedFlag := initCleanServerAndWSClient(t) _, _, c, respMsgs, finishedFlag := initCleanServerAndWSClient(t)
defer chain.Close()
defer rpcSrv.Shutdown()
testF := func(t *testing.T, cases map[string]string) func(t *testing.T) { testF := func(t *testing.T, cases map[string]string) func(t *testing.T) {
return func(t *testing.T) { return func(t *testing.T) {
@ -602,11 +582,9 @@ func TestWSClientsLimit(t *testing.T) {
effectiveClients = 0 effectiveClients = 0
} }
t.Run(tname, func(t *testing.T) { t.Run(tname, func(t *testing.T) {
chain, rpcSrv, httpSrv := initClearServerWithCustomConfig(t, func(cfg *config.Config) { _, _, httpSrv := initClearServerWithCustomConfig(t, func(cfg *config.Config) {
cfg.ApplicationConfiguration.RPC.MaxWebSocketClients = limit cfg.ApplicationConfiguration.RPC.MaxWebSocketClients = limit
}) })
defer chain.Close()
defer rpcSrv.Shutdown()
dialer := websocket.Dialer{HandshakeTimeout: time.Second} dialer := websocket.Dialer{HandshakeTimeout: time.Second}
url := "ws" + strings.TrimPrefix(httpSrv.URL, "http") + "/ws" url := "ws" + strings.TrimPrefix(httpSrv.URL, "http") + "/ws"
@ -647,10 +625,7 @@ func TestSubscriptionOverflow(t *testing.T) {
const blockCnt = notificationBufSize * 5 const blockCnt = notificationBufSize * 5
var receivedMiss bool var receivedMiss bool
chain, rpcSrv, c, respMsgs, finishedFlag := initCleanServerAndWSClient(t) chain, _, c, respMsgs, finishedFlag := initCleanServerAndWSClient(t)
defer chain.Close()
defer rpcSrv.Shutdown()
resp := callWSGetRaw(t, c, `{"jsonrpc": "2.0","method": "subscribe","params": ["block_added"],"id": 1}`, respMsgs) resp := callWSGetRaw(t, c, `{"jsonrpc": "2.0","method": "subscribe","params": ["block_added"],"id": 1}`, respMsgs)
require.Nil(t, resp.Error) require.Nil(t, resp.Error)
@ -688,9 +663,7 @@ func TestFilteredSubscriptions_InvalidFilter(t *testing.T) {
params: `["transaction_executed", {"state":"NOTHALT"}]`, params: `["transaction_executed", {"state":"NOTHALT"}]`,
}, },
} }
chain, rpcSrv, c, respMsgs, finishedFlag := initCleanServerAndWSClient(t) _, _, c, respMsgs, finishedFlag := initCleanServerAndWSClient(t)
defer chain.Close()
defer rpcSrv.Shutdown()
for name, this := range cases { for name, this := range cases {
t.Run(name, func(t *testing.T) { t.Run(name, func(t *testing.T) {