From 18aeb9c436ebcf593b8fa40f9b9208885edee709 Mon Sep 17 00:00:00 2001 From: JKincorperated Date: Tue, 18 Mar 2025 16:04:36 +0000 Subject: [PATCH] p2p: Add additional test case specified in EIP-7636 --- p2p/enr/enr_test.go | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/p2p/enr/enr_test.go b/p2p/enr/enr_test.go index 5b2f145b2a..c6fbaef8f0 100644 --- a/p2p/enr/enr_test.go +++ b/p2p/enr/enr_test.go @@ -18,9 +18,11 @@ package enr import ( "bytes" + "encoding/base64" "encoding/binary" "fmt" "math/rand" + "strings" "testing" "time" @@ -108,6 +110,40 @@ func TestGetSetClientInfo(t *testing.T) { assert.Equal(t, clientWithBuild, clientWithBuild2) } +// This tests the decoding of an EIP-7636 compatible ENR +func TestDecodingENRWith7636(t *testing.T) { + enr := "enr:-MO4QBn4OF-y-dqULg4WOIlc8gQAt-arldNFe0_YQ4HNX28jDtg41xjDyKfCXGfZaPN97I-MCfogeK91TyqmWTpb0_AChmNsaWVudNqKTmV0aGVybWluZIYxLjkuNTOHN2ZjYjU2N4JpZIJ2NIJpcIR_AAABg2lwNpAAAAAAAAAAAAAAAAAAAAABiXNlY3AyNTZrMaECn-TTdCwfZP4XgJyq8Lxoj-SgEoIFgDLVBEUqQk4HnAqDdWRwgiMshHVkcDaCIyw" + b, err := base64.RawURLEncoding.DecodeString(strings.Replace(enr, "enr:", "", 1)) + + if err != nil { + t.Error(err) + return; + } + + record, _, err := decodeRecord(rlp.NewStream(bytes.NewReader(b), 0)) + if err != nil { + t.Error(err) + return; + } + + var client Client; + err = record.Load(&client); + if err != nil { + t.Error(err) + return; + } + + if client[0] == nil || client[1] == nil || client[2] == nil { + t.Error("Client info is not decoded correctly") + return; + } + + // Check that the client info is correct + assert.Equal(t, "Nethermind", *client[0]) + assert.Equal(t, "1.9.53", *client[1]) + assert.Equal(t, "7fcb567", *client[2]) +} + func TestLoadErrors(t *testing.T) { var r Record ip4 := IPv4{127, 0, 0, 1} @@ -135,6 +171,8 @@ func TestLoadErrors(t *testing.T) { } } + + // TestSortedGetAndSet tests that Set produced a sorted pairs slice. func TestSortedGetAndSet(t *testing.T) { type pair struct {