mirror of
https://github.com/status-im/status-go.git
synced 2025-01-20 19:52:42 +00:00
be9c55bc16
* WIP accounts implementation * Accounts datasore and changes to status mobile API * Add library changes and method to update config * Handle error after account selection * Add two methods to start account to backend * Use encrypted database for settings and add a service for them * Resolve linter warning * Bring back StartNode StopNode for tests * Add sub accounts and get/save api * Changes to accounts structure * Login use root address and fetch necessary info from database * Cover accounts store with tests * Refactor in progress * Initialize status keystore instance before starting ethereum node * Rework library tests * Resolve failures in private api test and send transaction test * Pass pointer to initialized config to unmarshal * Use multiaccounts/accounts naming consistently Multiaccount is used as a login identifier Account references an address and a key, if account is not watch-only. * Add login timestamp stored in the database to accounts.Account object * Add photo-path field for multiaccount struct * Add multiaccoutns rpc with updateAccount method Update to any other account that wasn't used for login will return an error * Fix linter in services/accounts * Select account before starting a node * Save list of accounts on first login * Pass account manager to accounts service to avoid selecting account before starting a node * Add logs to login with save and regualr login
95 lines
2.2 KiB
Go
95 lines
2.2 KiB
Go
package services
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
"github.com/status-im/status-go/api"
|
|
"github.com/status-im/status-go/t/e2e"
|
|
|
|
"github.com/status-im/status-go/t/utils"
|
|
)
|
|
|
|
const (
|
|
// see vendor/github.com/ethereum/go-ethereum/rpc/errors.go:L27
|
|
methodNotFoundErrorCode = -32601
|
|
)
|
|
|
|
type rpcError struct {
|
|
Code int `json:"code"`
|
|
}
|
|
|
|
type BaseJSONRPCSuite struct {
|
|
e2e.BackendTestSuite
|
|
}
|
|
|
|
func (s *BaseJSONRPCSuite) AssertAPIMethodUnexported(method string) {
|
|
exported := s.isMethodExported(method, false)
|
|
s.False(exported,
|
|
"method %s should be hidden, but it isn't",
|
|
method)
|
|
}
|
|
|
|
func (s *BaseJSONRPCSuite) AssertAPIMethodExported(method string) {
|
|
exported := s.isMethodExported(method, false)
|
|
s.True(exported,
|
|
"method %s should be exported, but it isn't",
|
|
method)
|
|
}
|
|
|
|
func (s *BaseJSONRPCSuite) AssertAPIMethodExportedPrivately(method string) {
|
|
exported := s.isMethodExported(method, true)
|
|
s.True(exported,
|
|
"method %s should be exported, but it isn't",
|
|
method)
|
|
}
|
|
|
|
func (s *BaseJSONRPCSuite) isMethodExported(method string, private bool) bool {
|
|
var (
|
|
result string
|
|
err error
|
|
)
|
|
|
|
cmd := fmt.Sprintf(`{"jsonrpc":"2.0", "method": "%s", "params": []}`, method)
|
|
if private {
|
|
result, err = s.Backend.CallPrivateRPC(cmd)
|
|
} else {
|
|
result, err = s.Backend.CallRPC(cmd)
|
|
}
|
|
s.NoError(err)
|
|
|
|
var response struct {
|
|
Error *rpcError `json:"error"`
|
|
}
|
|
|
|
s.NoError(json.Unmarshal([]byte(result), &response))
|
|
|
|
return !(response.Error != nil && response.Error.Code == methodNotFoundErrorCode)
|
|
}
|
|
|
|
func (s *BaseJSONRPCSuite) SetupTest(upstreamEnabled, statusServiceEnabled, debugAPIEnabled bool) error {
|
|
s.Backend = api.NewStatusBackend()
|
|
s.NotNil(s.Backend)
|
|
|
|
nodeConfig, err := utils.MakeTestNodeConfig(utils.GetNetworkID())
|
|
s.NoError(err)
|
|
s.NoError(s.Backend.AccountManager().InitKeystore(nodeConfig.KeyStoreDir))
|
|
|
|
nodeConfig.IPCEnabled = false
|
|
nodeConfig.EnableStatusService = statusServiceEnabled
|
|
if debugAPIEnabled {
|
|
nodeConfig.AddAPIModule("debug")
|
|
}
|
|
nodeConfig.HTTPHost = "" // to make sure that no HTTP interface is started
|
|
|
|
if upstreamEnabled {
|
|
networkURL, err := utils.GetRemoteURL()
|
|
s.NoError(err)
|
|
|
|
nodeConfig.UpstreamConfig.Enabled = true
|
|
nodeConfig.UpstreamConfig.URL = networkURL
|
|
}
|
|
|
|
return s.Backend.StartNode(nodeConfig)
|
|
}
|