Skip to content

Commit

Permalink
Add validator endpoint tests
Browse files Browse the repository at this point in the history
  • Loading branch information
skmgoldin committed Sep 9, 2020
1 parent 3485a3a commit 390a822
Show file tree
Hide file tree
Showing 7 changed files with 181 additions and 0 deletions.
131 changes: 131 additions & 0 deletions pkg/oapi/oapi.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ package oapi
import (
"context"
"net/url"
"strings"

"github.com/INFURA/eth2-comply/pkg/eth2spec"
"github.com/antihax/optional"
Expand Down Expand Up @@ -456,3 +457,133 @@ func ExecGetConfigDepositContract(ctx context.Context) (*ExecutorResult, error)

return result, nil
}

type ExecGetValidatorDutiesAttesterOpts struct {
Epoch string
QueryParams map[string]string
}

func ExecGetValidatorDutiesAttester(
ctx context.Context,
opts ExecGetValidatorDutiesAttesterOpts) (*ExecutorResult, error) {
var index []string
if val, ok := opts.QueryParams["index"]; ok {
index = strings.Split(val, ",")
}

client := GetClient(ctx)
attester, httpdata, err := client.ValidatorApi.GetAttesterDuties(ctx, opts.Epoch, index)
if err != nil {
return nil, err
}

result := &ExecutorResult{
Response: attester,
ResponseDS: eth2spec.GetAttesterDutiesResponse{},
StatusCode: &httpdata.StatusCode,
}

return result, nil
}

func ExecGetValidatorDutiesProposer(ctx context.Context, epoch string) (*ExecutorResult, error) {
client := GetClient(ctx)
proposer, httpdata, err := client.ValidatorApi.GetProposerDuties(ctx, epoch)
if err != nil {
return nil, err
}

result := &ExecutorResult{
Response: proposer,
ResponseDS: eth2spec.GetProposerDutiesResponse{},
StatusCode: &httpdata.StatusCode,
}

return result, nil
}

type ExecGetValidatorBlocksOpts struct {
Slot string
QueryParams map[string]string
}

func ExecGetValidatorBlocks(
ctx context.Context,
opts ExecGetValidatorBlocksOpts) (*ExecutorResult, error) {
var randaoReveal string
if val, ok := opts.QueryParams["randao_reveal"]; ok {
randaoReveal = val
}
produceBlockOpts := &eth2spec.ProduceBlockOpts{}
if val, ok := opts.QueryParams["graffiti"]; ok {
produceBlockOpts.Graffiti = optional.NewString(val)
}

client := GetClient(ctx)
block, httpdata, err := client.ValidatorApi.ProduceBlock(ctx, opts.Slot, randaoReveal, produceBlockOpts)
if err != nil {
return nil, err
}

result := &ExecutorResult{
Response: block,
ResponseDS: eth2spec.ProduceBlockResponse{},
StatusCode: &httpdata.StatusCode,
}

return result, nil
}

func ExecGetValidatorAttestationData(
ctx context.Context,
queryParams map[string]string) (*ExecutorResult, error) {
var slot string
if val, ok := queryParams["slot"]; ok {
slot = val
}
var committeeIndex string
if val, ok := queryParams["committee_index"]; ok {
committeeIndex = val
}

client := GetClient(ctx)
data, httpdata, err := client.ValidatorApi.ProduceAttestationData(ctx, slot, committeeIndex)
if err != nil {
return nil, err
}

result := &ExecutorResult{
Response: data,
ResponseDS: eth2spec.ProduceAttestationDataResponse{},
StatusCode: &httpdata.StatusCode,
}

return result, nil
}

func ExecGetValidatorAggregateAttestation(
ctx context.Context,
queryParams map[string]string) (*ExecutorResult, error) {
var attestationDataRoot string
if val, ok := queryParams["attestation_data_root"]; ok {
attestationDataRoot = val
}
var slot string
if val, ok := queryParams["slot"]; ok {
slot = val
}

client := GetClient(ctx)
aggregate, httpdata, err := client.ValidatorApi.GetAggregatedAttestation(ctx, attestationDataRoot, slot)
if err != nil {
return nil, err
}

result := &ExecutorResult{
Response: aggregate,
ResponseDS: eth2spec.GetAggregatedAttestationResponse{},
StatusCode: &httpdata.StatusCode,
}

return result, nil
}
30 changes: 30 additions & 0 deletions pkg/testcases/router.go
Original file line number Diff line number Diff line change
Expand Up @@ -161,3 +161,33 @@ func (c Case) execGetConfigOperation(ctx context.Context, route string) (*oapi.E

return nil, UnimplementedOperationError{method: c.Config.Method, route: route}
}

func (c Case) execGetValidatorOperation(ctx context.Context, route string) (*oapi.ExecutorResult, error) {
uriTokens := strings.Split(route, "/")

switch {
case strings.Contains(route, "/duties/"):
switch {
case strings.Contains(route, "/attester/"):
opts := oapi.ExecGetValidatorDutiesAttesterOpts{
Epoch: uriTokens[5],
QueryParams: c.Config.QueryParams,
}
return oapi.ExecGetValidatorDutiesAttester(ctx, opts)
case strings.Contains(route, "/proposer/"):
return oapi.ExecGetValidatorDutiesProposer(ctx, uriTokens[5])
}
case strings.Contains(route, "/blocks/"):
opts := oapi.ExecGetValidatorBlocksOpts{
Slot: uriTokens[4],
QueryParams: c.Config.QueryParams,
}
return oapi.ExecGetValidatorBlocks(ctx, opts)
case strings.Contains(route, "/attestation_data"):
return oapi.ExecGetValidatorAttestationData(ctx, c.Config.QueryParams)
case strings.Contains(route, "/aggregate_attestations"):
return oapi.ExecGetValidatorAggregateAttestation(ctx, c.Config.QueryParams)
}

return nil, UnimplementedOperationError{method: c.Config.Method, route: route}
}
4 changes: 4 additions & 0 deletions tests/get/v1/validator/aggregate_attestations/200_0.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"method": "GET",
"route": "/eth/v1/validator/aggregate_attestation"
}
4 changes: 4 additions & 0 deletions tests/get/v1/validator/attestation_data/200_0.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"method": "GET",
"route": "/eth/v1/validator/attestation_data"
}
4 changes: 4 additions & 0 deletions tests/get/v1/validator/blocks/2666/200_0.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"method": "GET",
"route": "/eth/v1/validator/blocks/2666"
}
4 changes: 4 additions & 0 deletions tests/get/v1/validator/duties/attester/2666/200_0.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"method": "GET",
"route": "/eth/v1/validator/duties/attester/2666"
}
4 changes: 4 additions & 0 deletions tests/get/v1/validator/duties/proposer/2666/200_0.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"method": "GET",
"route": "/eth/v1/validator/duties/proposer/2666"
}

0 comments on commit 390a822

Please sign in to comment.