prysm-pulse/shared/p2p/adapter/metric/metric_test.go
Raul Jordan 61026103c6
Validator Attester Rewrite (#1487)
* initial validator attesthead rewrite based on proposer rewrite

* proceed with fetching committees and tree hashing the canonical head at assigned attester slot

* complete filling the properties of attestation data and all associated root hashes

* add when to attest todo

* finish entire attester client logic

* tests with mocks checked in

* tests passing in client

* stubbed out server implementation

* fixed build due to old property

* regen mocks with new mockgen version

* fixed broken tests

* complete bazel build fix

* address some review comments

* deep proto test

* tests passing after checking for empty committee and crosslink root

* address nishant comments
2019-02-06 10:20:38 -06:00

66 lines
1.7 KiB
Go

package metric
import (
"context"
"fmt"
"io/ioutil"
"net/http"
"strings"
"testing"
"time"
pb "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1"
"github.com/prysmaticlabs/prysm/shared/p2p"
"github.com/prysmaticlabs/prysm/shared/prometheus"
)
const addr = "127.0.0.1:8989"
func TestMessageMetrics(t *testing.T) {
service := prometheus.NewPrometheusService(addr, nil)
go service.Start()
defer service.Stop()
adapter := New()
if adapter == nil {
t.Error("Expected metric adapter")
}
data := &pb.Attestation{
AggregationBitfield: []byte{99},
Data: &pb.AttestationData{
Slot: 0,
},
}
h := adapter(func(p2p.Message) { time.Sleep(10 * time.Millisecond) })
h(p2p.Message{Ctx: context.Background(), Data: data})
h = adapter(func(p2p.Message) { time.Sleep(100 * time.Microsecond) })
h(p2p.Message{Ctx: context.Background(), Data: data})
metrics := getMetrics(t)
testMetricExists(t, metrics, fmt.Sprintf("p2p_message_sent_total{message=\"%T\"} 2", data))
testMetricExists(t, metrics, fmt.Sprintf("p2p_message_sent_latency_seconds_bucket{message=\"%T\",le=\"0.005\"} 1", data))
testMetricExists(t, metrics, fmt.Sprintf("p2p_message_sent_latency_seconds_bucket{message=\"%T\",le=\"0.01\"} 1", data))
}
func getMetrics(t *testing.T) []string {
resp, err := http.Get(fmt.Sprintf("http://%s/metrics", addr))
if err != nil {
t.Error(err)
}
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
t.Error(err)
}
return strings.Split(string(body), "\n")
}
func testMetricExists(t *testing.T, metrics []string, pattern string) string {
for _, line := range metrics {
if strings.HasPrefix(line, pattern) {
return line
}
}
t.Errorf("Pattern \"%s\" not found in metrics", pattern)
return ""
}