github.com/palisadeinc/bor@v0.0.0-20230615125219-ab7196213d15/internal/cli/server/server_test.go (about)

     1  package server
     2  
     3  import (
     4  	"fmt"
     5  	"net"
     6  	"sync/atomic"
     7  	"testing"
     8  	"time"
     9  
    10  	"github.com/ethereum/go-ethereum/log"
    11  
    12  	"github.com/stretchr/testify/assert"
    13  )
    14  
    15  var initialPort uint64 = 61000
    16  
    17  // nextPort gives the next available port starting from 60000
    18  func nextPort() uint64 {
    19  	log.Info("Checking for new port", "current", initialPort)
    20  	port := atomic.AddUint64(&initialPort, 1)
    21  	addr := fmt.Sprintf("localhost:%d", port)
    22  
    23  	lis, err := net.Listen("tcp", addr)
    24  	if err == nil {
    25  		lis.Close()
    26  
    27  		return port
    28  	} else {
    29  		return nextPort()
    30  	}
    31  }
    32  
    33  func TestServer_DeveloperMode(t *testing.T) {
    34  	t.Parallel()
    35  
    36  	// get the default config
    37  	config := DefaultConfig()
    38  
    39  	// enable developer mode
    40  	config.Developer.Enabled = true
    41  	config.Developer.Period = 2 // block time
    42  
    43  	// start the mock server
    44  	server, err := CreateMockServer(config)
    45  	assert.NoError(t, err)
    46  
    47  	defer CloseMockServer(server)
    48  
    49  	// record the initial block number
    50  	blockNumber := server.backend.BlockChain().CurrentBlock().Header().Number.Int64()
    51  
    52  	var i int64 = 0
    53  	for i = 0; i < 3; i++ {
    54  		// We expect the node to mine blocks every `config.Developer.Period` time period
    55  		time.Sleep(time.Duration(config.Developer.Period) * time.Second)
    56  		currBlock := server.backend.BlockChain().CurrentBlock().Header().Number.Int64()
    57  		expected := blockNumber + i + 1
    58  		if res := assert.Equal(t, currBlock, expected); res == false {
    59  			break
    60  		}
    61  	}
    62  }