github.com/prysmaticlabs/prysm@v1.4.4/beacon-chain/rpc/apimiddleware/custom_hooks_test.go (about) 1 package apimiddleware 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "net/http" 7 "net/http/httptest" 8 "strings" 9 "testing" 10 11 "github.com/prysmaticlabs/prysm/shared/bytesutil" 12 "github.com/prysmaticlabs/prysm/shared/gateway" 13 "github.com/prysmaticlabs/prysm/shared/testutil/assert" 14 "github.com/prysmaticlabs/prysm/shared/testutil/require" 15 ) 16 17 func TestWrapAttestationArray(t *testing.T) { 18 t.Run("ok", func(t *testing.T) { 19 endpoint := gateway.Endpoint{ 20 PostRequest: &submitAttestationRequestJson{}, 21 } 22 unwrappedAtts := []*attestationJson{{AggregationBits: "1010"}} 23 unwrappedAttsJson, err := json.Marshal(unwrappedAtts) 24 require.NoError(t, err) 25 26 var body bytes.Buffer 27 _, err = body.Write(unwrappedAttsJson) 28 require.NoError(t, err) 29 request := httptest.NewRequest("POST", "http://foo.example", &body) 30 31 errJson := wrapAttestationsArray(endpoint, nil, request) 32 require.Equal(t, true, errJson == nil) 33 wrappedAtts := &submitAttestationRequestJson{} 34 require.NoError(t, json.NewDecoder(request.Body).Decode(wrappedAtts)) 35 require.Equal(t, 1, len(wrappedAtts.Data), "wrong number of wrapped attestations") 36 assert.Equal(t, "1010", wrappedAtts.Data[0].AggregationBits) 37 }) 38 39 t.Run("invalid_body", func(t *testing.T) { 40 endpoint := gateway.Endpoint{ 41 PostRequest: &submitAttestationRequestJson{}, 42 } 43 var body bytes.Buffer 44 _, err := body.Write([]byte("invalid")) 45 require.NoError(t, err) 46 request := httptest.NewRequest("POST", "http://foo.example", &body) 47 48 errJson := wrapAttestationsArray(endpoint, nil, request) 49 require.Equal(t, false, errJson == nil) 50 assert.Equal(t, true, strings.Contains(errJson.Msg(), "could not decode attestations array")) 51 assert.Equal(t, http.StatusInternalServerError, errJson.StatusCode()) 52 }) 53 } 54 55 func TestPrepareGraffiti(t *testing.T) { 56 endpoint := gateway.Endpoint{ 57 PostRequest: &beaconBlockContainerJson{ 58 Message: &beaconBlockJson{ 59 Body: &beaconBlockBodyJson{}, 60 }, 61 }, 62 } 63 64 t.Run("32_bytes", func(t *testing.T) { 65 endpoint.PostRequest.(*beaconBlockContainerJson).Message.Body.Graffiti = string(bytesutil.PadTo([]byte("foo"), 32)) 66 67 prepareGraffiti(endpoint, nil, nil) 68 assert.Equal( 69 t, 70 "0x666f6f0000000000000000000000000000000000000000000000000000000000", 71 endpoint.PostRequest.(*beaconBlockContainerJson).Message.Body.Graffiti, 72 ) 73 }) 74 75 t.Run("less_than_32_bytes", func(t *testing.T) { 76 endpoint.PostRequest.(*beaconBlockContainerJson).Message.Body.Graffiti = "foo" 77 78 prepareGraffiti(endpoint, nil, nil) 79 assert.Equal( 80 t, 81 "0x666f6f0000000000000000000000000000000000000000000000000000000000", 82 endpoint.PostRequest.(*beaconBlockContainerJson).Message.Body.Graffiti, 83 ) 84 }) 85 86 t.Run("more_than_32_bytes", func(t *testing.T) { 87 endpoint.PostRequest.(*beaconBlockContainerJson).Message.Body.Graffiti = string(bytesutil.PadTo([]byte("foo"), 33)) 88 89 prepareGraffiti(endpoint, nil, nil) 90 assert.Equal( 91 t, 92 "0x666f6f0000000000000000000000000000000000000000000000000000000000", 93 endpoint.PostRequest.(*beaconBlockContainerJson).Message.Body.Graffiti, 94 ) 95 }) 96 }