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  }