From 5de2cdafce96869eb8160226c2832fbdb5aec185 Mon Sep 17 00:00:00 2001 From: rkapka Date: Thu, 26 May 2022 12:03:56 +0200 Subject: [PATCH 1/5] API SSZ content negotiation --- beacon-chain/rpc/apimiddleware/BUILD.bazel | 1 + .../rpc/apimiddleware/custom_handlers.go | 37 +++++++++++-------- .../rpc/apimiddleware/custom_handlers_test.go | 33 ++++++++++++----- deps.bzl | 6 +++ go.mod | 1 + go.sum | 2 + 6 files changed, 55 insertions(+), 25 deletions(-) diff --git a/beacon-chain/rpc/apimiddleware/BUILD.bazel b/beacon-chain/rpc/apimiddleware/BUILD.bazel index fc5bae42a71d..3805fb33f045 100644 --- a/beacon-chain/rpc/apimiddleware/BUILD.bazel +++ b/beacon-chain/rpc/apimiddleware/BUILD.bazel @@ -19,6 +19,7 @@ go_library( "//consensus-types/primitives:go_default_library", "//proto/eth/v2:go_default_library", "//time/slots:go_default_library", + "@com_github_elnormous_contenttype//:go_default_library", "@com_github_pkg_errors//:go_default_library", "@com_github_r3labs_sse//:go_default_library", ], diff --git a/beacon-chain/rpc/apimiddleware/custom_handlers.go b/beacon-chain/rpc/apimiddleware/custom_handlers.go index 24d5b6937328..31371cf1a1c5 100644 --- a/beacon-chain/rpc/apimiddleware/custom_handlers.go +++ b/beacon-chain/rpc/apimiddleware/custom_handlers.go @@ -10,6 +10,7 @@ import ( "strconv" "strings" + "github.com/elnormous/contenttype" "github.com/prysmaticlabs/prysm/api/gateway/apimiddleware" "github.com/prysmaticlabs/prysm/api/grpc" "github.com/prysmaticlabs/prysm/beacon-chain/rpc/eth/events" @@ -17,8 +18,10 @@ import ( ) const ( - versionHeader = "Eth-Consensus-Version" - grpcVersionHeader = "Grpc-metadata-Eth-Consensus-Version" + versionHeader = "Eth-Consensus-Version" + grpcVersionHeader = "Grpc-metadata-Eth-Consensus-Version" + jsonMediaType = "application/json" + octetStreamMediaType = "application/octet-stream" ) type sszConfig struct { @@ -99,7 +102,12 @@ func handleGetSSZ( req *http.Request, config sszConfig, ) (handled bool) { - if !sszRequested(req) { + ssz, err := sszRequested(req) + if err != nil { + apimiddleware.WriteError(w, apimiddleware.InternalServerError(err), nil) + return true + } + if !ssz { return false } @@ -193,17 +201,16 @@ func handlePostSSZ( return true } -func sszRequested(req *http.Request) bool { - accept, ok := req.Header["Accept"] - if !ok { - return false +func sszRequested(req *http.Request) (bool, error) { + acceptableTypes := []contenttype.MediaType{ + contenttype.NewMediaType(jsonMediaType), + contenttype.NewMediaType(octetStreamMediaType), } - for _, v := range accept { - if v == "application/octet-stream" { - return true - } + accepted, _, err := contenttype.GetAcceptableMediaType(req, acceptableTypes) + if err != nil { + return false, err } - return false + return strings.Contains(accepted.String(), octetStreamMediaType), nil } func sszPosted(req *http.Request) bool { @@ -214,7 +221,7 @@ func sszPosted(req *http.Request) bool { if len(ct) != 1 { return false } - return ct[0] == "application/octet-stream" + return ct[0] == octetStreamMediaType } func prepareSSZRequestForProxying(m *apimiddleware.ApiProxyMiddleware, endpoint apimiddleware.Endpoint, req *http.Request) apimiddleware.ErrorJson { @@ -252,7 +259,7 @@ func preparePostedSSZData(req *http.Request) apimiddleware.ErrorJson { } req.Body = io.NopCloser(bytes.NewBuffer(data)) req.ContentLength = int64(len(data)) - req.Header.Set("Content-Type", "application/json") + req.Header.Set("Content-Type", jsonMediaType) return nil } @@ -280,7 +287,7 @@ func writeSSZResponseHeaderAndBody(grpcResp *http.Response, w http.ResponseWrite } } w.Header().Set("Content-Length", strconv.Itoa(len(respSsz))) - w.Header().Set("Content-Type", "application/octet-stream") + w.Header().Set("Content-Type", octetStreamMediaType) w.Header().Set("Content-Disposition", "attachment; filename="+fileName) w.Header().Set(versionHeader, respVersion) if statusCodeHeader != "" { diff --git a/beacon-chain/rpc/apimiddleware/custom_handlers_test.go b/beacon-chain/rpc/apimiddleware/custom_handlers_test.go index b8e6fa35b973..f744d7721fa6 100644 --- a/beacon-chain/rpc/apimiddleware/custom_handlers_test.go +++ b/beacon-chain/rpc/apimiddleware/custom_handlers_test.go @@ -4,6 +4,7 @@ import ( "bytes" "context" "encoding/json" + "fmt" "net/http" "net/http/httptest" "strings" @@ -34,28 +35,40 @@ func (t testSSZResponseJson) SSZData() string { func TestSSZRequested(t *testing.T) { t.Run("ssz_requested", func(t *testing.T) { request := httptest.NewRequest("GET", "http://foo.example", nil) - request.Header["Accept"] = []string{"application/octet-stream"} - result := sszRequested(request) + request.Header["Accept"] = []string{octetStreamMediaType} + result, err := sszRequested(request) + require.NoError(t, err) assert.Equal(t, true, result) }) - t.Run("multiple_content_types", func(t *testing.T) { + t.Run("ssz_content_type_preferred", func(t *testing.T) { request := httptest.NewRequest("GET", "http://foo.example", nil) - request.Header["Accept"] = []string{"application/json", "application/octet-stream"} - result := sszRequested(request) + request.Header["Accept"] = []string{fmt.Sprintf("%s;q=0.9,%s", jsonMediaType, octetStreamMediaType)} + result, err := sszRequested(request) + require.NoError(t, err) assert.Equal(t, true, result) }) + t.Run("other_content_type_preferred", func(t *testing.T) { + request := httptest.NewRequest("GET", "http://foo.example", nil) + request.Header["Accept"] = []string{fmt.Sprintf("%s,%s;q=0.9", jsonMediaType, octetStreamMediaType)} + result, err := sszRequested(request) + require.NoError(t, err) + assert.Equal(t, false, result) + }) + t.Run("no_header", func(t *testing.T) { request := httptest.NewRequest("GET", "http://foo.example", nil) - result := sszRequested(request) + result, err := sszRequested(request) + require.NoError(t, err) assert.Equal(t, false, result) }) t.Run("other_content_type", func(t *testing.T) { request := httptest.NewRequest("GET", "http://foo.example", nil) - request.Header["Accept"] = []string{"application/json"} - result := sszRequested(request) + request.Header["Accept"] = []string{jsonMediaType} + result, err := sszRequested(request) + require.NoError(t, err) assert.Equal(t, false, result) }) } @@ -82,7 +95,7 @@ func TestPreparePostedSszData(t *testing.T) { preparePostedSSZData(request) assert.Equal(t, int64(19), request.ContentLength) - assert.Equal(t, "application/json", request.Header.Get("Content-Type")) + assert.Equal(t, jsonMediaType, request.Header.Get("Content-Type")) } func TestSerializeMiddlewareResponseIntoSSZ(t *testing.T) { @@ -138,7 +151,7 @@ func TestWriteSSZResponseHeaderAndBody(t *testing.T) { v, ok = writer.Header()["Content-Type"] require.Equal(t, true, ok, "header not found") require.Equal(t, 1, len(v), "wrong number of header values") - assert.Equal(t, "application/octet-stream", v[0]) + assert.Equal(t, octetStreamMediaType, v[0]) v, ok = writer.Header()["Content-Disposition"] require.Equal(t, true, ok, "header not found") require.Equal(t, 1, len(v), "wrong number of header values") diff --git a/deps.bzl b/deps.bzl index 7416ab971d27..5e0d36c4704d 100644 --- a/deps.bzl +++ b/deps.bzl @@ -896,6 +896,12 @@ def prysm_deps(): sum = "h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc=", version = "v0.0.0-20180725130230-947c36da3153", ) + go_repository( + name = "com_github_elnormous_contenttype", + importpath = "github.com/elnormous/contenttype", + sum = "h1:5DrD4LGO3ohab+jPplwE/LlY9JqmkYdssz4Zu7xl8Cs=", + version = "v1.0.3", + ) go_repository( name = "com_github_emicklei_dot", diff --git a/go.mod b/go.mod index 5d8084b89080..fbb4127d8691 100644 --- a/go.mod +++ b/go.mod @@ -259,6 +259,7 @@ require ( github.com/StackExchange/wmi v0.0.0-20210224194228-fe8f1750fd46 // indirect github.com/cespare/cp v1.1.1 // indirect github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf // indirect + github.com/elnormous/contenttype v1.0.3 github.com/fatih/color v1.9.0 // indirect github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 // indirect github.com/go-logr/logr v0.2.1 // indirect diff --git a/go.sum b/go.sum index e85ade23172b..e53e994a1561 100644 --- a/go.sum +++ b/go.sum @@ -294,6 +294,8 @@ github.com/elastic/gosigar v0.12.0/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0 github.com/elastic/gosigar v0.14.2 h1:Dg80n8cr90OZ7x+bAax/QjoW/XqTI11RmA79ZwIm9/4= github.com/elastic/gosigar v0.14.2/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= +github.com/elnormous/contenttype v1.0.3 h1:5DrD4LGO3ohab+jPplwE/LlY9JqmkYdssz4Zu7xl8Cs= +github.com/elnormous/contenttype v1.0.3/go.mod h1:ngVcyGGU8pnn4QJ5sL4StrNgc/wmXZXy5IQSBuHOFPg= github.com/emicklei/dot v0.11.0 h1:Ase39UD9T9fRBOb5ptgpixrxfx8abVzNWZi2+lr53PI= github.com/emicklei/dot v0.11.0/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= From d13475f3a480f8ac50001b24d0d22620ab3ca416 Mon Sep 17 00:00:00 2001 From: rkapka Date: Thu, 2 Jun 2022 17:59:35 +0200 Subject: [PATCH 2/5] custom code --- beacon-chain/rpc/apimiddleware/BUILD.bazel | 1 - .../rpc/apimiddleware/custom_handlers.go | 49 ++++++++++++++--- .../rpc/apimiddleware/custom_handlers_test.go | 52 ++++++++++++++++++- deps.bzl | 6 --- go.mod | 1 - go.sum | 2 - 6 files changed, 93 insertions(+), 18 deletions(-) diff --git a/beacon-chain/rpc/apimiddleware/BUILD.bazel b/beacon-chain/rpc/apimiddleware/BUILD.bazel index 3805fb33f045..fc5bae42a71d 100644 --- a/beacon-chain/rpc/apimiddleware/BUILD.bazel +++ b/beacon-chain/rpc/apimiddleware/BUILD.bazel @@ -19,7 +19,6 @@ go_library( "//consensus-types/primitives:go_default_library", "//proto/eth/v2:go_default_library", "//time/slots:go_default_library", - "@com_github_elnormous_contenttype//:go_default_library", "@com_github_pkg_errors//:go_default_library", "@com_github_r3labs_sse//:go_default_library", ], diff --git a/beacon-chain/rpc/apimiddleware/custom_handlers.go b/beacon-chain/rpc/apimiddleware/custom_handlers.go index 31371cf1a1c5..e54337927b33 100644 --- a/beacon-chain/rpc/apimiddleware/custom_handlers.go +++ b/beacon-chain/rpc/apimiddleware/custom_handlers.go @@ -7,10 +7,10 @@ import ( "fmt" "io" "net/http" + "regexp" "strconv" "strings" - "github.com/elnormous/contenttype" "github.com/prysmaticlabs/prysm/api/gateway/apimiddleware" "github.com/prysmaticlabs/prysm/api/grpc" "github.com/prysmaticlabs/prysm/beacon-chain/rpc/eth/events" @@ -202,15 +202,52 @@ func handlePostSSZ( } func sszRequested(req *http.Request) (bool, error) { - acceptableTypes := []contenttype.MediaType{ - contenttype.NewMediaType(jsonMediaType), - contenttype.NewMediaType(octetStreamMediaType), + accept, ok := req.Header["Accept"] + if !ok { + return false, nil + } + if len(accept) == 0 { + return false, nil } - accepted, _, err := contenttype.GetAcceptableMediaType(req, acceptableTypes) + types := strings.Split(accept[0], ",") + // match a number with optional decimals + regex, err := regexp.Compile("q=\\d(\\.\\d)?") if err != nil { return false, err } - return strings.Contains(accepted.String(), octetStreamMediaType), nil + currentType, currentPriority := "", 1.0 + for _, t := range types { + values := strings.Split(t, ";") + name := values[0] + if name != jsonMediaType && name != octetStreamMediaType { + continue + } + // no params specified + if len(values) == 1 { + if currentType == "" { + currentType = name + continue + } + priority := 1.0 + if priority > currentPriority { + currentType, currentPriority = name, priority + } + continue + } + params := values[1] + match := regex.Find([]byte(params)) + if match != nil { + priority, err := strconv.ParseFloat(strings.Split(string(match), "=")[1], 32) + if err != nil { + return false, err + } + if priority > currentPriority { + currentType, currentPriority = name, priority + } + } + } + + return currentType == octetStreamMediaType, nil } func sszPosted(req *http.Request) bool { diff --git a/beacon-chain/rpc/apimiddleware/custom_handlers_test.go b/beacon-chain/rpc/apimiddleware/custom_handlers_test.go index f744d7721fa6..62ec2ed6b71a 100644 --- a/beacon-chain/rpc/apimiddleware/custom_handlers_test.go +++ b/beacon-chain/rpc/apimiddleware/custom_handlers_test.go @@ -41,7 +41,23 @@ func TestSSZRequested(t *testing.T) { assert.Equal(t, true, result) }) - t.Run("ssz_content_type_preferred", func(t *testing.T) { + t.Run("ssz_content_type_first", func(t *testing.T) { + request := httptest.NewRequest("GET", "http://foo.example", nil) + request.Header["Accept"] = []string{fmt.Sprintf("%s,%s", octetStreamMediaType, jsonMediaType)} + result, err := sszRequested(request) + require.NoError(t, err) + assert.Equal(t, true, result) + }) + + t.Run("ssz_content_type_preferred_1", func(t *testing.T) { + request := httptest.NewRequest("GET", "http://foo.example", nil) + request.Header["Accept"] = []string{fmt.Sprintf("%s;q=0.9,%s", jsonMediaType, octetStreamMediaType)} + result, err := sszRequested(request) + require.NoError(t, err) + assert.Equal(t, true, result) + }) + + t.Run("ssz_content_type_preferred_2", func(t *testing.T) { request := httptest.NewRequest("GET", "http://foo.example", nil) request.Header["Accept"] = []string{fmt.Sprintf("%s;q=0.9,%s", jsonMediaType, octetStreamMediaType)} result, err := sszRequested(request) @@ -57,6 +73,14 @@ func TestSSZRequested(t *testing.T) { assert.Equal(t, false, result) }) + t.Run("other_params", func(t *testing.T) { + request := httptest.NewRequest("GET", "http://foo.example", nil) + request.Header["Accept"] = []string{fmt.Sprintf("%s,%s;q=0.9,otherparam=xyz", jsonMediaType, octetStreamMediaType)} + result, err := sszRequested(request) + require.NoError(t, err) + assert.Equal(t, false, result) + }) + t.Run("no_header", func(t *testing.T) { request := httptest.NewRequest("GET", "http://foo.example", nil) result, err := sszRequested(request) @@ -64,9 +88,33 @@ func TestSSZRequested(t *testing.T) { assert.Equal(t, false, result) }) + t.Run("empty_header", func(t *testing.T) { + request := httptest.NewRequest("GET", "http://foo.example", nil) + request.Header["Accept"] = []string{} + result, err := sszRequested(request) + require.NoError(t, err) + assert.Equal(t, false, result) + }) + + t.Run("empty_header_value", func(t *testing.T) { + request := httptest.NewRequest("GET", "http://foo.example", nil) + request.Header["Accept"] = []string{""} + result, err := sszRequested(request) + require.NoError(t, err) + assert.Equal(t, false, result) + }) + t.Run("other_content_type", func(t *testing.T) { request := httptest.NewRequest("GET", "http://foo.example", nil) - request.Header["Accept"] = []string{jsonMediaType} + request.Header["Accept"] = []string{"application/other"} + result, err := sszRequested(request) + require.NoError(t, err) + assert.Equal(t, false, result) + }) + + t.Run("garbage", func(t *testing.T) { + request := httptest.NewRequest("GET", "http://foo.example", nil) + request.Header["Accept"] = []string{"This is Sparta!!!"} result, err := sszRequested(request) require.NoError(t, err) assert.Equal(t, false, result) diff --git a/deps.bzl b/deps.bzl index 5e0d36c4704d..7416ab971d27 100644 --- a/deps.bzl +++ b/deps.bzl @@ -896,12 +896,6 @@ def prysm_deps(): sum = "h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc=", version = "v0.0.0-20180725130230-947c36da3153", ) - go_repository( - name = "com_github_elnormous_contenttype", - importpath = "github.com/elnormous/contenttype", - sum = "h1:5DrD4LGO3ohab+jPplwE/LlY9JqmkYdssz4Zu7xl8Cs=", - version = "v1.0.3", - ) go_repository( name = "com_github_emicklei_dot", diff --git a/go.mod b/go.mod index fbb4127d8691..5d8084b89080 100644 --- a/go.mod +++ b/go.mod @@ -259,7 +259,6 @@ require ( github.com/StackExchange/wmi v0.0.0-20210224194228-fe8f1750fd46 // indirect github.com/cespare/cp v1.1.1 // indirect github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf // indirect - github.com/elnormous/contenttype v1.0.3 github.com/fatih/color v1.9.0 // indirect github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 // indirect github.com/go-logr/logr v0.2.1 // indirect diff --git a/go.sum b/go.sum index e53e994a1561..e85ade23172b 100644 --- a/go.sum +++ b/go.sum @@ -294,8 +294,6 @@ github.com/elastic/gosigar v0.12.0/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0 github.com/elastic/gosigar v0.14.2 h1:Dg80n8cr90OZ7x+bAax/QjoW/XqTI11RmA79ZwIm9/4= github.com/elastic/gosigar v0.14.2/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -github.com/elnormous/contenttype v1.0.3 h1:5DrD4LGO3ohab+jPplwE/LlY9JqmkYdssz4Zu7xl8Cs= -github.com/elnormous/contenttype v1.0.3/go.mod h1:ngVcyGGU8pnn4QJ5sL4StrNgc/wmXZXy5IQSBuHOFPg= github.com/emicklei/dot v0.11.0 h1:Ase39UD9T9fRBOb5ptgpixrxfx8abVzNWZi2+lr53PI= github.com/emicklei/dot v0.11.0/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= From 518c86ff9c0a317d7c8b4f18ce4a5d6256a3d712 Mon Sep 17 00:00:00 2001 From: rkapka Date: Thu, 2 Jun 2022 18:05:12 +0200 Subject: [PATCH 3/5] use raw string --- beacon-chain/rpc/apimiddleware/custom_handlers.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/beacon-chain/rpc/apimiddleware/custom_handlers.go b/beacon-chain/rpc/apimiddleware/custom_handlers.go index e54337927b33..d3efb783428a 100644 --- a/beacon-chain/rpc/apimiddleware/custom_handlers.go +++ b/beacon-chain/rpc/apimiddleware/custom_handlers.go @@ -211,7 +211,7 @@ func sszRequested(req *http.Request) (bool, error) { } types := strings.Split(accept[0], ",") // match a number with optional decimals - regex, err := regexp.Compile("q=\\d(\\.\\d)?") + regex, err := regexp.Compile(`q=\d(\.\d)?`) if err != nil { return false, err } From 1cc15c4bb17dce09d3da05cc69f3f9c450b64859 Mon Sep 17 00:00:00 2001 From: rkapka Date: Thu, 2 Jun 2022 19:21:53 +0200 Subject: [PATCH 4/5] code review feedback --- .../rpc/apimiddleware/custom_handlers.go | 38 ++++++++----------- .../rpc/apimiddleware/custom_handlers_test.go | 8 ++++ 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/beacon-chain/rpc/apimiddleware/custom_handlers.go b/beacon-chain/rpc/apimiddleware/custom_handlers.go index d3efb783428a..201551b521f3 100644 --- a/beacon-chain/rpc/apimiddleware/custom_handlers.go +++ b/beacon-chain/rpc/apimiddleware/custom_handlers.go @@ -24,6 +24,9 @@ const ( octetStreamMediaType = "application/octet-stream" ) +// match a number with optional decimals +var priorityRegex = regexp.MustCompile(`q=(\d+(?:\.\d+)?)`) + type sszConfig struct { fileName string responseJson sszResponse @@ -202,20 +205,12 @@ func handlePostSSZ( } func sszRequested(req *http.Request) (bool, error) { - accept, ok := req.Header["Accept"] - if !ok { - return false, nil - } + accept := req.Header.Values("Accept") if len(accept) == 0 { return false, nil } types := strings.Split(accept[0], ",") - // match a number with optional decimals - regex, err := regexp.Compile(`q=\d(\.\d)?`) - if err != nil { - return false, err - } - currentType, currentPriority := "", 1.0 + currentType, currentPriority := "", 0.0 for _, t := range types { values := strings.Split(t, ";") name := values[0] @@ -224,10 +219,6 @@ func sszRequested(req *http.Request) (bool, error) { } // no params specified if len(values) == 1 { - if currentType == "" { - currentType = name - continue - } priority := 1.0 if priority > currentPriority { currentType, currentPriority = name, priority @@ -235,15 +226,16 @@ func sszRequested(req *http.Request) (bool, error) { continue } params := values[1] - match := regex.Find([]byte(params)) - if match != nil { - priority, err := strconv.ParseFloat(strings.Split(string(match), "=")[1], 32) - if err != nil { - return false, err - } - if priority > currentPriority { - currentType, currentPriority = name, priority - } + match := priorityRegex.FindAllStringSubmatch(params, 1) + if len(match) != 1 { + continue + } + priority, err := strconv.ParseFloat(match[0][1], 32) + if err != nil { + return false, err + } + if priority > currentPriority { + currentType, currentPriority = name, priority } } diff --git a/beacon-chain/rpc/apimiddleware/custom_handlers_test.go b/beacon-chain/rpc/apimiddleware/custom_handlers_test.go index 62ec2ed6b71a..4305cc5f4c5d 100644 --- a/beacon-chain/rpc/apimiddleware/custom_handlers_test.go +++ b/beacon-chain/rpc/apimiddleware/custom_handlers_test.go @@ -65,6 +65,14 @@ func TestSSZRequested(t *testing.T) { assert.Equal(t, true, result) }) + t.Run("ssz_content_type_preferred_3", func(t *testing.T) { + request := httptest.NewRequest("GET", "http://foo.example", nil) + request.Header["Accept"] = []string{fmt.Sprintf("%s;q=0.95,%s;q=0.9", octetStreamMediaType, jsonMediaType)} + result, err := sszRequested(request) + require.NoError(t, err) + assert.Equal(t, true, result) + }) + t.Run("other_content_type_preferred", func(t *testing.T) { request := httptest.NewRequest("GET", "http://foo.example", nil) request.Header["Accept"] = []string{fmt.Sprintf("%s,%s;q=0.9", jsonMediaType, octetStreamMediaType)} From e504c37479fd6edb8a1e3f2292e00a1cdcd83510 Mon Sep 17 00:00:00 2001 From: rkapka Date: Thu, 2 Jun 2022 19:25:22 +0200 Subject: [PATCH 5/5] remove duplicated test --- beacon-chain/rpc/apimiddleware/custom_handlers_test.go | 8 -------- 1 file changed, 8 deletions(-) diff --git a/beacon-chain/rpc/apimiddleware/custom_handlers_test.go b/beacon-chain/rpc/apimiddleware/custom_handlers_test.go index 4305cc5f4c5d..35b8e36f0a7b 100644 --- a/beacon-chain/rpc/apimiddleware/custom_handlers_test.go +++ b/beacon-chain/rpc/apimiddleware/custom_handlers_test.go @@ -58,14 +58,6 @@ func TestSSZRequested(t *testing.T) { }) t.Run("ssz_content_type_preferred_2", func(t *testing.T) { - request := httptest.NewRequest("GET", "http://foo.example", nil) - request.Header["Accept"] = []string{fmt.Sprintf("%s;q=0.9,%s", jsonMediaType, octetStreamMediaType)} - result, err := sszRequested(request) - require.NoError(t, err) - assert.Equal(t, true, result) - }) - - t.Run("ssz_content_type_preferred_3", func(t *testing.T) { request := httptest.NewRequest("GET", "http://foo.example", nil) request.Header["Accept"] = []string{fmt.Sprintf("%s;q=0.95,%s;q=0.9", octetStreamMediaType, jsonMediaType)} result, err := sszRequested(request)