go-ethereum/internal/cli/server/helper.go
Evgeny Danilenko 9c8bf51f57
Prepare Bor package for testing (#416)
* Limit state sync by gas

* Added logging for state-sync total gas usage

* Added number of event-records in log

* Minor Changes

* Minor Fix

* Adding individual gasUsed

* Minor Fix

* it works

* fix tests

* log wiggle and delay with block number

* log delays as numbers

* linters

* fix tests

* restore linters for the project

* fix linters

* fix

* fix

* fix

* linters

* generation

* fix tests

* remove heimdall wrapper response

* linters

* remove possible collisions

* remove possible collisions

* remove possible collisions

* tests for unique address generation

* generalize set

* bor miner tests got restored

* fixes after CR

* final step and mining test

* fix

* fix e2e

* more tests for Heimdall requests

* fix linters

Co-authored-by: Ferran <ferranbt@protonmail.com>
Co-authored-by: Shivam Sharma <shivam691999@gmail.com>
2022-06-08 16:39:30 +03:00

83 lines
1.6 KiB
Go

package server
import (
"fmt"
"io/ioutil"
"math/rand"
"net"
"os"
"sync/atomic"
"time"
)
var maxPortCheck int32 = 100
// findAvailablePort returns the next available port starting from `from`
func findAvailablePort(from int32, count int32) (int32, error) {
if count == maxPortCheck {
return 0, fmt.Errorf("no available port found")
}
port := atomic.AddInt32(&from, 1)
addr := fmt.Sprintf("localhost:%d", port)
count++
lis, err := net.Listen("tcp", addr)
if err == nil {
lis.Close()
return port, nil
} else {
return findAvailablePort(from, count)
}
}
func CreateMockServer(config *Config) (*Server, error) {
if config == nil {
config = DefaultConfig()
}
// find available port for grpc server
rand.Seed(time.Now().UnixNano())
var (
from int32 = 60000 // the min port to start checking from
to int32 = 61000 // the max port to start checking from
)
//nolint: gosec
port, err := findAvailablePort(rand.Int31n(to-from+1)+from, 0)
if err != nil {
return nil, err
}
// grpc port
config.GRPC.Addr = fmt.Sprintf(":%d", port)
// datadir
datadir, _ := ioutil.TempDir("/tmp", "bor-cli-test")
config.DataDir = datadir
// find available port for http server
from = 8545
to = 9545
//nolint: gosec
port, err = findAvailablePort(rand.Int31n(to-from+1)+from, 0)
if err != nil {
return nil, err
}
config.JsonRPC.Http.Port = uint64(port)
// start the server
return NewServer(config)
}
func CloseMockServer(server *Server) {
// remove the contents of temp data dir
os.RemoveAll(server.config.DataDir)
// close the server
server.Stop()
}