github.com/Blockdaemon/celo-blockchain@v0.0.0-20200129231733-e667f6b08419/consensus/istanbul/backend/val_enodes_share_test.go (about) 1 package backend 2 3 import ( 4 "net" 5 "testing" 6 7 "github.com/ethereum/go-ethereum/common" 8 vet "github.com/ethereum/go-ethereum/consensus/istanbul/backend/internal/enodes" 9 "github.com/ethereum/go-ethereum/p2p/enode" 10 ) 11 12 func TestHandleValEnodeShareMsg(t *testing.T) { 13 _, b := newBlockChain(4, true) 14 for b == nil || b.Address() == getAddress() { 15 _, b = newBlockChain(4, true) 16 } 17 18 senderAddress := b.Address() 19 privateKey, _ := generatePrivateKey() 20 21 // Tests that a validator enode share message without any validator info 22 // in the payload will not result in errors 23 msg, err := b.generateValEnodesShareMsg() 24 if err != nil { 25 t.Errorf("error %v", err) 26 } 27 28 msg.Sign(b.Sign) 29 payload, err := msg.Payload() 30 31 b.Authorize(getAddress(), signerFn, signerBLSHashFn, signerBLSMessageFn) 32 33 // Set the backend's proxied validator address to itself 34 b.config.ProxiedValidatorAddress = senderAddress 35 36 if err = b.handleValEnodesShareMsg(payload); err != nil { 37 t.Errorf("error %v", err) 38 } 39 40 if entries, err := b.valEnodeTable.GetAllValEnodes(); err != nil { 41 t.Errorf("Error in calling GetAllValEndoes: %v", err) 42 } else { 43 if len(entries) > 0 { 44 t.Errorf("The valEnodeTable should be empty") 45 } 46 } 47 48 testAddress := getAddress() 49 testNode := enode.NewV4(&privateKey.PublicKey, net.ParseIP("0.0.0.0"), 0, 0) 50 51 // Test that a validator enode share message will result in the enode 52 // being inserted into the valEnodeTable 53 b.valEnodeTable.Upsert(map[common.Address]*vet.AddressEntry{testAddress: { 54 Node: testNode, 55 Timestamp: 0, 56 }}) 57 senderAddress = b.Address() 58 newMsg, err := b.generateValEnodesShareMsg() 59 if err != nil { 60 t.Errorf("error %v", err) 61 } 62 63 newMsg.Sign(b.Sign) 64 newPayload, err := newMsg.Payload() 65 66 // Delete the entry in the valEnodeTable so that we can check if it's been 67 // created after handling 68 b.valEnodeTable.RemoveEntry(testAddress) 69 70 b.config.ProxiedValidatorAddress = senderAddress 71 if err = b.handleValEnodesShareMsg(newPayload); err != nil { 72 t.Errorf("error %v", err) 73 } 74 75 if node, err := b.valEnodeTable.GetNodeFromAddress(testAddress); err != nil || node == nil { 76 t.Errorf("Failed to save enode entry. err: %v, node: %s", err, node) 77 } else if node.String() != testNode.String() { 78 t.Errorf("Expected %v, but got %v instead", testNode.String(), node.String()) 79 } 80 }