github.com/Blockdaemon/celo-blockchain@v0.0.0-20200129231733-e667f6b08419/consensus/istanbul/backend/announce_test.go (about)

     1  package backend
     2  
     3  import (
     4  	"net"
     5  	"testing"
     6  
     7  	"github.com/ethereum/go-ethereum/consensus/consensustest"
     8  	"github.com/ethereum/go-ethereum/p2p/enode"
     9  )
    10  
    11  func TestHandleIstAnnounce(t *testing.T) {
    12  	_, b := newBlockChain(4, true)
    13  	for b == nil || b.Address() == getAddress() {
    14  		_, b = newBlockChain(4, true)
    15  	}
    16  
    17  	block := b.currentBlock()
    18  	valSet := b.getValidators(block.Number().Uint64(), block.Hash())
    19  
    20  	val1PrivateKey, _ := generatePrivateKey()
    21  	val1IPAddress := net.ParseIP("1.2.3.4")
    22  	val1Node := enode.NewV4(&val1PrivateKey.PublicKey, val1IPAddress, 0, 0)
    23  	val1Addr := getAddress()
    24  	val1P2pServer := &consensustest.MockP2PServer{Node: val1Node}
    25  
    26  	// Set backend to val1
    27  	b.SetP2PServer(val1P2pServer)
    28  	b.Authorize(val1Addr, signerFn, signerBLSHashFn, signerBLSMessageFn)
    29  
    30  	// Generate an ist announce message using val1
    31  	istMsg, err := b.generateIstAnnounce()
    32  	istMsg.Sign(b.Sign)
    33  	payload, _ := istMsg.Payload()
    34  
    35  	// Set backend to val2
    36  	b.address = valSet.GetByIndex(2).Address()
    37  
    38  	// Handle val1's announce message
    39  	if err = b.handleIstAnnounce(payload); err != nil {
    40  		t.Errorf("error %v", err)
    41  	}
    42  
    43  	if node, err := b.valEnodeTable.GetNodeFromAddress(val1Addr); err == nil {
    44  		if node == nil || node.String() != val1Node.String() {
    45  			t.Errorf("Expected %v, but got %v instead", val1Node.String(), node)
    46  		}
    47  	} else {
    48  		t.Errorf("Failed to save enode entry")
    49  	}
    50  }