fix: gossip in hive test

This commit is contained in:
fearlseefe 2024-04-18 11:29:05 +08:00 committed by Chen Kai
parent c2bef98ad5
commit e97bca61ec
4 changed files with 83 additions and 8 deletions

View file

@ -244,10 +244,7 @@ func (p *PortalProtocolAPI) AddEnr(enr string) (bool, error) {
if err != nil {
return false, err
}
wn := wrapNode(n)
wn.livenessChecks++
p.portalProtocol.table.addVerifiedNode(wn)
p.portalProtocol.AddEnr(n)
return true, nil
}
@ -258,10 +255,7 @@ func (p *PortalProtocolAPI) AddEnrs(enrs []string) bool {
if err != nil {
continue
}
wn := wrapNode(n)
wn.livenessChecks++
p.portalProtocol.table.addVerifiedNode(wn)
p.portalProtocol.AddEnr(n)
}
return true

View file

@ -88,6 +88,8 @@ var ErrNilContentKey = errors.New("content key cannot be nil")
var ContentNotFound = storage.ErrContentNotFound
var MaxDistance = hexutil.MustDecode("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")
type ContentElement struct {
Node enode.ID
ContentKeys [][]byte
@ -265,6 +267,12 @@ func (p *PortalProtocol) RoutingTableInfo() [][]string {
return nodes
}
func (p *PortalProtocol) AddEnr(n *enode.Node) {
p.setJustSeen(n)
id := n.ID().String()
p.radiusCache.Set([]byte(id), MaxDistance)
}
func (p *PortalProtocol) setupUDPListening() error {
laddr := p.conn.LocalAddr().(*net.UDPAddr)
p.localNode.SetFallbackUDP(laddr.Port)

View file

@ -16,6 +16,8 @@ import (
"github.com/ethereum/go-ethereum/p2p/enode"
"github.com/ethereum/go-ethereum/portalnetwork/storage"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"gopkg.in/yaml.v2"
)
func setupBeaconNetwork(addr string, bootNodes []*enode.Node) (*BeaconNetwork, error) {
@ -218,3 +220,56 @@ func TestBeaconNetworkContent(t *testing.T) {
assert.Equal(t, vBytes3, get3)
}
}
type Entry struct {
ContentKey string `yaml:"content_key"`
ContentValue string `yaml:"content_value"`
}
func TestGossipTwoNodes(t *testing.T) {
file, err := os.ReadFile("./testdata/hive/gossip.yaml")
require.NoError(t, err)
entries := make([]Entry, 0)
err = yaml.Unmarshal(file, &entries)
require.NoError(t, err)
keys := make([][]byte, 0)
values := make([][]byte, 0)
for _, entry := range entries {
keys = append(keys, hexutil.MustDecode(entry.ContentKey))
values = append(values, hexutil.MustDecode(entry.ContentValue))
}
logger := testlog.Logger(t, log.LvlTrace)
node1, err := setupBeaconNetwork(":6998", nil)
assert.NoError(t, err)
node1.log = logger
node1.portalProtocol.Log = logger
err = node1.Start()
assert.NoError(t, err)
node2, err := setupBeaconNetwork(":6999", nil)
assert.NoError(t, err)
node2.log = logger
node2.portalProtocol.Log = logger
err = node2.Start()
assert.NoError(t, err)
node2.portalProtocol.AddEnr(node1.portalProtocol.Self())
id := node2.portalProtocol.Self().ID()
num, err := node2.portalProtocol.Gossip(&id, keys, values)
require.NoError(t, err)
require.Equal(t, num, 1)
time.Sleep(time.Second * 10)
for i, key := range keys {
val := values[i]
res, err := node1.portalProtocol.Get(key, node1.portalProtocol.ToContentId(key))
require.NoError(t, err)
require.Equal(t, res, val)
}
}

File diff suppressed because one or more lines are too long