mirror of
https://github.com/OffchainLabs/prysm.git
synced 2026-01-08 07:03:58 -05:00
* Ran gopls modernize to fix everything go run golang.org/x/tools/gopls/internal/analysis/modernize/cmd/modernize@latest -fix -test ./... * Override rules_go provided dependency for golang.org/x/tools to v0.38.0. To update this, checked out rules_go, then ran `bazel run //go/tools/releaser -- upgrade-dep -mirror=false org_golang_x_tools` and copied the patches. * Fix buildtag violations and ignore buildtag violations in external * Introduce modernize analyzer package. * Add modernize "any" analyzer. * Fix violations of any analyzer * Add modernize "appendclipped" analyzer. * Fix violations of appendclipped * Add modernize "bloop" analyzer. * Add modernize "fmtappendf" analyzer. * Add modernize "forvar" analyzer. * Add modernize "mapsloop" analyzer. * Add modernize "minmax" analyzer. * Fix violations of minmax analyzer * Add modernize "omitzero" analyzer. * Add modernize "rangeint" analyzer. * Fix violations of rangeint. * Add modernize "reflecttypefor" analyzer. * Fix violations of reflecttypefor analyzer. * Add modernize "slicescontains" analyzer. * Add modernize "slicessort" analyzer. * Add modernize "slicesdelete" analyzer. This is disabled by default for now. See https://go.dev/issue/73686. * Add modernize "stringscutprefix" analyzer. * Add modernize "stringsbuilder" analyzer. * Fix violations of stringsbuilder analyzer. * Add modernize "stringsseq" analyzer. * Add modernize "testingcontext" analyzer. * Add modernize "waitgroup" analyzer. * Changelog fragment * gofmt * gazelle * Add modernize "newexpr" analyzer. * Disable newexpr until go1.26 * Add more details in WORKSPACE on how to update the override * @nalepae feedback on min() * gofmt * Fix violations of forvar
125 lines
4.1 KiB
Go
125 lines
4.1 KiB
Go
package rpc
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/OffchainLabs/prysm/v7/api"
|
|
"github.com/OffchainLabs/prysm/v7/network/httputil"
|
|
"github.com/OffchainLabs/prysm/v7/testing/require"
|
|
"google.golang.org/grpc"
|
|
"google.golang.org/grpc/metadata"
|
|
)
|
|
|
|
func TestServer_AuthTokenInterceptor_Verify(t *testing.T) {
|
|
token := "cool-token"
|
|
s := Server{
|
|
authToken: token,
|
|
}
|
|
interceptor := s.AuthTokenInterceptor()
|
|
|
|
unaryInfo := &grpc.UnaryServerInfo{
|
|
FullMethod: "Proto.CreateWallet",
|
|
}
|
|
unaryHandler := func(ctx context.Context, req any) (any, error) {
|
|
return nil, nil
|
|
}
|
|
ctxMD := map[string][]string{
|
|
"authorization": {"Bearer " + token},
|
|
}
|
|
ctx := t.Context()
|
|
ctx = metadata.NewIncomingContext(ctx, ctxMD)
|
|
_, err := interceptor(ctx, "xyz", unaryInfo, unaryHandler)
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
func TestServer_AuthTokenInterceptor_BadToken(t *testing.T) {
|
|
s := Server{
|
|
authToken: "cool-token",
|
|
}
|
|
interceptor := s.AuthTokenInterceptor()
|
|
|
|
unaryInfo := &grpc.UnaryServerInfo{
|
|
FullMethod: "Proto.CreateWallet",
|
|
}
|
|
unaryHandler := func(ctx context.Context, req any) (any, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
ctxMD := map[string][]string{
|
|
"authorization": {"Bearer bad-token"},
|
|
}
|
|
ctx := t.Context()
|
|
ctx = metadata.NewIncomingContext(ctx, ctxMD)
|
|
_, err := interceptor(ctx, "xyz", unaryInfo, unaryHandler)
|
|
require.ErrorContains(t, "token value is invalid", err)
|
|
}
|
|
|
|
func TestServer_AuthTokenHandler(t *testing.T) {
|
|
token := "cool-token"
|
|
|
|
s := &Server{authToken: token}
|
|
testHandler := s.AuthTokenHandler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
// Your test handler logic here
|
|
w.WriteHeader(http.StatusOK)
|
|
_, err := w.Write([]byte("Test Response"))
|
|
require.NoError(t, err)
|
|
}))
|
|
t.Run("no auth token was sent", func(t *testing.T) {
|
|
rr := httptest.NewRecorder()
|
|
req, err := http.NewRequest(http.MethodGet, "/eth/v1/keystores", http.NoBody)
|
|
require.NoError(t, err)
|
|
testHandler.ServeHTTP(rr, req)
|
|
require.Equal(t, http.StatusUnauthorized, rr.Code)
|
|
errJson := &httputil.DefaultJsonError{}
|
|
require.NoError(t, json.Unmarshal(rr.Body.Bytes(), errJson))
|
|
require.StringContains(t, "Unauthorized", errJson.Message)
|
|
})
|
|
t.Run("wrong auth token was sent", func(t *testing.T) {
|
|
rr := httptest.NewRecorder()
|
|
req, err := http.NewRequest(http.MethodGet, "/eth/v1/keystores", http.NoBody)
|
|
require.NoError(t, err)
|
|
req.Header.Set("Authorization", "Bearer YOUR_JWT_TOKEN") // Replace with a valid JWT token
|
|
testHandler.ServeHTTP(rr, req)
|
|
require.Equal(t, http.StatusForbidden, rr.Code)
|
|
errJson := &httputil.DefaultJsonError{}
|
|
require.NoError(t, json.Unmarshal(rr.Body.Bytes(), errJson))
|
|
require.StringContains(t, "token value is invalid", errJson.Message)
|
|
})
|
|
t.Run("good auth token was sent", func(t *testing.T) {
|
|
rr := httptest.NewRecorder()
|
|
req, err := http.NewRequest(http.MethodGet, "/eth/v1/keystores", http.NoBody)
|
|
require.NoError(t, err)
|
|
req.Header.Set("Authorization", "Bearer "+token) // Replace with a valid JWT token
|
|
testHandler.ServeHTTP(rr, req)
|
|
require.Equal(t, http.StatusOK, rr.Code)
|
|
})
|
|
t.Run("web endpoint needs auth token", func(t *testing.T) {
|
|
rr := httptest.NewRecorder()
|
|
req, err := http.NewRequest(http.MethodGet, "/api/v2/validator/beacon/status", http.NoBody)
|
|
require.NoError(t, err)
|
|
testHandler.ServeHTTP(rr, req)
|
|
require.Equal(t, http.StatusUnauthorized, rr.Code)
|
|
errJson := &httputil.DefaultJsonError{}
|
|
require.NoError(t, json.Unmarshal(rr.Body.Bytes(), errJson))
|
|
require.StringContains(t, "Unauthorized", errJson.Message)
|
|
})
|
|
t.Run("initialize does not need auth", func(t *testing.T) {
|
|
rr := httptest.NewRecorder()
|
|
req, err := http.NewRequest(http.MethodGet, api.WebUrlPrefix+"initialize", http.NoBody)
|
|
require.NoError(t, err)
|
|
testHandler.ServeHTTP(rr, req)
|
|
require.Equal(t, http.StatusOK, rr.Code)
|
|
})
|
|
t.Run("health does not need auth", func(t *testing.T) {
|
|
rr := httptest.NewRecorder()
|
|
req, err := http.NewRequest(http.MethodGet, api.WebUrlPrefix+"health/logs", http.NoBody)
|
|
require.NoError(t, err)
|
|
testHandler.ServeHTTP(rr, req)
|
|
require.Equal(t, http.StatusOK, rr.Code)
|
|
})
|
|
}
|