mirror of
https://github.com/status-im/status-go.git
synced 2025-01-09 14:16:21 +00:00
1c8d32c451
During CI tests non-deterministic failures with "no suitable peers available" happened. Reason is a not finished synchronisation after starting of node. Added and integrated an EnsureSychronization() almost solved it, but overlapped with new added EnsureNodeSync() in merged develop. Failure stayed, so exchange new algorithm in EsureNodeSync() with former one.
106 lines
2.3 KiB
Go
106 lines
2.3 KiB
Go
package integration
|
|
|
|
import (
|
|
"bytes"
|
|
"errors"
|
|
"io"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/status-im/status-go/geth/common"
|
|
"github.com/status-im/status-go/geth/params"
|
|
)
|
|
|
|
var (
|
|
// TestConfig defines the default config usable at package-level.
|
|
TestConfig *common.TestConfig
|
|
|
|
// RootDir is the main application directory
|
|
RootDir string
|
|
|
|
// TestDataDir is data directory used for tests
|
|
TestDataDir string
|
|
|
|
// TestNetworkNames network ID to name mapping
|
|
TestNetworkNames = map[int]string{
|
|
params.MainNetworkID: "Mainnet",
|
|
params.RopstenNetworkID: "Ropsten",
|
|
params.RinkebyNetworkID: "Rinkeby",
|
|
params.StatusChainNetworkID: "StatusChain",
|
|
}
|
|
)
|
|
|
|
func init() {
|
|
pwd, err := os.Getwd()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
// setup root directory
|
|
RootDir = filepath.Dir(pwd)
|
|
if strings.HasSuffix(RootDir, "geth") || strings.HasSuffix(RootDir, "cmd") { // we need to hop one more level
|
|
RootDir = filepath.Join(RootDir, "..")
|
|
}
|
|
|
|
// setup auxiliary directories
|
|
TestDataDir = filepath.Join(RootDir, ".ethereumtest")
|
|
|
|
TestConfig, err = common.LoadTestConfig()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
|
|
// LoadFromFile is useful for loading test data, from testdata/filename into a variable
|
|
// nolint: errcheck
|
|
func LoadFromFile(filename string) string {
|
|
f, err := os.Open(filename)
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
|
|
buf := bytes.NewBuffer(nil)
|
|
io.Copy(buf, f)
|
|
f.Close()
|
|
|
|
return string(buf.Bytes())
|
|
}
|
|
|
|
// EnsureNodeSync waits until node synchronzation is done to continue
|
|
// with tests afterwards. Returns an error in case of a timeout.
|
|
func EnsureNodeSync(nodeManager common.NodeManager) error {
|
|
les, err := nodeManager.LightEthereumService()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if les == nil {
|
|
return errors.New("LightEthereumService is nil")
|
|
}
|
|
|
|
timeouter := time.NewTimer(20 * time.Minute)
|
|
defer timeouter.Stop()
|
|
ticker := time.NewTicker(time.Second)
|
|
defer ticker.Stop()
|
|
|
|
for {
|
|
select {
|
|
case <-timeouter.C:
|
|
return errors.New("timout during node synchronization")
|
|
case <-ticker.C:
|
|
downloader := les.Downloader()
|
|
|
|
if downloader != nil {
|
|
isSyncing := downloader.Synchronising()
|
|
progress := downloader.Progress()
|
|
|
|
if !isSyncing && progress.HighestBlock > 0 && progress.CurrentBlock >= progress.HighestBlock {
|
|
return nil
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|