Merge pull request #780 from status-im/improvement/issue-779/common-NodeManager-removal

[#779] common.NodeManager removal
This commit is contained in:
Adrià Cidre 2018-03-29 09:57:18 +02:00 committed by GitHub
commit 518148cab9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
20 changed files with 215 additions and 364 deletions

View File

@ -14,7 +14,7 @@ import (
"github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/log"
"github.com/status-im/status-go/cmd/statusd/debug" "github.com/status-im/status-go/cmd/statusd/debug"
"github.com/status-im/status-go/geth/api" "github.com/status-im/status-go/geth/api"
"github.com/status-im/status-go/geth/common" "github.com/status-im/status-go/geth/node"
"github.com/status-im/status-go/geth/params" "github.com/status-im/status-go/geth/params"
"github.com/status-im/status-go/metrics" "github.com/status-im/status-go/metrics"
nodemetrics "github.com/status-im/status-go/metrics/node" nodemetrics "github.com/status-im/status-go/metrics/node"
@ -182,7 +182,7 @@ func startDebug(backend *api.StatusBackend) error {
} }
// startCollectingStats collects various stats about the node and other protocols like Whisper. // startCollectingStats collects various stats about the node and other protocols like Whisper.
func startCollectingStats(interruptCh <-chan struct{}, nodeManager common.NodeManager) { func startCollectingStats(interruptCh <-chan struct{}, nodeManager *node.Manager) {
logger.Info("Starting stats", "stats", *statsAddr) logger.Info("Starting stats", "stats", *statsAddr)
@ -332,7 +332,7 @@ Options:
// haltOnInterruptSignal catches interrupt signal (SIGINT) and // haltOnInterruptSignal catches interrupt signal (SIGINT) and
// stops the node. It times out after 5 seconds // stops the node. It times out after 5 seconds
// if the node can not be stopped. // if the node can not be stopped.
func haltOnInterruptSignal(nodeManager common.NodeManager) <-chan struct{} { func haltOnInterruptSignal(nodeManager *node.Manager) <-chan struct{} {
interruptCh := make(chan struct{}) interruptCh := make(chan struct{})
go func() { go func() {
signalCh := make(chan os.Signal, 1) signalCh := make(chan os.Signal, 1)

View File

@ -4,7 +4,7 @@ import (
"context" "context"
"time" "time"
"github.com/status-im/status-go/geth/common" "github.com/status-im/status-go/geth/node"
) )
func createContextFromTimeout(timeout int) (context.Context, context.CancelFunc) { func createContextFromTimeout(timeout int) (context.Context, context.CancelFunc) {
@ -19,7 +19,7 @@ func createContextFromTimeout(timeout int) (context.Context, context.CancelFunc)
// It returns an exit code (`0` if successful or `1` in case of error) // It returns an exit code (`0` if successful or `1` in case of error)
// that can be used in `os.Exit` to exit immediately when the function returns. // that can be used in `os.Exit` to exit immediately when the function returns.
// The special exit code `-1` is used if execution was interrupted. // The special exit code `-1` is used if execution was interrupted.
func syncAndStopNode(interruptCh <-chan struct{}, nodeManager common.NodeManager, timeout int) (exitCode int) { func syncAndStopNode(interruptCh <-chan struct{}, nodeManager *node.Manager, timeout int) (exitCode int) {
logger.Info("syncAndStopNode: node will synchronize the chain and exit", "timeoutInMins", timeout) logger.Info("syncAndStopNode: node will synchronize the chain and exit", "timeoutInMins", timeout)

View File

@ -0,0 +1,62 @@
// Code generated by MockGen. DO NOT EDIT.
// Source: geth/account/accounts.go
// Package transactions is a generated GoMock package.
package account
import (
reflect "reflect"
accounts "github.com/ethereum/go-ethereum/accounts"
keystore "github.com/ethereum/go-ethereum/accounts/keystore"
gomock "github.com/golang/mock/gomock"
)
// MockGethServiceProvider is a mock of GethServiceProvider interface
type MockGethServiceProvider struct {
ctrl *gomock.Controller
recorder *MockGethServiceProviderMockRecorder
}
// MockGethServiceProviderMockRecorder is the mock recorder for MockGethServiceProvider
type MockGethServiceProviderMockRecorder struct {
mock *MockGethServiceProvider
}
// NewMockGethServiceProvider creates a new mock instance
func NewMockGethServiceProvider(ctrl *gomock.Controller) *MockGethServiceProvider {
mock := &MockGethServiceProvider{ctrl: ctrl}
mock.recorder = &MockGethServiceProviderMockRecorder{mock}
return mock
}
// EXPECT returns an object that allows the caller to indicate expected use
func (m *MockGethServiceProvider) EXPECT() *MockGethServiceProviderMockRecorder {
return m.recorder
}
// AccountManager mocks base method
func (m *MockGethServiceProvider) AccountManager() (*accounts.Manager, error) {
ret := m.ctrl.Call(m, "AccountManager")
ret0, _ := ret[0].(*accounts.Manager)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// AccountManager indicates an expected call of AccountManager
func (mr *MockGethServiceProviderMockRecorder) AccountManager() *gomock.Call {
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AccountManager", reflect.TypeOf((*MockGethServiceProvider)(nil).AccountManager))
}
// AccountKeyStore mocks base method
func (m *MockGethServiceProvider) AccountKeyStore() (*keystore.KeyStore, error) {
ret := m.ctrl.Call(m, "AccountKeyStore")
ret0, _ := ret[0].(*keystore.KeyStore)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// AccountKeyStore indicates an expected call of AccountKeyStore
func (mr *MockGethServiceProviderMockRecorder) AccountKeyStore() *gomock.Call {
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AccountKeyStore", reflect.TypeOf((*MockGethServiceProvider)(nil).AccountKeyStore))
}

View File

@ -119,8 +119,8 @@ var (
) )
func TestManagerTestSuite(t *testing.T) { func TestManagerTestSuite(t *testing.T) {
nodeManager := newMockNodeManager(t) gethServiceProvider := newMockGethServiceProvider(t)
accManager := NewManager(nodeManager) accManager := NewManager(gethServiceProvider)
keyStoreDir, err := ioutil.TempDir(os.TempDir(), "accounts") keyStoreDir, err := ioutil.TempDir(os.TempDir(), "accounts")
require.NoError(t, err) require.NoError(t, err)
@ -130,7 +130,7 @@ func TestManagerTestSuite(t *testing.T) {
testPassword := "test-password" testPassword := "test-password"
// Initial test - create test account // Initial test - create test account
nodeManager.EXPECT().AccountKeyStore().Return(keyStore, nil) gethServiceProvider.EXPECT().AccountKeyStore().Return(keyStore, nil)
addr, pubKey, mnemonic, err := accManager.CreateAccount(testPassword) addr, pubKey, mnemonic, err := accManager.CreateAccount(testPassword)
require.NoError(t, err) require.NoError(t, err)
require.NotEmpty(t, addr) require.NotEmpty(t, addr)
@ -144,7 +144,7 @@ func TestManagerTestSuite(t *testing.T) {
pubKey, pubKey,
mnemonic, mnemonic,
}, },
nodeManager: nodeManager, gethServiceProvider: gethServiceProvider,
accManager: accManager, accManager: accManager,
keyStore: keyStore, keyStore: keyStore,
gethAccManager: accounts.NewManager(), gethAccManager: accounts.NewManager(),
@ -153,15 +153,15 @@ func TestManagerTestSuite(t *testing.T) {
suite.Run(t, s) suite.Run(t, s)
} }
func newMockNodeManager(t *testing.T) *common.MockNodeManager { func newMockGethServiceProvider(t *testing.T) *MockGethServiceProvider {
ctrl := gomock.NewController(t) ctrl := gomock.NewController(t)
return common.NewMockNodeManager(ctrl) return NewMockGethServiceProvider(ctrl)
} }
type ManagerTestSuite struct { type ManagerTestSuite struct {
suite.Suite suite.Suite
testAccount testAccount
nodeManager *common.MockNodeManager gethServiceProvider *MockGethServiceProvider
accManager *Manager accManager *Manager
keyStore *keystore.KeyStore keyStore *keystore.KeyStore
gethAccManager *accounts.Manager gethAccManager *accounts.Manager
@ -178,8 +178,8 @@ type testAccount struct {
// Stating the amount of times for mock calls kills the flexibility for // Stating the amount of times for mock calls kills the flexibility for
// development so this is a good workaround to use with EXPECT().Func().AnyTimes() // development so this is a good workaround to use with EXPECT().Func().AnyTimes()
func (s *ManagerTestSuite) reinitMock() { func (s *ManagerTestSuite) reinitMock() {
s.nodeManager = newMockNodeManager(s.T()) s.gethServiceProvider = newMockGethServiceProvider(s.T())
s.accManager.geth = s.nodeManager s.accManager.geth = s.gethServiceProvider
} }
// SetupTest is used here for reinitializing the mock before every // SetupTest is used here for reinitializing the mock before every
@ -190,23 +190,23 @@ func (s *ManagerTestSuite) SetupTest() {
func (s *ManagerTestSuite) TestCreateAccount() { func (s *ManagerTestSuite) TestCreateAccount() {
// Don't fail on empty password // Don't fail on empty password
s.nodeManager.EXPECT().AccountKeyStore().Return(s.keyStore, nil) s.gethServiceProvider.EXPECT().AccountKeyStore().Return(s.keyStore, nil)
_, _, _, err := s.accManager.CreateAccount(s.password) _, _, _, err := s.accManager.CreateAccount(s.password)
s.NoError(err) s.NoError(err)
s.nodeManager.EXPECT().AccountKeyStore().Return(nil, errKeyStore) s.gethServiceProvider.EXPECT().AccountKeyStore().Return(nil, errKeyStore)
_, _, _, err = s.accManager.CreateAccount(s.password) _, _, _, err = s.accManager.CreateAccount(s.password)
s.Equal(errKeyStore, err) s.Equal(errKeyStore, err)
} }
func (s *ManagerTestSuite) TestRecoverAccount() { func (s *ManagerTestSuite) TestRecoverAccount() {
s.nodeManager.EXPECT().AccountKeyStore().Return(s.keyStore, nil) s.gethServiceProvider.EXPECT().AccountKeyStore().Return(s.keyStore, nil)
addr, pubKey, err := s.accManager.RecoverAccount(s.password, s.mnemonic) addr, pubKey, err := s.accManager.RecoverAccount(s.password, s.mnemonic)
s.NoError(err) s.NoError(err)
s.Equal(s.address, addr) s.Equal(s.address, addr)
s.Equal(s.pubKey, pubKey) s.Equal(s.pubKey, pubKey)
s.nodeManager.EXPECT().AccountKeyStore().Return(nil, errKeyStore) s.gethServiceProvider.EXPECT().AccountKeyStore().Return(nil, errKeyStore)
_, _, err = s.accManager.RecoverAccount(s.password, s.mnemonic) _, _, err = s.accManager.RecoverAccount(s.password, s.mnemonic)
s.Equal(errKeyStore, err) s.Equal(errKeyStore, err)
} }
@ -252,7 +252,7 @@ func (s *ManagerTestSuite) TestSelectAccount() {
for _, testCase := range testCases { for _, testCase := range testCases {
s.T().Run(testCase.name, func(t *testing.T) { s.T().Run(testCase.name, func(t *testing.T) {
s.reinitMock() s.reinitMock()
s.nodeManager.EXPECT().AccountKeyStore().Return(testCase.accountKeyStoreReturn...).AnyTimes() s.gethServiceProvider.EXPECT().AccountKeyStore().Return(testCase.accountKeyStoreReturn...).AnyTimes()
err := s.accManager.SelectAccount(testCase.address, testCase.password) err := s.accManager.SelectAccount(testCase.address, testCase.password)
s.Equal(testCase.expectedError, err) s.Equal(testCase.expectedError, err)
}) })
@ -264,14 +264,14 @@ func (s *ManagerTestSuite) TestCreateChildAccount() {
// and an address is not provided. // and an address is not provided.
s.accManager.selectedAccount = nil s.accManager.selectedAccount = nil
s.T().Run("fail_noAccount", func(t *testing.T) { s.T().Run("fail_noAccount", func(t *testing.T) {
s.nodeManager.EXPECT().AccountKeyStore().Return(s.keyStore, nil).AnyTimes() s.gethServiceProvider.EXPECT().AccountKeyStore().Return(s.keyStore, nil).AnyTimes()
_, _, err := s.accManager.CreateChildAccount("", s.password) _, _, err := s.accManager.CreateChildAccount("", s.password)
s.Equal(ErrNoAccountSelected, err) s.Equal(ErrNoAccountSelected, err)
}) })
// Now, select the test account for rest of the test cases. // Now, select the test account for rest of the test cases.
s.reinitMock() s.reinitMock()
s.nodeManager.EXPECT().AccountKeyStore().Return(s.keyStore, nil).AnyTimes() s.gethServiceProvider.EXPECT().AccountKeyStore().Return(s.keyStore, nil).AnyTimes()
err := s.accManager.SelectAccount(s.address, s.password) err := s.accManager.SelectAccount(s.address, s.password)
s.NoError(err) s.NoError(err)
@ -315,7 +315,7 @@ func (s *ManagerTestSuite) TestCreateChildAccount() {
for _, testCase := range testCases { for _, testCase := range testCases {
s.T().Run(testCase.name, func(t *testing.T) { s.T().Run(testCase.name, func(t *testing.T) {
s.reinitMock() s.reinitMock()
s.nodeManager.EXPECT().AccountKeyStore().Return(testCase.accountKeyStoreReturn...).AnyTimes() s.gethServiceProvider.EXPECT().AccountKeyStore().Return(testCase.accountKeyStoreReturn...).AnyTimes()
childAddr, childPubKey, err := s.accManager.CreateChildAccount(testCase.address, testCase.password) childAddr, childPubKey, err := s.accManager.CreateChildAccount(testCase.address, testCase.password)
if testCase.expectedError != nil { if testCase.expectedError != nil {
s.Equal(testCase.expectedError, err) s.Equal(testCase.expectedError, err)
@ -337,24 +337,24 @@ func (s *ManagerTestSuite) TestLogout() {
// TestAccounts tests cases for (*Manager).Accounts. // TestAccounts tests cases for (*Manager).Accounts.
func (s *ManagerTestSuite) TestAccounts() { func (s *ManagerTestSuite) TestAccounts() {
// Select the test account // Select the test account
s.nodeManager.EXPECT().AccountKeyStore().Return(s.keyStore, nil).AnyTimes() s.gethServiceProvider.EXPECT().AccountKeyStore().Return(s.keyStore, nil).AnyTimes()
err := s.accManager.SelectAccount(s.address, s.password) err := s.accManager.SelectAccount(s.address, s.password)
s.NoError(err) s.NoError(err)
// Success // Success
s.nodeManager.EXPECT().AccountManager().Return(s.gethAccManager, nil) s.gethServiceProvider.EXPECT().AccountManager().Return(s.gethAccManager, nil)
accs, err := s.accManager.Accounts() accs, err := s.accManager.Accounts()
s.NoError(err) s.NoError(err)
s.NotNil(accs) s.NotNil(accs)
// Can't get an account manager // Can't get an account manager
s.nodeManager.EXPECT().AccountManager().Return(nil, errAccManager) s.gethServiceProvider.EXPECT().AccountManager().Return(nil, errAccManager)
_, err = s.accManager.Accounts() _, err = s.accManager.Accounts()
s.Equal(errAccManager, err) s.Equal(errAccManager, err)
// Selected account is nil but doesn't fail // Selected account is nil but doesn't fail
s.accManager.selectedAccount = nil s.accManager.selectedAccount = nil
s.nodeManager.EXPECT().AccountManager().Return(s.gethAccManager, nil) s.gethServiceProvider.EXPECT().AccountManager().Return(s.gethAccManager, nil)
accs, err = s.accManager.Accounts() accs, err = s.accManager.Accounts()
s.NoError(err) s.NoError(err)
s.NotNil(accs) s.NotNil(accs)
@ -401,7 +401,7 @@ func (s *ManagerTestSuite) TestAddressToDecryptedAccount() {
for _, testCase := range testCases { for _, testCase := range testCases {
s.T().Run(testCase.name, func(t *testing.T) { s.T().Run(testCase.name, func(t *testing.T) {
s.reinitMock() s.reinitMock()
s.nodeManager.EXPECT().AccountKeyStore().Return(testCase.accountKeyStoreReturn...).AnyTimes() s.gethServiceProvider.EXPECT().AccountKeyStore().Return(testCase.accountKeyStoreReturn...).AnyTimes()
acc, key, err := s.accManager.AddressToDecryptedAccount(testCase.address, testCase.password) acc, key, err := s.accManager.AddressToDecryptedAccount(testCase.address, testCase.password)
if testCase.expectedError != nil { if testCase.expectedError != nil {
s.Equal(testCase.expectedError, err) s.Equal(testCase.expectedError, err)

View File

@ -10,6 +10,7 @@ import (
"github.com/status-im/status-go/geth/account" "github.com/status-im/status-go/geth/account"
"github.com/status-im/status-go/geth/common" "github.com/status-im/status-go/geth/common"
"github.com/status-im/status-go/geth/jail" "github.com/status-im/status-go/geth/jail"
"github.com/status-im/status-go/geth/node"
"github.com/status-im/status-go/geth/params" "github.com/status-im/status-go/geth/params"
"github.com/status-im/status-go/geth/transactions" "github.com/status-im/status-go/geth/transactions"
) )
@ -35,7 +36,7 @@ func NewStatusAPIWithBackend(b *StatusBackend) *StatusAPI {
} }
// NodeManager returns reference to node manager // NodeManager returns reference to node manager
func (api *StatusAPI) NodeManager() common.NodeManager { func (api *StatusAPI) NodeManager() *node.Manager {
return api.b.NodeManager() return api.b.NodeManager()
} }

View File

@ -34,7 +34,7 @@ var (
// StatusBackend implements Status.im service // StatusBackend implements Status.im service
type StatusBackend struct { type StatusBackend struct {
mu sync.Mutex mu sync.Mutex
nodeManager *node.NodeManager nodeManager *node.Manager
accountManager *account.Manager accountManager *account.Manager
txQueueManager *transactions.Manager txQueueManager *transactions.Manager
jailManager jail.Manager jailManager jail.Manager
@ -47,7 +47,7 @@ type StatusBackend struct {
func NewStatusBackend() *StatusBackend { func NewStatusBackend() *StatusBackend {
defer log.Info("Status backend initialized") defer log.Info("Status backend initialized")
nodeManager := node.NewNodeManager() nodeManager := node.NewManager()
accountManager := account.NewManager(nodeManager) accountManager := account.NewManager(nodeManager)
txQueueManager := transactions.NewManager(nodeManager) txQueueManager := transactions.NewManager(nodeManager)
jailManager := jail.New(nodeManager) jailManager := jail.New(nodeManager)
@ -64,7 +64,7 @@ func NewStatusBackend() *StatusBackend {
} }
// NodeManager returns reference to node manager // NodeManager returns reference to node manager
func (b *StatusBackend) NodeManager() *node.NodeManager { func (b *StatusBackend) NodeManager() *node.Manager {
return b.nodeManager return b.nodeManager
} }

View File

@ -10,15 +10,9 @@ import (
"strings" "strings"
"time" "time"
"github.com/ethereum/go-ethereum/accounts"
"github.com/ethereum/go-ethereum/accounts/keystore"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/common/hexutil"
"github.com/ethereum/go-ethereum/les"
"github.com/ethereum/go-ethereum/node"
whisper "github.com/ethereum/go-ethereum/whisper/whisperv6"
"github.com/status-im/status-go/geth/params" "github.com/status-im/status-go/geth/params"
"github.com/status-im/status-go/geth/rpc"
"github.com/status-im/status-go/static" "github.com/status-im/status-go/static"
) )
@ -28,52 +22,6 @@ var (
ErrInvalidSendTxArgs = errors.New("Transaction arguments are invalid (are both 'input' and 'data' fields used?)") ErrInvalidSendTxArgs = errors.New("Transaction arguments are invalid (are both 'input' and 'data' fields used?)")
) )
// NodeManager defines expected methods for managing Status node
type NodeManager interface {
// StartNode start Status node, fails if node is already started
StartNode(config *params.NodeConfig) error
// EnsureSync waits until blockchain is synchronized.
EnsureSync(ctx context.Context) error
// StopNode stop the running Status node.
// Stopped node cannot be resumed, one starts a new node instead.
StopNode() error
// IsNodeRunning confirm that node is running
IsNodeRunning() bool
// NodeConfig returns reference to running node's configuration
NodeConfig() (*params.NodeConfig, error)
// Node returns underlying Status node
Node() (*node.Node, error)
// PopulateStaticPeers populates node's list of static bootstrap peers
PopulateStaticPeers() error
// AddPeer adds URL of static peer
AddPeer(url string) error
// PeerCount returns number of connected peers
PeerCount() int
// LightEthereumService exposes reference to LES service running on top of the node
LightEthereumService() (*les.LightEthereum, error)
// WhisperService returns reference to running Whisper service
WhisperService() (*whisper.Whisper, error)
// AccountManager returns reference to node's account manager
AccountManager() (*accounts.Manager, error)
// AccountKeyStore returns reference to account manager's keystore
AccountKeyStore() (*keystore.KeyStore, error)
// RPCClient exposes reference to RPC client connected to the running node
RPCClient() *rpc.Client
}
// TransactionResult is a JSON returned from transaction complete function (used internally) // TransactionResult is a JSON returned from transaction complete function (used internally)
type TransactionResult struct { type TransactionResult struct {
Hash common.Hash Hash common.Hash

View File

@ -1,216 +0,0 @@
// Code generated by MockGen. DO NOT EDIT.
// Source: geth/common/types.go
// Package common is a generated GoMock package.
package common
import (
context "context"
reflect "reflect"
accounts "github.com/ethereum/go-ethereum/accounts"
keystore "github.com/ethereum/go-ethereum/accounts/keystore"
les "github.com/ethereum/go-ethereum/les"
node "github.com/ethereum/go-ethereum/node"
whisperv6 "github.com/ethereum/go-ethereum/whisper/whisperv6"
gomock "github.com/golang/mock/gomock"
params "github.com/status-im/status-go/geth/params"
rpc "github.com/status-im/status-go/geth/rpc"
)
// MockNodeManager is a mock of NodeManager interface
type MockNodeManager struct {
ctrl *gomock.Controller
recorder *MockNodeManagerMockRecorder
}
// MockNodeManagerMockRecorder is the mock recorder for MockNodeManager
type MockNodeManagerMockRecorder struct {
mock *MockNodeManager
}
// NewMockNodeManager creates a new mock instance
func NewMockNodeManager(ctrl *gomock.Controller) *MockNodeManager {
mock := &MockNodeManager{ctrl: ctrl}
mock.recorder = &MockNodeManagerMockRecorder{mock}
return mock
}
// EXPECT returns an object that allows the caller to indicate expected use
func (m *MockNodeManager) EXPECT() *MockNodeManagerMockRecorder {
return m.recorder
}
// StartNode mocks base method
func (m *MockNodeManager) StartNode(config *params.NodeConfig) error {
ret := m.ctrl.Call(m, "StartNode", config)
ret0, _ := ret[0].(error)
return ret0
}
// StartNode indicates an expected call of StartNode
func (mr *MockNodeManagerMockRecorder) StartNode(config interface{}) *gomock.Call {
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StartNode", reflect.TypeOf((*MockNodeManager)(nil).StartNode), config)
}
// EnsureSync mocks base method
func (m *MockNodeManager) EnsureSync(ctx context.Context) error {
ret := m.ctrl.Call(m, "EnsureSync", ctx)
ret0, _ := ret[0].(error)
return ret0
}
// EnsureSync indicates an expected call of EnsureSync
func (mr *MockNodeManagerMockRecorder) EnsureSync(ctx interface{}) *gomock.Call {
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "EnsureSync", reflect.TypeOf((*MockNodeManager)(nil).EnsureSync), ctx)
}
// StopNode mocks base method
func (m *MockNodeManager) StopNode() error {
ret := m.ctrl.Call(m, "StopNode")
ret0, _ := ret[0].(error)
return ret0
}
// StopNode indicates an expected call of StopNode
func (mr *MockNodeManagerMockRecorder) StopNode() *gomock.Call {
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StopNode", reflect.TypeOf((*MockNodeManager)(nil).StopNode))
}
// IsNodeRunning mocks base method
func (m *MockNodeManager) IsNodeRunning() bool {
ret := m.ctrl.Call(m, "IsNodeRunning")
ret0, _ := ret[0].(bool)
return ret0
}
// IsNodeRunning indicates an expected call of IsNodeRunning
func (mr *MockNodeManagerMockRecorder) IsNodeRunning() *gomock.Call {
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "IsNodeRunning", reflect.TypeOf((*MockNodeManager)(nil).IsNodeRunning))
}
// NodeConfig mocks base method
func (m *MockNodeManager) NodeConfig() (*params.NodeConfig, error) {
ret := m.ctrl.Call(m, "NodeConfig")
ret0, _ := ret[0].(*params.NodeConfig)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// NodeConfig indicates an expected call of NodeConfig
func (mr *MockNodeManagerMockRecorder) NodeConfig() *gomock.Call {
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NodeConfig", reflect.TypeOf((*MockNodeManager)(nil).NodeConfig))
}
// Node mocks base method
func (m *MockNodeManager) Node() (*node.Node, error) {
ret := m.ctrl.Call(m, "Node")
ret0, _ := ret[0].(*node.Node)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// Node indicates an expected call of Node
func (mr *MockNodeManagerMockRecorder) Node() *gomock.Call {
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Node", reflect.TypeOf((*MockNodeManager)(nil).Node))
}
// PopulateStaticPeers mocks base method
func (m *MockNodeManager) PopulateStaticPeers() error {
ret := m.ctrl.Call(m, "PopulateStaticPeers")
ret0, _ := ret[0].(error)
return ret0
}
// PopulateStaticPeers indicates an expected call of PopulateStaticPeers
func (mr *MockNodeManagerMockRecorder) PopulateStaticPeers() *gomock.Call {
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PopulateStaticPeers", reflect.TypeOf((*MockNodeManager)(nil).PopulateStaticPeers))
}
// AddPeer mocks base method
func (m *MockNodeManager) AddPeer(url string) error {
ret := m.ctrl.Call(m, "AddPeer", url)
ret0, _ := ret[0].(error)
return ret0
}
// AddPeer indicates an expected call of AddPeer
func (mr *MockNodeManagerMockRecorder) AddPeer(url interface{}) *gomock.Call {
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AddPeer", reflect.TypeOf((*MockNodeManager)(nil).AddPeer), url)
}
// PeerCount mocks base method
func (m *MockNodeManager) PeerCount() int {
ret := m.ctrl.Call(m, "PeerCount")
ret0, _ := ret[0].(int)
return ret0
}
// PeerCount indicates an expected call of PeerCount
func (mr *MockNodeManagerMockRecorder) PeerCount() *gomock.Call {
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PeerCount", reflect.TypeOf((*MockNodeManager)(nil).PeerCount))
}
// LightEthereumService mocks base method
func (m *MockNodeManager) LightEthereumService() (*les.LightEthereum, error) {
ret := m.ctrl.Call(m, "LightEthereumService")
ret0, _ := ret[0].(*les.LightEthereum)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// LightEthereumService indicates an expected call of LightEthereumService
func (mr *MockNodeManagerMockRecorder) LightEthereumService() *gomock.Call {
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LightEthereumService", reflect.TypeOf((*MockNodeManager)(nil).LightEthereumService))
}
// WhisperService mocks base method
func (m *MockNodeManager) WhisperService() (*whisperv6.Whisper, error) {
ret := m.ctrl.Call(m, "WhisperService")
ret0, _ := ret[0].(*whisperv6.Whisper)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// WhisperService indicates an expected call of WhisperService
func (mr *MockNodeManagerMockRecorder) WhisperService() *gomock.Call {
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "WhisperService", reflect.TypeOf((*MockNodeManager)(nil).WhisperService))
}
// AccountManager mocks base method
func (m *MockNodeManager) AccountManager() (*accounts.Manager, error) {
ret := m.ctrl.Call(m, "AccountManager")
ret0, _ := ret[0].(*accounts.Manager)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// AccountManager indicates an expected call of AccountManager
func (mr *MockNodeManagerMockRecorder) AccountManager() *gomock.Call {
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AccountManager", reflect.TypeOf((*MockNodeManager)(nil).AccountManager))
}
// AccountKeyStore mocks base method
func (m *MockNodeManager) AccountKeyStore() (*keystore.KeyStore, error) {
ret := m.ctrl.Call(m, "AccountKeyStore")
ret0, _ := ret[0].(*keystore.KeyStore)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// AccountKeyStore indicates an expected call of AccountKeyStore
func (mr *MockNodeManagerMockRecorder) AccountKeyStore() *gomock.Call {
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AccountKeyStore", reflect.TypeOf((*MockNodeManager)(nil).AccountKeyStore))
}
// RPCClient mocks base method
func (m *MockNodeManager) RPCClient() *rpc.Client {
ret := m.ctrl.Call(m, "RPCClient")
ret0, _ := ret[0].(*rpc.Client)
return ret0
}
// RPCClient indicates an expected call of RPCClient
func (mr *MockNodeManagerMockRecorder) RPCClient() *gomock.Call {
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RPCClient", reflect.TypeOf((*MockNodeManager)(nil).RPCClient))
}

View File

@ -40,10 +40,10 @@ type RPCClientError error
// EthNodeError is reported when node crashed on start up. // EthNodeError is reported when node crashed on start up.
type EthNodeError error type EthNodeError error
// NodeManager manages Status node (which abstracts contained geth node) // Manager manages Status node (which abstracts contained geth node)
// nolint: golint // nolint: golint
// should be fixed at https://github.com/status-im/status-go/issues/200 // should be fixed at https://github.com/status-im/status-go/issues/200
type NodeManager struct { type Manager struct {
mu sync.RWMutex mu sync.RWMutex
config *params.NodeConfig // Status node configuration config *params.NodeConfig // Status node configuration
node *node.Node // reference to Geth P2P stack/node node *node.Node // reference to Geth P2P stack/node
@ -54,22 +54,22 @@ type NodeManager struct {
log log.Logger log log.Logger
} }
// NewNodeManager makes new instance of node manager // NewManager makes new instance of node manager
func NewNodeManager() *NodeManager { func NewManager() *Manager {
return &NodeManager{ return &Manager{
log: log.New("package", "status-go/geth/node.NodeManager"), log: log.New("package", "status-go/geth/node.Manager"),
} }
} }
// StartNode start Status node, fails if node is already started // StartNode start Status node, fails if node is already started
func (m *NodeManager) StartNode(config *params.NodeConfig) error { func (m *Manager) StartNode(config *params.NodeConfig) error {
m.mu.Lock() m.mu.Lock()
defer m.mu.Unlock() defer m.mu.Unlock()
return m.startNode(config) return m.startNode(config)
} }
// startNode start Status node, fails if node is already started // startNode start Status node, fails if node is already started
func (m *NodeManager) startNode(config *params.NodeConfig) error { func (m *Manager) startNode(config *params.NodeConfig) error {
if err := m.isNodeAvailable(); err == nil { if err := m.isNodeAvailable(); err == nil {
return ErrNodeExists return ErrNodeExists
} }
@ -105,14 +105,14 @@ func (m *NodeManager) startNode(config *params.NodeConfig) error {
} }
// StopNode stop Status node. Stopped node cannot be resumed. // StopNode stop Status node. Stopped node cannot be resumed.
func (m *NodeManager) StopNode() error { func (m *Manager) StopNode() error {
m.mu.Lock() m.mu.Lock()
defer m.mu.Unlock() defer m.mu.Unlock()
return m.stopNode() return m.stopNode()
} }
// stopNode stop Status node. Stopped node cannot be resumed. // stopNode stop Status node. Stopped node cannot be resumed.
func (m *NodeManager) stopNode() error { func (m *Manager) stopNode() error {
if err := m.isNodeAvailable(); err != nil { if err := m.isNodeAvailable(); err != nil {
return err return err
} }
@ -128,7 +128,7 @@ func (m *NodeManager) stopNode() error {
} }
// ResetChainData removes chain data if node is not running. // ResetChainData removes chain data if node is not running.
func (m *NodeManager) ResetChainData(config *params.NodeConfig) error { func (m *Manager) ResetChainData(config *params.NodeConfig) error {
if m.IsNodeRunning() { if m.IsNodeRunning() {
return ErrNodeExists return ErrNodeExists
} }
@ -147,7 +147,7 @@ func (m *NodeManager) ResetChainData(config *params.NodeConfig) error {
} }
// IsNodeRunning confirm that node is running // IsNodeRunning confirm that node is running
func (m *NodeManager) IsNodeRunning() bool { func (m *Manager) IsNodeRunning() bool {
m.mu.RLock() m.mu.RLock()
defer m.mu.RUnlock() defer m.mu.RUnlock()
@ -158,7 +158,7 @@ func (m *NodeManager) IsNodeRunning() bool {
} }
// Node returns underlying Status node // Node returns underlying Status node
func (m *NodeManager) Node() (*node.Node, error) { func (m *Manager) Node() (*node.Node, error) {
m.mu.RLock() m.mu.RLock()
defer m.mu.RUnlock() defer m.mu.RUnlock()
@ -169,14 +169,14 @@ func (m *NodeManager) Node() (*node.Node, error) {
} }
// PopulateStaticPeers connects current node with our publicly available LES/SHH/Swarm cluster // PopulateStaticPeers connects current node with our publicly available LES/SHH/Swarm cluster
func (m *NodeManager) PopulateStaticPeers() error { func (m *Manager) PopulateStaticPeers() error {
m.mu.RLock() m.mu.RLock()
defer m.mu.RUnlock() defer m.mu.RUnlock()
return m.populateStaticPeers() return m.populateStaticPeers()
} }
// populateStaticPeers connects current node with our publicly available LES/SHH/Swarm cluster // populateStaticPeers connects current node with our publicly available LES/SHH/Swarm cluster
func (m *NodeManager) populateStaticPeers() error { func (m *Manager) populateStaticPeers() error {
if err := m.isNodeAvailable(); err != nil { if err := m.isNodeAvailable(); err != nil {
return err return err
} }
@ -197,7 +197,7 @@ func (m *NodeManager) populateStaticPeers() error {
return nil return nil
} }
func (m *NodeManager) removeStaticPeers() error { func (m *Manager) removeStaticPeers() error {
if !m.config.ClusterConfig.Enabled { if !m.config.ClusterConfig.Enabled {
m.log.Info("Static peers are disabled") m.log.Info("Static peers are disabled")
return nil return nil
@ -218,7 +218,7 @@ func (m *NodeManager) removeStaticPeers() error {
} }
// ReconnectStaticPeers removes and adds static peers to a server. // ReconnectStaticPeers removes and adds static peers to a server.
func (m *NodeManager) ReconnectStaticPeers() error { func (m *Manager) ReconnectStaticPeers() error {
m.mu.Lock() m.mu.Lock()
defer m.mu.Unlock() defer m.mu.Unlock()
if err := m.removeStaticPeers(); err != nil { if err := m.removeStaticPeers(); err != nil {
@ -228,7 +228,7 @@ func (m *NodeManager) ReconnectStaticPeers() error {
} }
// AddPeer adds new static peer node // AddPeer adds new static peer node
func (m *NodeManager) AddPeer(url string) error { func (m *Manager) AddPeer(url string) error {
m.mu.RLock() m.mu.RLock()
defer m.mu.RUnlock() defer m.mu.RUnlock()
if err := m.isNodeAvailable(); err != nil { if err := m.isNodeAvailable(); err != nil {
@ -238,7 +238,7 @@ func (m *NodeManager) AddPeer(url string) error {
} }
// addPeer adds new static peer node // addPeer adds new static peer node
func (m *NodeManager) addPeer(url string) error { func (m *Manager) addPeer(url string) error {
// Try to add the url as a static peer and return // Try to add the url as a static peer and return
parsedNode, err := discover.ParseNode(url) parsedNode, err := discover.ParseNode(url)
if err != nil { if err != nil {
@ -248,7 +248,7 @@ func (m *NodeManager) addPeer(url string) error {
return nil return nil
} }
func (m *NodeManager) removePeer(url string) error { func (m *Manager) removePeer(url string) error {
parsedNode, err := discover.ParseNode(url) parsedNode, err := discover.ParseNode(url)
if err != nil { if err != nil {
return err return err
@ -258,7 +258,7 @@ func (m *NodeManager) removePeer(url string) error {
} }
// PeerCount returns the number of connected peers. // PeerCount returns the number of connected peers.
func (m *NodeManager) PeerCount() int { func (m *Manager) PeerCount() int {
if !m.IsNodeRunning() { if !m.IsNodeRunning() {
return 0 return 0
} }
@ -266,7 +266,7 @@ func (m *NodeManager) PeerCount() int {
} }
// NodeConfig exposes reference to running node's configuration // NodeConfig exposes reference to running node's configuration
func (m *NodeManager) NodeConfig() (*params.NodeConfig, error) { func (m *Manager) NodeConfig() (*params.NodeConfig, error) {
m.mu.RLock() m.mu.RLock()
defer m.mu.RUnlock() defer m.mu.RUnlock()
@ -277,7 +277,7 @@ func (m *NodeManager) NodeConfig() (*params.NodeConfig, error) {
} }
// LightEthereumService exposes reference to LES service running on top of the node // LightEthereumService exposes reference to LES service running on top of the node
func (m *NodeManager) LightEthereumService() (*les.LightEthereum, error) { func (m *Manager) LightEthereumService() (*les.LightEthereum, error) {
m.mu.RLock() m.mu.RLock()
defer m.mu.RUnlock() defer m.mu.RUnlock()
@ -297,7 +297,7 @@ func (m *NodeManager) LightEthereumService() (*les.LightEthereum, error) {
} }
// WhisperService exposes reference to Whisper service running on top of the node // WhisperService exposes reference to Whisper service running on top of the node
func (m *NodeManager) WhisperService() (*whisper.Whisper, error) { func (m *Manager) WhisperService() (*whisper.Whisper, error) {
m.mu.RLock() m.mu.RLock()
defer m.mu.RUnlock() defer m.mu.RUnlock()
@ -317,7 +317,7 @@ func (m *NodeManager) WhisperService() (*whisper.Whisper, error) {
} }
// AccountManager exposes reference to node's accounts manager // AccountManager exposes reference to node's accounts manager
func (m *NodeManager) AccountManager() (*accounts.Manager, error) { func (m *Manager) AccountManager() (*accounts.Manager, error) {
m.mu.RLock() m.mu.RLock()
defer m.mu.RUnlock() defer m.mu.RUnlock()
@ -332,7 +332,7 @@ func (m *NodeManager) AccountManager() (*accounts.Manager, error) {
} }
// AccountKeyStore exposes reference to accounts key store // AccountKeyStore exposes reference to accounts key store
func (m *NodeManager) AccountKeyStore() (*keystore.KeyStore, error) { func (m *Manager) AccountKeyStore() (*keystore.KeyStore, error) {
m.mu.RLock() m.mu.RLock()
defer m.mu.RUnlock() defer m.mu.RUnlock()
@ -358,14 +358,14 @@ func (m *NodeManager) AccountKeyStore() (*keystore.KeyStore, error) {
} }
// RPCClient exposes reference to RPC client connected to the running node. // RPCClient exposes reference to RPC client connected to the running node.
func (m *NodeManager) RPCClient() *rpc.Client { func (m *Manager) RPCClient() *rpc.Client {
m.mu.Lock() m.mu.Lock()
defer m.mu.Unlock() defer m.mu.Unlock()
return m.rpcClient return m.rpcClient
} }
// isNodeAvailable check if we have a node running and make sure is fully started // isNodeAvailable check if we have a node running and make sure is fully started
func (m *NodeManager) isNodeAvailable() error { func (m *Manager) isNodeAvailable() error {
if m.node == nil || m.node.Server() == nil { if m.node == nil || m.node.Server() == nil {
return ErrNoRunningNode return ErrNoRunningNode
} }
@ -377,7 +377,7 @@ const tickerResolution = time.Second
// EnsureSync waits until blockchain synchronization // EnsureSync waits until blockchain synchronization
// is complete and returns. // is complete and returns.
func (m *NodeManager) EnsureSync(ctx context.Context) error { func (m *Manager) EnsureSync(ctx context.Context) error {
// Don't wait for any blockchain sync for the // Don't wait for any blockchain sync for the
// local private chain as blocks are never mined. // local private chain as blocks are never mined.
if m.config.NetworkID == params.StatusChainNetworkID { if m.config.NetworkID == params.StatusChainNetworkID {
@ -387,7 +387,7 @@ func (m *NodeManager) EnsureSync(ctx context.Context) error {
return m.ensureSync(ctx) return m.ensureSync(ctx)
} }
func (m *NodeManager) ensureSync(ctx context.Context) error { func (m *Manager) ensureSync(ctx context.Context) error {
les, err := m.LightEthereumService() les, err := m.LightEthereumService()
if err != nil { if err != nil {
return fmt.Errorf("failed to get LES service: %v", err) return fmt.Errorf("failed to get LES service: %v", err)

View File

@ -0,0 +1,47 @@
// Code generated by MockGen. DO NOT EDIT.
// Source: geth/transactions/txqueue_manager_test.go
// Package transactions is a generated GoMock package.
package transactions
import (
reflect "reflect"
gomock "github.com/golang/mock/gomock"
rpc "github.com/status-im/status-go/geth/rpc"
)
// MocktestRPCClientProvider is a mock of testRPCClientProvider interface
type MocktestRPCClientProvider struct {
ctrl *gomock.Controller
recorder *MocktestRPCClientProviderMockRecorder
}
// MocktestRPCClientProviderMockRecorder is the mock recorder for MocktestRPCClientProvider
type MocktestRPCClientProviderMockRecorder struct {
mock *MocktestRPCClientProvider
}
// NewMocktestRPCClientProvider creates a new mock instance
func NewMocktestRPCClientProvider(ctrl *gomock.Controller) *MocktestRPCClientProvider {
mock := &MocktestRPCClientProvider{ctrl: ctrl}
mock.recorder = &MocktestRPCClientProviderMockRecorder{mock}
return mock
}
// EXPECT returns an object that allows the caller to indicate expected use
func (m *MocktestRPCClientProvider) EXPECT() *MocktestRPCClientProviderMockRecorder {
return m.recorder
}
// RPCClient mocks base method
func (m *MocktestRPCClientProvider) RPCClient() *rpc.Client {
ret := m.ctrl.Call(m, "RPCClient")
ret0, _ := ret[0].(*rpc.Client)
return ret0
}
// RPCClient indicates an expected call of RPCClient
func (mr *MocktestRPCClientProviderMockRecorder) RPCClient() *gomock.Call {
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "RPCClient", reflect.TypeOf((*MocktestRPCClientProvider)(nil).RPCClient))
}

View File

@ -27,14 +27,10 @@ import (
. "github.com/status-im/status-go/t/utils" . "github.com/status-im/status-go/t/utils"
) )
func TestTxQueueTestSuite(t *testing.T) {
suite.Run(t, new(TxQueueTestSuite))
}
type TxQueueTestSuite struct { type TxQueueTestSuite struct {
suite.Suite suite.Suite
nodeManagerMockCtrl *gomock.Controller rpcClientMockCtrl *gomock.Controller
nodeManagerMock *common.MockNodeManager rpcClientMock *MocktestRPCClientProvider
server *gethrpc.Server server *gethrpc.Server
client *gethrpc.Client client *gethrpc.Client
txServiceMockCtrl *gomock.Controller txServiceMockCtrl *gomock.Controller
@ -45,20 +41,20 @@ type TxQueueTestSuite struct {
} }
func (s *TxQueueTestSuite) SetupTest() { func (s *TxQueueTestSuite) SetupTest() {
s.nodeManagerMockCtrl = gomock.NewController(s.T()) s.rpcClientMockCtrl = gomock.NewController(s.T())
s.txServiceMockCtrl = gomock.NewController(s.T()) s.txServiceMockCtrl = gomock.NewController(s.T())
s.nodeManagerMock = common.NewMockNodeManager(s.nodeManagerMockCtrl) s.rpcClientMock = NewMocktestRPCClientProvider(s.rpcClientMockCtrl)
s.server, s.txServiceMock = fake.NewTestServer(s.txServiceMockCtrl) s.server, s.txServiceMock = fake.NewTestServer(s.txServiceMockCtrl)
s.client = gethrpc.DialInProc(s.server) s.client = gethrpc.DialInProc(s.server)
rpclient, _ := rpc.NewClient(s.client, params.UpstreamRPCConfig{}) rpclient, _ := rpc.NewClient(s.client, params.UpstreamRPCConfig{})
s.nodeManagerMock.EXPECT().RPCClient().Return(rpclient) s.rpcClientMock.EXPECT().RPCClient().Return(rpclient)
nodeConfig, err := params.NewNodeConfig("/tmp", "", params.RopstenNetworkID, true) nodeConfig, err := params.NewNodeConfig("/tmp", "", params.RopstenNetworkID, true)
s.Require().NoError(err) s.Require().NoError(err)
s.nodeConfig = nodeConfig s.nodeConfig = nodeConfig
s.manager = NewManager(s.nodeManagerMock) s.manager = NewManager(s.rpcClientMock)
s.manager.DisableNotificactions() s.manager.DisableNotificactions()
s.manager.completionTimeout = time.Second s.manager.completionTimeout = time.Second
s.manager.rpcCallTimeout = time.Second s.manager.rpcCallTimeout = time.Second
@ -67,7 +63,7 @@ func (s *TxQueueTestSuite) SetupTest() {
func (s *TxQueueTestSuite) TearDownTest() { func (s *TxQueueTestSuite) TearDownTest() {
s.manager.Stop() s.manager.Stop()
s.nodeManagerMockCtrl.Finish() s.rpcClientMockCtrl.Finish()
s.txServiceMockCtrl.Finish() s.txServiceMockCtrl.Finish()
s.server.Stop() s.server.Stop()
s.client.Close() s.client.Close()

View File

@ -73,7 +73,7 @@ func (s *APIBackendTestSuite) TestRaceConditions() {
log.Info("NodeManager()") log.Info("NodeManager()")
instance := s.Backend.NodeManager() instance := s.Backend.NodeManager()
s.NotNil(instance) s.NotNil(instance)
s.IsType(&node.NodeManager{}, instance) s.IsType(&node.Manager{}, instance)
s.T().Logf("NodeManager(), result: %v", instance) s.T().Logf("NodeManager(), result: %v", instance)
progress <- struct{}{} progress <- struct{}{}
}, },

View File

@ -36,7 +36,7 @@ type JailTestSuite struct {
} }
func (s *JailTestSuite) SetupTest() { func (s *JailTestSuite) SetupTest() {
s.NodeManager = node.NewNodeManager() s.NodeManager = node.NewManager()
s.Jail = jail.New(s.NodeManager) s.Jail = jail.New(s.NodeManager)
} }

View File

@ -27,7 +27,7 @@ type ManagerTestSuite struct {
} }
func (s *ManagerTestSuite) SetupTest() { func (s *ManagerTestSuite) SetupTest() {
s.NodeManager = node.NewNodeManager() s.NodeManager = node.NewManager()
} }
func (s *ManagerTestSuite) TestReferencesWithoutStartedNode() { func (s *ManagerTestSuite) TestReferencesWithoutStartedNode() {

View File

@ -19,7 +19,7 @@ func TestRPCClientTestSuite(t *testing.T) {
} }
func (s *RPCClientTestSuite) SetupTest() { func (s *RPCClientTestSuite) SetupTest() {
s.NodeManager = node.NewNodeManager() s.NodeManager = node.NewManager()
s.NotNil(s.NodeManager) s.NotNil(s.NodeManager)
} }

View File

@ -26,7 +26,7 @@ type RPCTestSuite struct {
} }
func (s *RPCTestSuite) SetupTest() { func (s *RPCTestSuite) SetupTest() {
s.NodeManager = node.NewNodeManager() s.NodeManager = node.NewManager()
s.NotNil(s.NodeManager) s.NotNil(s.NodeManager)
} }

View File

@ -18,7 +18,7 @@ import (
// NodeManagerTestSuite defines a test suit with NodeManager. // NodeManagerTestSuite defines a test suit with NodeManager.
type NodeManagerTestSuite struct { type NodeManagerTestSuite struct {
suite.Suite suite.Suite
NodeManager *node.NodeManager NodeManager *node.Manager
} }
// All general log messages in this package should be routed through this logger. // All general log messages in this package should be routed through this logger.

View File

@ -4,7 +4,7 @@ import (
"context" "context"
gethcommon "github.com/ethereum/go-ethereum/common" gethcommon "github.com/ethereum/go-ethereum/common"
"github.com/status-im/status-go/geth/common" "github.com/status-im/status-go/geth/node"
"github.com/status-im/status-go/geth/params" "github.com/status-im/status-go/geth/params"
) )
@ -27,7 +27,7 @@ func WithDataDir(path string) TestNodeOption {
} }
// FirstBlockHash validates Attach operation for the NodeManager. // FirstBlockHash validates Attach operation for the NodeManager.
func FirstBlockHash(nodeManager common.NodeManager) (string, error) { func FirstBlockHash(nodeManager *node.Manager) (string, error) {
// obtain RPC client for running node // obtain RPC client for running node
runningNode, err := nodeManager.Node() runningNode, err := nodeManager.Node()
if err != nil { if err != nil {

View File

@ -21,7 +21,7 @@ type MailServiceSuite struct {
} }
func (s *MailServiceSuite) SetupTest() { func (s *MailServiceSuite) SetupTest() {
s.NodeManager = node.NewNodeManager() s.NodeManager = node.NewManager()
} }
// TestShhRequestMessagesRPCMethodAvailability tests if `shh_requestMessages` is available // TestShhRequestMessagesRPCMethodAvailability tests if `shh_requestMessages` is available

View File

@ -14,6 +14,7 @@ import (
"testing" "testing"
"time" "time"
"github.com/ethereum/go-ethereum/les"
"github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/log"
"github.com/status-im/status-go/geth/common" "github.com/status-im/status-go/geth/common"
"github.com/status-im/status-go/geth/params" "github.com/status-im/status-go/geth/params"
@ -95,10 +96,22 @@ func LoadFromFile(filename string) string {
return buf.String() return buf.String()
} }
// LightEthereumProvider interface to be used on EnsureNodeSync
// TODO (adriacidre) This interface name should be reviewed as it has a lot
// of unrelated methods.
type LightEthereumProvider interface {
// NodeConfig returns reference to running node's configuration
NodeConfig() (*params.NodeConfig, error)
// LightEthereumService exposes reference to LES service running on top of the node
LightEthereumService() (*les.LightEthereum, error)
// PeerCount returns number of connected peers
PeerCount() int
}
// EnsureNodeSync waits until node synchronzation is done to continue // EnsureNodeSync waits until node synchronzation is done to continue
// with tests afterwards. Panics in case of an error or a timeout. // with tests afterwards. Panics in case of an error or a timeout.
func EnsureNodeSync(nodeManager common.NodeManager) { func EnsureNodeSync(lesProvider LightEthereumProvider) {
nc, err := nodeManager.NodeConfig() nc, err := lesProvider.NodeConfig()
if err != nil { if err != nil {
panic("can't retrieve NodeConfig") panic("can't retrieve NodeConfig")
} }
@ -107,7 +120,7 @@ func EnsureNodeSync(nodeManager common.NodeManager) {
return return
} }
les, err := nodeManager.LightEthereumService() les, err := lesProvider.LightEthereumService()
if err != nil { if err != nil {
panic(err) panic(err)
} }
@ -129,7 +142,7 @@ func EnsureNodeSync(nodeManager common.NodeManager) {
if downloader == nil { if downloader == nil {
continue continue
} }
if nodeManager.PeerCount() == 0 { if lesProvider.PeerCount() == 0 {
logger.Debug("No establishished connections with a peers, continue waiting for a sync") logger.Debug("No establishished connections with a peers, continue waiting for a sync")
continue continue
} }