vouch/services/submitter/immediate/service_test.go

786 lines
36 KiB
Go

// Copyright © 2020 Attestant Limited.
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package immediate_test
import (
"context"
"testing"
api "github.com/attestantio/go-eth2-client/api/v1"
"github.com/attestantio/go-eth2-client/spec"
"github.com/attestantio/go-eth2-client/spec/altair"
"github.com/attestantio/go-eth2-client/spec/phase0"
"github.com/attestantio/vouch/mock"
"github.com/attestantio/vouch/services/submitter"
"github.com/attestantio/vouch/services/submitter/immediate"
"github.com/rs/zerolog"
"github.com/stretchr/testify/require"
)
func TestService(t *testing.T) {
attestationsSubmitter := mock.NewAttestationsSubmitter()
beaconBlockSubmitter := mock.NewBeaconBlockSubmitter()
beaconCommitteeSubscriptionSubmitter := mock.NewBeaconCommitteeSubscriptionsSubmitter()
aggregateAttestationSubmitter := mock.NewAggregateAttestationsSubmitter()
syncCommitteeMessagesSubmitter := mock.NewSyncCommitteeMessagesSubmitter()
syncCommitteeSubscriptionsSubmitter := mock.NewSyncCommitteeSubscriptionsSubmitter()
syncCommitteeContributionsSubmitter := mock.NewSyncCommitteeContributionsSubmitter()
tests := []struct {
name string
params []immediate.Parameter
err string
}{
{
name: "ClientMonitorMisssing",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.TraceLevel),
immediate.WithClientMonitor(nil),
immediate.WithAttestationsSubmitter(attestationsSubmitter),
immediate.WithBeaconBlockSubmitter(beaconBlockSubmitter),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(beaconCommitteeSubscriptionSubmitter),
immediate.WithAggregateAttestationsSubmitter(aggregateAttestationSubmitter),
immediate.WithSyncCommitteeSubscriptionsSubmitter(syncCommitteeSubscriptionsSubmitter),
immediate.WithSyncCommitteeMessagesSubmitter(syncCommitteeMessagesSubmitter),
immediate.WithSyncCommitteeContributionsSubmitter(syncCommitteeContributionsSubmitter),
},
err: "problem with parameters: no client monitor specified",
},
{
name: "AttestationsSubmitterMissing",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.Disabled),
immediate.WithBeaconBlockSubmitter(beaconBlockSubmitter),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(beaconCommitteeSubscriptionSubmitter),
immediate.WithAggregateAttestationsSubmitter(aggregateAttestationSubmitter),
immediate.WithSyncCommitteeSubscriptionsSubmitter(syncCommitteeSubscriptionsSubmitter),
immediate.WithSyncCommitteeMessagesSubmitter(syncCommitteeMessagesSubmitter),
immediate.WithSyncCommitteeContributionsSubmitter(syncCommitteeContributionsSubmitter),
},
err: "problem with parameters: no attestations submitter specified",
},
{
name: "BeaconBlockSubmitterMissing",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.Disabled),
immediate.WithAttestationsSubmitter(attestationsSubmitter),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(beaconCommitteeSubscriptionSubmitter),
immediate.WithAggregateAttestationsSubmitter(aggregateAttestationSubmitter),
immediate.WithSyncCommitteeSubscriptionsSubmitter(syncCommitteeSubscriptionsSubmitter),
immediate.WithSyncCommitteeMessagesSubmitter(syncCommitteeMessagesSubmitter),
immediate.WithSyncCommitteeContributionsSubmitter(syncCommitteeContributionsSubmitter),
},
err: "problem with parameters: no beacon block submitter specified",
},
{
name: "AttestationSubnetSubscriptionsSubmitterMissing",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.Disabled),
immediate.WithAttestationsSubmitter(attestationsSubmitter),
immediate.WithBeaconBlockSubmitter(beaconBlockSubmitter),
immediate.WithAggregateAttestationsSubmitter(aggregateAttestationSubmitter),
immediate.WithSyncCommitteeSubscriptionsSubmitter(syncCommitteeSubscriptionsSubmitter),
immediate.WithSyncCommitteeMessagesSubmitter(syncCommitteeMessagesSubmitter),
immediate.WithSyncCommitteeContributionsSubmitter(syncCommitteeContributionsSubmitter),
},
err: "problem with parameters: no beacon committee subscriptions submitter specified",
},
{
name: "AggregateAttestationSubmitterMissing",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.Disabled),
immediate.WithAttestationsSubmitter(attestationsSubmitter),
immediate.WithBeaconBlockSubmitter(beaconBlockSubmitter),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(beaconCommitteeSubscriptionSubmitter),
immediate.WithSyncCommitteeSubscriptionsSubmitter(syncCommitteeSubscriptionsSubmitter),
immediate.WithSyncCommitteeMessagesSubmitter(syncCommitteeMessagesSubmitter),
immediate.WithSyncCommitteeContributionsSubmitter(syncCommitteeContributionsSubmitter),
},
err: "problem with parameters: no aggregate attestations submitter specified",
},
{
name: "SyncCommitteeSubscriptionsSubmitterMissing",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.TraceLevel),
immediate.WithAttestationsSubmitter(attestationsSubmitter),
immediate.WithBeaconBlockSubmitter(beaconBlockSubmitter),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(beaconCommitteeSubscriptionSubmitter),
immediate.WithSyncCommitteeMessagesSubmitter(syncCommitteeMessagesSubmitter),
immediate.WithSyncCommitteeContributionsSubmitter(syncCommitteeContributionsSubmitter),
},
err: "problem with parameters: no sync committee subscriptions submitter specified",
},
{
name: "SyncCommitteeMessagesSubmitterMissing",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.TraceLevel),
immediate.WithAttestationsSubmitter(attestationsSubmitter),
immediate.WithBeaconBlockSubmitter(beaconBlockSubmitter),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(beaconCommitteeSubscriptionSubmitter),
immediate.WithAggregateAttestationsSubmitter(aggregateAttestationSubmitter),
immediate.WithSyncCommitteeSubscriptionsSubmitter(syncCommitteeSubscriptionsSubmitter),
immediate.WithSyncCommitteeContributionsSubmitter(syncCommitteeContributionsSubmitter),
},
err: "problem with parameters: no sync committee messages submitter specified",
},
{
name: "SyncCommitteeContributionsSubmitterMissing",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.TraceLevel),
immediate.WithAttestationsSubmitter(attestationsSubmitter),
immediate.WithBeaconBlockSubmitter(beaconBlockSubmitter),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(beaconCommitteeSubscriptionSubmitter),
immediate.WithAggregateAttestationsSubmitter(aggregateAttestationSubmitter),
immediate.WithSyncCommitteeSubscriptionsSubmitter(syncCommitteeSubscriptionsSubmitter),
immediate.WithSyncCommitteeMessagesSubmitter(syncCommitteeMessagesSubmitter),
},
err: "problem with parameters: no sync committee contributions submitter specified",
},
{
name: "Good",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.TraceLevel),
immediate.WithAttestationsSubmitter(attestationsSubmitter),
immediate.WithBeaconBlockSubmitter(beaconBlockSubmitter),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(beaconCommitteeSubscriptionSubmitter),
immediate.WithAggregateAttestationsSubmitter(aggregateAttestationSubmitter),
immediate.WithSyncCommitteeSubscriptionsSubmitter(syncCommitteeSubscriptionsSubmitter),
immediate.WithSyncCommitteeMessagesSubmitter(syncCommitteeMessagesSubmitter),
immediate.WithSyncCommitteeContributionsSubmitter(syncCommitteeContributionsSubmitter),
},
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
_, err := immediate.New(context.Background(), test.params...)
if test.err != "" {
require.EqualError(t, err, test.err)
} else {
require.NoError(t, err)
}
})
}
}
func TestInterfaces(t *testing.T) {
s, err := immediate.New(context.Background(),
immediate.WithLogLevel(zerolog.Disabled),
immediate.WithAttestationsSubmitter(mock.NewAttestationsSubmitter()),
immediate.WithBeaconBlockSubmitter(mock.NewBeaconBlockSubmitter()),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(mock.NewBeaconCommitteeSubscriptionsSubmitter()),
immediate.WithAggregateAttestationsSubmitter(mock.NewAggregateAttestationsSubmitter()),
immediate.WithSyncCommitteeSubscriptionsSubmitter(mock.NewSyncCommitteeSubscriptionsSubmitter()),
immediate.WithSyncCommitteeMessagesSubmitter(mock.NewSyncCommitteeMessagesSubmitter()),
immediate.WithSyncCommitteeContributionsSubmitter(mock.NewSyncCommitteeContributionsSubmitter()),
)
require.NoError(t, err)
require.Implements(t, (*submitter.BeaconBlockSubmitter)(nil), s)
require.Implements(t, (*submitter.AttestationsSubmitter)(nil), s)
require.Implements(t, (*submitter.BeaconCommitteeSubscriptionsSubmitter)(nil), s)
require.Implements(t, (*submitter.AggregateAttestationsSubmitter)(nil), s)
}
func TestSubmitBeaconBlock(t *testing.T) {
tests := []struct {
name string
params []immediate.Parameter
block *spec.VersionedSignedBeaconBlock
err string
}{
{
name: "Nil",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.Disabled),
immediate.WithAttestationsSubmitter(mock.NewAttestationsSubmitter()),
immediate.WithBeaconBlockSubmitter(mock.NewBeaconBlockSubmitter()),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(mock.NewBeaconCommitteeSubscriptionsSubmitter()),
immediate.WithAggregateAttestationsSubmitter(mock.NewAggregateAttestationsSubmitter()),
immediate.WithSyncCommitteeSubscriptionsSubmitter(mock.NewSyncCommitteeSubscriptionsSubmitter()),
immediate.WithSyncCommitteeMessagesSubmitter(mock.NewSyncCommitteeMessagesSubmitter()),
immediate.WithSyncCommitteeContributionsSubmitter(mock.NewSyncCommitteeContributionsSubmitter()),
},
err: "no beacon block supplied",
},
{
name: "Empty",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.Disabled),
immediate.WithAttestationsSubmitter(mock.NewAttestationsSubmitter()),
immediate.WithBeaconBlockSubmitter(mock.NewBeaconBlockSubmitter()),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(mock.NewBeaconCommitteeSubscriptionsSubmitter()),
immediate.WithAggregateAttestationsSubmitter(mock.NewAggregateAttestationsSubmitter()),
immediate.WithSyncCommitteeSubscriptionsSubmitter(mock.NewSyncCommitteeSubscriptionsSubmitter()),
immediate.WithSyncCommitteeMessagesSubmitter(mock.NewSyncCommitteeMessagesSubmitter()),
immediate.WithSyncCommitteeContributionsSubmitter(mock.NewSyncCommitteeContributionsSubmitter()),
},
block: &spec.VersionedSignedBeaconBlock{},
},
{
name: "Erroring",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.Disabled),
immediate.WithAttestationsSubmitter(mock.NewAttestationsSubmitter()),
immediate.WithBeaconBlockSubmitter(mock.NewErroringBeaconBlockSubmitter()),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(mock.NewBeaconCommitteeSubscriptionsSubmitter()),
immediate.WithAggregateAttestationsSubmitter(mock.NewAggregateAttestationsSubmitter()),
immediate.WithSyncCommitteeSubscriptionsSubmitter(mock.NewSyncCommitteeSubscriptionsSubmitter()),
immediate.WithSyncCommitteeMessagesSubmitter(mock.NewSyncCommitteeMessagesSubmitter()),
immediate.WithSyncCommitteeContributionsSubmitter(mock.NewSyncCommitteeContributionsSubmitter()),
},
block: &spec.VersionedSignedBeaconBlock{},
err: "failed to submit beacon block: error",
},
{
name: "Good",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.TraceLevel),
immediate.WithAttestationsSubmitter(mock.NewAttestationsSubmitter()),
immediate.WithBeaconBlockSubmitter(mock.NewBeaconBlockSubmitter()),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(mock.NewBeaconCommitteeSubscriptionsSubmitter()),
immediate.WithAggregateAttestationsSubmitter(mock.NewAggregateAttestationsSubmitter()),
immediate.WithSyncCommitteeSubscriptionsSubmitter(mock.NewSyncCommitteeSubscriptionsSubmitter()),
immediate.WithSyncCommitteeMessagesSubmitter(mock.NewSyncCommitteeMessagesSubmitter()),
immediate.WithSyncCommitteeContributionsSubmitter(mock.NewSyncCommitteeContributionsSubmitter()),
},
block: &spec.VersionedSignedBeaconBlock{},
},
}
for _, test := range tests {
s, err := immediate.New(context.Background(), test.params...)
require.NoError(t, err)
t.Run(test.name, func(t *testing.T) {
err := s.SubmitBeaconBlock(context.Background(), test.block)
if test.err != "" {
require.EqualError(t, err, test.err)
} else {
require.NoError(t, err)
}
})
}
}
func TestSubmitAttestations(t *testing.T) {
tests := []struct {
name string
params []immediate.Parameter
attestations []*phase0.Attestation
err string
}{
{
name: "Nil",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.Disabled),
immediate.WithAttestationsSubmitter(mock.NewAttestationsSubmitter()),
immediate.WithBeaconBlockSubmitter(mock.NewBeaconBlockSubmitter()),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(mock.NewBeaconCommitteeSubscriptionsSubmitter()),
immediate.WithAggregateAttestationsSubmitter(mock.NewAggregateAttestationsSubmitter()),
immediate.WithSyncCommitteeSubscriptionsSubmitter(mock.NewSyncCommitteeSubscriptionsSubmitter()),
immediate.WithSyncCommitteeMessagesSubmitter(mock.NewSyncCommitteeMessagesSubmitter()),
immediate.WithSyncCommitteeContributionsSubmitter(mock.NewSyncCommitteeContributionsSubmitter()),
},
err: "no attestations supplied",
},
{
name: "Empty",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.Disabled),
immediate.WithAttestationsSubmitter(mock.NewAttestationsSubmitter()),
immediate.WithBeaconBlockSubmitter(mock.NewBeaconBlockSubmitter()),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(mock.NewBeaconCommitteeSubscriptionsSubmitter()),
immediate.WithAggregateAttestationsSubmitter(mock.NewAggregateAttestationsSubmitter()),
immediate.WithSyncCommitteeSubscriptionsSubmitter(mock.NewSyncCommitteeSubscriptionsSubmitter()),
immediate.WithSyncCommitteeMessagesSubmitter(mock.NewSyncCommitteeMessagesSubmitter()),
immediate.WithSyncCommitteeContributionsSubmitter(mock.NewSyncCommitteeContributionsSubmitter()),
},
attestations: []*phase0.Attestation{},
err: "no attestations supplied",
},
{
name: "Erroring",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.Disabled),
immediate.WithAttestationsSubmitter(mock.NewErroringAttestationsSubmitter()),
immediate.WithBeaconBlockSubmitter(mock.NewBeaconBlockSubmitter()),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(mock.NewBeaconCommitteeSubscriptionsSubmitter()),
immediate.WithAggregateAttestationsSubmitter(mock.NewAggregateAttestationsSubmitter()),
immediate.WithSyncCommitteeSubscriptionsSubmitter(mock.NewSyncCommitteeSubscriptionsSubmitter()),
immediate.WithSyncCommitteeMessagesSubmitter(mock.NewSyncCommitteeMessagesSubmitter()),
immediate.WithSyncCommitteeContributionsSubmitter(mock.NewSyncCommitteeContributionsSubmitter()),
},
attestations: []*phase0.Attestation{{}},
err: "failed to submit attestations: error",
},
{
name: "Good",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.TraceLevel),
immediate.WithAttestationsSubmitter(mock.NewAttestationsSubmitter()),
immediate.WithBeaconBlockSubmitter(mock.NewBeaconBlockSubmitter()),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(mock.NewBeaconCommitteeSubscriptionsSubmitter()),
immediate.WithAggregateAttestationsSubmitter(mock.NewAggregateAttestationsSubmitter()),
immediate.WithSyncCommitteeSubscriptionsSubmitter(mock.NewSyncCommitteeSubscriptionsSubmitter()),
immediate.WithSyncCommitteeMessagesSubmitter(mock.NewSyncCommitteeMessagesSubmitter()),
immediate.WithSyncCommitteeContributionsSubmitter(mock.NewSyncCommitteeContributionsSubmitter()),
},
attestations: []*phase0.Attestation{{}},
},
}
for _, test := range tests {
s, err := immediate.New(context.Background(), test.params...)
require.NoError(t, err)
t.Run(test.name, func(t *testing.T) {
err := s.SubmitAttestations(context.Background(), test.attestations)
if test.err != "" {
require.EqualError(t, err, test.err)
} else {
require.NoError(t, err)
}
})
}
}
func TestSubmitAggregateAttestations(t *testing.T) {
tests := []struct {
name string
params []immediate.Parameter
aggregates []*phase0.SignedAggregateAndProof
err string
}{
{
name: "Nil",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.Disabled),
immediate.WithAttestationsSubmitter(mock.NewAttestationsSubmitter()),
immediate.WithBeaconBlockSubmitter(mock.NewBeaconBlockSubmitter()),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(mock.NewBeaconCommitteeSubscriptionsSubmitter()),
immediate.WithAggregateAttestationsSubmitter(mock.NewAggregateAttestationsSubmitter()),
immediate.WithSyncCommitteeSubscriptionsSubmitter(mock.NewSyncCommitteeSubscriptionsSubmitter()),
immediate.WithSyncCommitteeMessagesSubmitter(mock.NewSyncCommitteeMessagesSubmitter()),
immediate.WithSyncCommitteeContributionsSubmitter(mock.NewSyncCommitteeContributionsSubmitter()),
},
err: "no aggregate attestations supplied",
},
{
name: "Empty",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.Disabled),
immediate.WithAttestationsSubmitter(mock.NewAttestationsSubmitter()),
immediate.WithBeaconBlockSubmitter(mock.NewBeaconBlockSubmitter()),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(mock.NewBeaconCommitteeSubscriptionsSubmitter()),
immediate.WithAggregateAttestationsSubmitter(mock.NewAggregateAttestationsSubmitter()),
immediate.WithSyncCommitteeSubscriptionsSubmitter(mock.NewSyncCommitteeSubscriptionsSubmitter()),
immediate.WithSyncCommitteeMessagesSubmitter(mock.NewSyncCommitteeMessagesSubmitter()),
immediate.WithSyncCommitteeContributionsSubmitter(mock.NewSyncCommitteeContributionsSubmitter()),
},
aggregates: []*phase0.SignedAggregateAndProof{},
err: "no aggregate attestations supplied",
},
{
name: "Erroring",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.Disabled),
immediate.WithAttestationsSubmitter(mock.NewAttestationsSubmitter()),
immediate.WithBeaconBlockSubmitter(mock.NewBeaconBlockSubmitter()),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(mock.NewBeaconCommitteeSubscriptionsSubmitter()),
immediate.WithAggregateAttestationsSubmitter(mock.NewErroringAggregateAttestationsSubmitter()),
immediate.WithSyncCommitteeSubscriptionsSubmitter(mock.NewSyncCommitteeSubscriptionsSubmitter()),
immediate.WithSyncCommitteeMessagesSubmitter(mock.NewSyncCommitteeMessagesSubmitter()),
immediate.WithSyncCommitteeContributionsSubmitter(mock.NewSyncCommitteeContributionsSubmitter()),
},
aggregates: []*phase0.SignedAggregateAndProof{
{},
},
err: "failed to submit aggregate attestation: error",
},
{
name: "Good",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.TraceLevel),
immediate.WithAttestationsSubmitter(mock.NewAttestationsSubmitter()),
immediate.WithBeaconBlockSubmitter(mock.NewBeaconBlockSubmitter()),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(mock.NewBeaconCommitteeSubscriptionsSubmitter()),
immediate.WithAggregateAttestationsSubmitter(mock.NewAggregateAttestationsSubmitter()),
immediate.WithSyncCommitteeSubscriptionsSubmitter(mock.NewSyncCommitteeSubscriptionsSubmitter()),
immediate.WithSyncCommitteeMessagesSubmitter(mock.NewSyncCommitteeMessagesSubmitter()),
immediate.WithSyncCommitteeContributionsSubmitter(mock.NewSyncCommitteeContributionsSubmitter()),
},
aggregates: []*phase0.SignedAggregateAndProof{
{},
},
},
}
for _, test := range tests {
s, err := immediate.New(context.Background(), test.params...)
require.NoError(t, err)
t.Run(test.name, func(t *testing.T) {
err := s.SubmitAggregateAttestations(context.Background(), test.aggregates)
if test.err != "" {
require.EqualError(t, err, test.err)
} else {
require.NoError(t, err)
}
})
}
}
func TestSubmitBeaconCommitteeSubscriptions(t *testing.T) {
tests := []struct {
name string
params []immediate.Parameter
subscriptions []*api.BeaconCommitteeSubscription
err string
}{
{
name: "Nil",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.Disabled),
immediate.WithAttestationsSubmitter(mock.NewAttestationsSubmitter()),
immediate.WithBeaconBlockSubmitter(mock.NewBeaconBlockSubmitter()),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(mock.NewBeaconCommitteeSubscriptionsSubmitter()),
immediate.WithAggregateAttestationsSubmitter(mock.NewAggregateAttestationsSubmitter()),
immediate.WithSyncCommitteeSubscriptionsSubmitter(mock.NewSyncCommitteeSubscriptionsSubmitter()),
immediate.WithSyncCommitteeMessagesSubmitter(mock.NewSyncCommitteeMessagesSubmitter()),
immediate.WithSyncCommitteeContributionsSubmitter(mock.NewSyncCommitteeContributionsSubmitter()),
},
err: "no beacon committee subscriptions supplied",
},
{
name: "Empty",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.Disabled),
immediate.WithAttestationsSubmitter(mock.NewAttestationsSubmitter()),
immediate.WithBeaconBlockSubmitter(mock.NewBeaconBlockSubmitter()),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(mock.NewBeaconCommitteeSubscriptionsSubmitter()),
immediate.WithAggregateAttestationsSubmitter(mock.NewAggregateAttestationsSubmitter()),
immediate.WithSyncCommitteeSubscriptionsSubmitter(mock.NewSyncCommitteeSubscriptionsSubmitter()),
immediate.WithSyncCommitteeMessagesSubmitter(mock.NewSyncCommitteeMessagesSubmitter()),
immediate.WithSyncCommitteeContributionsSubmitter(mock.NewSyncCommitteeContributionsSubmitter()),
},
subscriptions: []*api.BeaconCommitteeSubscription{},
err: "no beacon committee subscriptions supplied",
},
{
name: "Erroring",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.Disabled),
immediate.WithAttestationsSubmitter(mock.NewAttestationsSubmitter()),
immediate.WithBeaconBlockSubmitter(mock.NewBeaconBlockSubmitter()),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(mock.NewErroringBeaconCommitteeSubscriptionsSubmitter()),
immediate.WithAggregateAttestationsSubmitter(mock.NewAggregateAttestationsSubmitter()),
immediate.WithSyncCommitteeSubscriptionsSubmitter(mock.NewSyncCommitteeSubscriptionsSubmitter()),
immediate.WithSyncCommitteeMessagesSubmitter(mock.NewSyncCommitteeMessagesSubmitter()),
immediate.WithSyncCommitteeContributionsSubmitter(mock.NewSyncCommitteeContributionsSubmitter()),
},
subscriptions: []*api.BeaconCommitteeSubscription{
{},
},
err: "failed to submit beacon committee subscriptions: error",
},
{
name: "Good",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.TraceLevel),
immediate.WithAttestationsSubmitter(mock.NewAttestationsSubmitter()),
immediate.WithBeaconBlockSubmitter(mock.NewBeaconBlockSubmitter()),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(mock.NewBeaconCommitteeSubscriptionsSubmitter()),
immediate.WithAggregateAttestationsSubmitter(mock.NewAggregateAttestationsSubmitter()),
immediate.WithSyncCommitteeSubscriptionsSubmitter(mock.NewSyncCommitteeSubscriptionsSubmitter()),
immediate.WithSyncCommitteeMessagesSubmitter(mock.NewSyncCommitteeMessagesSubmitter()),
immediate.WithSyncCommitteeContributionsSubmitter(mock.NewSyncCommitteeContributionsSubmitter()),
},
subscriptions: []*api.BeaconCommitteeSubscription{
{},
},
},
}
for _, test := range tests {
s, err := immediate.New(context.Background(), test.params...)
require.NoError(t, err)
t.Run(test.name, func(t *testing.T) {
err := s.SubmitBeaconCommitteeSubscriptions(context.Background(), test.subscriptions)
if test.err != "" {
require.EqualError(t, err, test.err)
} else {
require.NoError(t, err)
}
})
}
}
func TestSubmitSyncCommitteeSubscriptions(t *testing.T) {
tests := []struct {
name string
params []immediate.Parameter
subscriptions []*api.SyncCommitteeSubscription
err string
}{
{
name: "Nil",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.Disabled),
immediate.WithAttestationsSubmitter(mock.NewAttestationsSubmitter()),
immediate.WithBeaconBlockSubmitter(mock.NewBeaconBlockSubmitter()),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(mock.NewBeaconCommitteeSubscriptionsSubmitter()),
immediate.WithAggregateAttestationsSubmitter(mock.NewAggregateAttestationsSubmitter()),
immediate.WithSyncCommitteeSubscriptionsSubmitter(mock.NewSyncCommitteeSubscriptionsSubmitter()),
immediate.WithSyncCommitteeMessagesSubmitter(mock.NewSyncCommitteeMessagesSubmitter()),
immediate.WithSyncCommitteeContributionsSubmitter(mock.NewSyncCommitteeContributionsSubmitter()),
},
err: "no sync committee subscriptions supplied",
},
{
name: "Empty",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.Disabled),
immediate.WithAttestationsSubmitter(mock.NewAttestationsSubmitter()),
immediate.WithBeaconBlockSubmitter(mock.NewBeaconBlockSubmitter()),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(mock.NewBeaconCommitteeSubscriptionsSubmitter()),
immediate.WithAggregateAttestationsSubmitter(mock.NewAggregateAttestationsSubmitter()),
immediate.WithSyncCommitteeSubscriptionsSubmitter(mock.NewSyncCommitteeSubscriptionsSubmitter()),
immediate.WithSyncCommitteeMessagesSubmitter(mock.NewSyncCommitteeMessagesSubmitter()),
immediate.WithSyncCommitteeContributionsSubmitter(mock.NewSyncCommitteeContributionsSubmitter()),
},
subscriptions: []*api.SyncCommitteeSubscription{},
err: "no sync committee subscriptions supplied",
},
{
name: "Erroring",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.Disabled),
immediate.WithAttestationsSubmitter(mock.NewAttestationsSubmitter()),
immediate.WithBeaconBlockSubmitter(mock.NewBeaconBlockSubmitter()),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(mock.NewBeaconCommitteeSubscriptionsSubmitter()),
immediate.WithAggregateAttestationsSubmitter(mock.NewAggregateAttestationsSubmitter()),
immediate.WithSyncCommitteeSubscriptionsSubmitter(mock.NewErroringSyncCommitteeSubscriptionsSubmitter()),
immediate.WithSyncCommitteeMessagesSubmitter(mock.NewSyncCommitteeMessagesSubmitter()),
immediate.WithSyncCommitteeContributionsSubmitter(mock.NewSyncCommitteeContributionsSubmitter()),
},
subscriptions: []*api.SyncCommitteeSubscription{
{},
},
err: "failed to submit sync committee subscriptions: error",
},
{
name: "Good",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.TraceLevel),
immediate.WithAttestationsSubmitter(mock.NewAttestationsSubmitter()),
immediate.WithBeaconBlockSubmitter(mock.NewBeaconBlockSubmitter()),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(mock.NewBeaconCommitteeSubscriptionsSubmitter()),
immediate.WithAggregateAttestationsSubmitter(mock.NewAggregateAttestationsSubmitter()),
immediate.WithSyncCommitteeSubscriptionsSubmitter(mock.NewSyncCommitteeSubscriptionsSubmitter()),
immediate.WithSyncCommitteeMessagesSubmitter(mock.NewSyncCommitteeMessagesSubmitter()),
immediate.WithSyncCommitteeContributionsSubmitter(mock.NewSyncCommitteeContributionsSubmitter()),
},
subscriptions: []*api.SyncCommitteeSubscription{
{},
},
},
}
for _, test := range tests {
s, err := immediate.New(context.Background(), test.params...)
require.NoError(t, err)
t.Run(test.name, func(t *testing.T) {
err := s.SubmitSyncCommitteeSubscriptions(context.Background(), test.subscriptions)
if test.err != "" {
require.EqualError(t, err, test.err)
} else {
require.NoError(t, err)
}
})
}
}
func TestSubmitSyncCommitteeMessages(t *testing.T) {
tests := []struct {
name string
params []immediate.Parameter
messages []*altair.SyncCommitteeMessage
err string
}{
{
name: "Nil",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.Disabled),
immediate.WithAttestationsSubmitter(mock.NewAttestationsSubmitter()),
immediate.WithBeaconBlockSubmitter(mock.NewBeaconBlockSubmitter()),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(mock.NewBeaconCommitteeSubscriptionsSubmitter()),
immediate.WithAggregateAttestationsSubmitter(mock.NewAggregateAttestationsSubmitter()),
immediate.WithSyncCommitteeSubscriptionsSubmitter(mock.NewSyncCommitteeSubscriptionsSubmitter()),
immediate.WithSyncCommitteeMessagesSubmitter(mock.NewSyncCommitteeMessagesSubmitter()),
immediate.WithSyncCommitteeContributionsSubmitter(mock.NewSyncCommitteeContributionsSubmitter()),
},
err: "no sync committee messages supplied",
},
{
name: "Empty",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.Disabled),
immediate.WithAttestationsSubmitter(mock.NewAttestationsSubmitter()),
immediate.WithBeaconBlockSubmitter(mock.NewBeaconBlockSubmitter()),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(mock.NewBeaconCommitteeSubscriptionsSubmitter()),
immediate.WithAggregateAttestationsSubmitter(mock.NewAggregateAttestationsSubmitter()),
immediate.WithSyncCommitteeSubscriptionsSubmitter(mock.NewSyncCommitteeSubscriptionsSubmitter()),
immediate.WithSyncCommitteeMessagesSubmitter(mock.NewSyncCommitteeMessagesSubmitter()),
immediate.WithSyncCommitteeContributionsSubmitter(mock.NewSyncCommitteeContributionsSubmitter()),
},
messages: []*altair.SyncCommitteeMessage{},
err: "no sync committee messages supplied",
},
{
name: "Erroring",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.Disabled),
immediate.WithAttestationsSubmitter(mock.NewAttestationsSubmitter()),
immediate.WithBeaconBlockSubmitter(mock.NewBeaconBlockSubmitter()),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(mock.NewBeaconCommitteeSubscriptionsSubmitter()),
immediate.WithAggregateAttestationsSubmitter(mock.NewAggregateAttestationsSubmitter()),
immediate.WithSyncCommitteeSubscriptionsSubmitter(mock.NewSyncCommitteeSubscriptionsSubmitter()),
immediate.WithSyncCommitteeMessagesSubmitter(mock.NewErroringSyncCommitteeMessagesSubmitter()),
immediate.WithSyncCommitteeContributionsSubmitter(mock.NewSyncCommitteeContributionsSubmitter()),
},
messages: []*altair.SyncCommitteeMessage{
{},
},
err: "failed to submit sync committee messages: error",
},
{
name: "Good",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.TraceLevel),
immediate.WithAttestationsSubmitter(mock.NewAttestationsSubmitter()),
immediate.WithBeaconBlockSubmitter(mock.NewBeaconBlockSubmitter()),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(mock.NewBeaconCommitteeSubscriptionsSubmitter()),
immediate.WithAggregateAttestationsSubmitter(mock.NewAggregateAttestationsSubmitter()),
immediate.WithSyncCommitteeSubscriptionsSubmitter(mock.NewSyncCommitteeSubscriptionsSubmitter()),
immediate.WithSyncCommitteeMessagesSubmitter(mock.NewSyncCommitteeMessagesSubmitter()),
immediate.WithSyncCommitteeContributionsSubmitter(mock.NewSyncCommitteeContributionsSubmitter()),
},
messages: []*altair.SyncCommitteeMessage{
{},
},
},
}
for _, test := range tests {
s, err := immediate.New(context.Background(), test.params...)
require.NoError(t, err)
t.Run(test.name, func(t *testing.T) {
err := s.SubmitSyncCommitteeMessages(context.Background(), test.messages)
if test.err != "" {
require.EqualError(t, err, test.err)
} else {
require.NoError(t, err)
}
})
}
}
func TestSubmitSyncCommitteeContributions(t *testing.T) {
tests := []struct {
name string
params []immediate.Parameter
contributions []*altair.SignedContributionAndProof
err string
}{
{
name: "Nil",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.Disabled),
immediate.WithAttestationsSubmitter(mock.NewAttestationsSubmitter()),
immediate.WithBeaconBlockSubmitter(mock.NewBeaconBlockSubmitter()),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(mock.NewBeaconCommitteeSubscriptionsSubmitter()),
immediate.WithAggregateAttestationsSubmitter(mock.NewAggregateAttestationsSubmitter()),
immediate.WithSyncCommitteeSubscriptionsSubmitter(mock.NewSyncCommitteeSubscriptionsSubmitter()),
immediate.WithSyncCommitteeMessagesSubmitter(mock.NewSyncCommitteeMessagesSubmitter()),
immediate.WithSyncCommitteeContributionsSubmitter(mock.NewSyncCommitteeContributionsSubmitter()),
},
err: "no sync committee contribution and proofs supplied",
},
{
name: "Empty",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.Disabled),
immediate.WithAttestationsSubmitter(mock.NewAttestationsSubmitter()),
immediate.WithBeaconBlockSubmitter(mock.NewBeaconBlockSubmitter()),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(mock.NewBeaconCommitteeSubscriptionsSubmitter()),
immediate.WithAggregateAttestationsSubmitter(mock.NewAggregateAttestationsSubmitter()),
immediate.WithSyncCommitteeSubscriptionsSubmitter(mock.NewSyncCommitteeSubscriptionsSubmitter()),
immediate.WithSyncCommitteeMessagesSubmitter(mock.NewSyncCommitteeMessagesSubmitter()),
immediate.WithSyncCommitteeContributionsSubmitter(mock.NewSyncCommitteeContributionsSubmitter()),
},
contributions: []*altair.SignedContributionAndProof{},
err: "no sync committee contribution and proofs supplied",
},
{
name: "Erroring",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.Disabled),
immediate.WithAttestationsSubmitter(mock.NewAttestationsSubmitter()),
immediate.WithBeaconBlockSubmitter(mock.NewBeaconBlockSubmitter()),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(mock.NewBeaconCommitteeSubscriptionsSubmitter()),
immediate.WithAggregateAttestationsSubmitter(mock.NewAggregateAttestationsSubmitter()),
immediate.WithSyncCommitteeSubscriptionsSubmitter(mock.NewSyncCommitteeSubscriptionsSubmitter()),
immediate.WithSyncCommitteeMessagesSubmitter(mock.NewSyncCommitteeMessagesSubmitter()),
immediate.WithSyncCommitteeContributionsSubmitter(mock.NewErroringSyncCommitteeContributionsSubmitter()),
},
contributions: []*altair.SignedContributionAndProof{
{},
},
err: "failed to submit sync committee contribution and proofs: error",
},
{
name: "Good",
params: []immediate.Parameter{
immediate.WithLogLevel(zerolog.TraceLevel),
immediate.WithAttestationsSubmitter(mock.NewAttestationsSubmitter()),
immediate.WithBeaconBlockSubmitter(mock.NewBeaconBlockSubmitter()),
immediate.WithBeaconCommitteeSubscriptionsSubmitter(mock.NewBeaconCommitteeSubscriptionsSubmitter()),
immediate.WithAggregateAttestationsSubmitter(mock.NewAggregateAttestationsSubmitter()),
immediate.WithSyncCommitteeSubscriptionsSubmitter(mock.NewSyncCommitteeSubscriptionsSubmitter()),
immediate.WithSyncCommitteeMessagesSubmitter(mock.NewSyncCommitteeMessagesSubmitter()),
immediate.WithSyncCommitteeContributionsSubmitter(mock.NewSyncCommitteeContributionsSubmitter()),
},
contributions: []*altair.SignedContributionAndProof{
{},
},
},
}
for _, test := range tests {
s, err := immediate.New(context.Background(), test.params...)
require.NoError(t, err)
t.Run(test.name, func(t *testing.T) {
err := s.SubmitSyncCommitteeContributions(context.Background(), test.contributions)
if test.err != "" {
require.EqualError(t, err, test.err)
} else {
require.NoError(t, err)
}
})
}
}