mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2024-12-27 09:05:18 +00:00
76 lines
1.9 KiB
Go
76 lines
1.9 KiB
Go
|
// Copyright 2023 The LevelDB-Go and Pebble Authors. All rights reserved. Use
|
||
|
// of this source code is governed by a BSD-style license that can be found in
|
||
|
// the LICENSE file.
|
||
|
|
||
|
package replay
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"fmt"
|
||
|
"strconv"
|
||
|
"strings"
|
||
|
"testing"
|
||
|
"time"
|
||
|
|
||
|
"github.com/cockroachdb/datadriven"
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
func TestSampledMetric(t *testing.T) {
|
||
|
var m SampledMetric
|
||
|
var buf bytes.Buffer
|
||
|
datadriven.RunTest(t, "testdata/sampled_metric", func(t *testing.T, td *datadriven.TestData) string {
|
||
|
switch td.Cmd {
|
||
|
case "init":
|
||
|
m = SampledMetric{samples: m.samples[:0]}
|
||
|
var cumDur time.Duration
|
||
|
for _, line := range strings.Split(td.Input, "\n") {
|
||
|
fields := strings.Fields(line)
|
||
|
v, err := strconv.ParseInt(fields[0], 10, 64)
|
||
|
require.NoError(t, err)
|
||
|
dur, err := time.ParseDuration(fields[1])
|
||
|
require.NoError(t, err)
|
||
|
cumDur += dur
|
||
|
m.samples = append(m.samples, sample{
|
||
|
value: v,
|
||
|
since: cumDur,
|
||
|
})
|
||
|
}
|
||
|
return ""
|
||
|
case "values":
|
||
|
buf.Reset()
|
||
|
var width int
|
||
|
td.ScanArgs(t, "width", &width)
|
||
|
for i, v := range m.Values(width) {
|
||
|
if i > 0 {
|
||
|
fmt.Fprint(&buf, " ")
|
||
|
}
|
||
|
fmt.Fprintf(&buf, "%.1f", v)
|
||
|
}
|
||
|
return buf.String()
|
||
|
case "plot":
|
||
|
var width, height int
|
||
|
var scaleStr string
|
||
|
td.ScanArgs(t, "width", &width)
|
||
|
td.ScanArgs(t, "height", &height)
|
||
|
td.ScanArgs(t, "scale", &scaleStr)
|
||
|
var scale float64
|
||
|
_, err := fmt.Sscanf(scaleStr, "%f", &scale)
|
||
|
require.NoError(t, err)
|
||
|
return m.Plot(width, height, scale)
|
||
|
case "plot-increasing-per-sec":
|
||
|
var width, height int
|
||
|
var scaleStr string
|
||
|
td.ScanArgs(t, "width", &width)
|
||
|
td.ScanArgs(t, "height", &height)
|
||
|
td.ScanArgs(t, "scale", &scaleStr)
|
||
|
var scale float64
|
||
|
_, err := fmt.Sscanf(scaleStr, "%f", &scale)
|
||
|
require.NoError(t, err)
|
||
|
return m.PlotIncreasingPerSec(width, height, scale)
|
||
|
default:
|
||
|
return fmt.Sprintf("unrecognized command %q", td.Cmd)
|
||
|
}
|
||
|
})
|
||
|
}
|