added TestCountVoteTransactions
This commit is contained in:
parent
d06edc078e
commit
cb8422c563
|
@ -5,12 +5,18 @@ import (
|
|||
"github.com/prometheus/client_golang/prometheus"
|
||||
)
|
||||
|
||||
type GaugeDesc struct {
|
||||
Desc *prometheus.Desc
|
||||
Name string
|
||||
Help string
|
||||
VariableLabels []string
|
||||
}
|
||||
type (
|
||||
GaugeDesc struct {
|
||||
Desc *prometheus.Desc
|
||||
Name string
|
||||
Help string
|
||||
VariableLabels []string
|
||||
}
|
||||
collectionTest struct {
|
||||
Name string
|
||||
ExpectedResponse string
|
||||
}
|
||||
)
|
||||
|
||||
func NewGaugeDesc(name string, description string, variableLabels ...string) *GaugeDesc {
|
||||
return &GaugeDesc{
|
||||
|
|
|
@ -10,7 +10,6 @@ import (
|
|||
"github.com/stretchr/testify/assert"
|
||||
"math"
|
||||
"math/rand"
|
||||
"regexp"
|
||||
"slices"
|
||||
"strings"
|
||||
"testing"
|
||||
|
@ -37,10 +36,6 @@ type (
|
|||
}
|
||||
)
|
||||
|
||||
func voteTx(nodekey string) []string {
|
||||
return []string{nodekey, strings.ToUpper(nodekey), VoteProgram}
|
||||
}
|
||||
|
||||
func NewSimulator(t *testing.T, slot int) (*Simulator, *rpc.Client) {
|
||||
nodekeys := []string{"aaa", "bbb", "ccc"}
|
||||
votekeys := []string{"AAA", "BBB", "CCC"}
|
||||
|
@ -144,7 +139,7 @@ func (c *Simulator) PopulateSlot(slot int) {
|
|||
}
|
||||
// assume all validators voted
|
||||
for _, nodekey := range c.Nodekeys {
|
||||
transactions = append(transactions, voteTx(nodekey))
|
||||
transactions = append(transactions, []string{nodekey, strings.ToUpper(nodekey), VoteProgram})
|
||||
info := c.Server.GetValidatorInfo(nodekey)
|
||||
info.LastVote = slot
|
||||
c.Server.SetOpt(rpc.ValidatorInfoOpt, nodekey, info)
|
||||
|
@ -187,40 +182,6 @@ func (c *Simulator) PopulateSlot(slot int) {
|
|||
)
|
||||
}
|
||||
|
||||
/*
|
||||
===== OTHER TEST UTILITIES =====:
|
||||
*/
|
||||
|
||||
// extractName takes a Prometheus descriptor and returns its name
|
||||
func extractName(desc *prometheus.Desc) string {
|
||||
// Get the string representation of the descriptor
|
||||
descString := desc.String()
|
||||
// Use regex to extract the metric name and help message from the descriptor string
|
||||
reName := regexp.MustCompile(`fqName: "([^"]+)"`)
|
||||
nameMatch := reName.FindStringSubmatch(descString)
|
||||
|
||||
var name string
|
||||
if len(nameMatch) > 1 {
|
||||
name = nameMatch[1]
|
||||
}
|
||||
|
||||
return name
|
||||
}
|
||||
|
||||
type collectionTest struct {
|
||||
Name string
|
||||
ExpectedResponse string
|
||||
}
|
||||
|
||||
func runCollectionTests(t *testing.T, collector prometheus.Collector, testCases []collectionTest) {
|
||||
for _, test := range testCases {
|
||||
t.Run(test.Name, func(t *testing.T) {
|
||||
err := testutil.CollectAndCompare(collector, bytes.NewBufferString(test.ExpectedResponse), test.Name)
|
||||
assert.NoErrorf(t, err, "unexpected collecting result for %s: \n%s", test.Name, err)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func newTestConfig(simulator *Simulator, fast bool) *ExporterConfig {
|
||||
pace := time.Duration(100) * time.Second
|
||||
if fast {
|
||||
|
@ -292,5 +253,10 @@ func TestSolanaCollector(t *testing.T) {
|
|||
),
|
||||
}
|
||||
|
||||
runCollectionTests(t, collector, testCases)
|
||||
for _, test := range testCases {
|
||||
t.Run(test.Name, func(t *testing.T) {
|
||||
err := testutil.CollectAndCompare(collector, bytes.NewBufferString(test.ExpectedResponse), test.Name)
|
||||
assert.NoErrorf(t, err, "unexpected collecting result for %s: \n%s", test.Name, err)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ import (
|
|||
"github.com/prometheus/client_golang/prometheus"
|
||||
"github.com/prometheus/client_golang/prometheus/testutil"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"regexp"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
@ -20,6 +21,22 @@ type slotMetricValues struct {
|
|||
BlockHeight float64
|
||||
}
|
||||
|
||||
// extractName takes a Prometheus descriptor and returns its name
|
||||
func extractName(desc *prometheus.Desc) string {
|
||||
// Get the string representation of the descriptor
|
||||
descString := desc.String()
|
||||
// Use regex to extract the metric name and help message from the descriptor string
|
||||
reName := regexp.MustCompile(`fqName: "([^"]+)"`)
|
||||
nameMatch := reName.FindStringSubmatch(descString)
|
||||
|
||||
var name string
|
||||
if len(nameMatch) > 1 {
|
||||
name = nameMatch[1]
|
||||
}
|
||||
|
||||
return name
|
||||
}
|
||||
|
||||
func getSlotMetricValues(watcher *SlotWatcher) slotMetricValues {
|
||||
return slotMetricValues{
|
||||
SlotHeight: testutil.ToFloat64(watcher.SlotHeightMetric),
|
||||
|
@ -74,8 +91,7 @@ func assertSlotMetricsChangeCorrectly(t *testing.T, initial slotMetricValues, fi
|
|||
func TestSlotWatcher_WatchSlots_Static(t *testing.T) {
|
||||
// TODO: is this test necessary? If not - remove, else, could definitely do with a clean.
|
||||
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
ctx := context.Background()
|
||||
|
||||
simulator, client := NewSimulator(t, 35)
|
||||
watcher := NewSlotWatcher(client, newTestConfig(simulator, true))
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -2,19 +2,13 @@ package main
|
|||
|
||||
import (
|
||||
"context"
|
||||
_ "embed"
|
||||
"encoding/json"
|
||||
"github.com/asymmetric-research/solana_exporter/pkg/rpc"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"testing"
|
||||
)
|
||||
|
||||
var (
|
||||
rawLeaderSchedule = map[string]any{
|
||||
"aaa": []int{0, 3, 6, 9, 12},
|
||||
"bbb": []int{1, 4, 7, 10, 13},
|
||||
"ccc": []int{2, 5, 8, 11, 14},
|
||||
}
|
||||
)
|
||||
|
||||
func TestSelectFromSchedule(t *testing.T) {
|
||||
selected := SelectFromSchedule(
|
||||
map[string][]int64{
|
||||
|
@ -33,7 +27,14 @@ func TestSelectFromSchedule(t *testing.T) {
|
|||
|
||||
func TestGetTrimmedLeaderSchedule(t *testing.T) {
|
||||
_, client := rpc.NewMockClient(t,
|
||||
map[string]any{"getLeaderSchedule": rawLeaderSchedule}, nil, nil, nil, nil,
|
||||
map[string]any{
|
||||
"getLeaderSchedule": map[string]any{
|
||||
"aaa": []int{0, 3, 6, 9, 12},
|
||||
"bbb": []int{1, 4, 7, 10, 13},
|
||||
"ccc": []int{2, 5, 8, 11, 14},
|
||||
},
|
||||
},
|
||||
nil, nil, nil, nil,
|
||||
)
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
defer cancel()
|
||||
|
@ -87,3 +88,17 @@ func TestGetEpochBounds(t *testing.T) {
|
|||
assert.Equal(t, int64(20), first)
|
||||
assert.Equal(t, int64(29), last)
|
||||
}
|
||||
|
||||
//go:embed testdata/block-297609329.json
|
||||
var blockJson []byte
|
||||
|
||||
func TestCountVoteTransactions(t *testing.T) {
|
||||
var block rpc.Block
|
||||
err := json.Unmarshal(blockJson, &block)
|
||||
assert.NoError(t, err)
|
||||
|
||||
voteCount, err := CountVoteTransactions(&block)
|
||||
assert.NoError(t, err)
|
||||
// https://explorer.solana.com/block/297609329
|
||||
assert.Equal(t, 1048, voteCount)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue