mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-11-21 14:44:00 +00:00
4984e71da6
address https://github.com/VictoriaMetrics/VictoriaMetrics/issues/7224, allow using ``` exp_samples: - labels: '{}' ``` for prometheus compatibility. --------- Signed-off-by: hagen1778 <roman@victoriametrics.com> Co-authored-by: hagen1778 <roman@victoriametrics.com>
99 lines
2.8 KiB
Go
99 lines
2.8 KiB
Go
package unittest
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/VictoriaMetrics/VictoriaMetrics/lib/decimal"
|
|
"github.com/VictoriaMetrics/VictoriaMetrics/lib/promutils"
|
|
)
|
|
|
|
func TestParseInputValue_Failure(t *testing.T) {
|
|
f := func(input string) {
|
|
t.Helper()
|
|
|
|
_, err := parseInputValue(input, true)
|
|
if err == nil {
|
|
t.Fatalf("expecting non-nil error")
|
|
}
|
|
}
|
|
|
|
f("")
|
|
f("testfailed")
|
|
|
|
// stale doesn't support operations
|
|
f("stalex3")
|
|
}
|
|
|
|
func TestParseInputValue_Success(t *testing.T) {
|
|
f := func(input string, outputExpected []sequenceValue) {
|
|
t.Helper()
|
|
|
|
output, err := parseInputValue(input, true)
|
|
if err != nil {
|
|
t.Fatalf("unexpected error in parseInputValue: %s", err)
|
|
}
|
|
|
|
if len(outputExpected) != len(output) {
|
|
t.Fatalf("unexpected output length; got %d; want %d", len(outputExpected), len(output))
|
|
}
|
|
for i := 0; i < len(outputExpected); i++ {
|
|
if outputExpected[i].Omitted != output[i].Omitted {
|
|
t.Fatalf("unexpected Omitted field in the output\ngot\n%v\nwant\n%v", output, outputExpected)
|
|
}
|
|
if outputExpected[i].Value != output[i].Value {
|
|
if decimal.IsStaleNaN(outputExpected[i].Value) && decimal.IsStaleNaN(output[i].Value) {
|
|
continue
|
|
}
|
|
t.Fatalf("unexpected Value field in the output\ngot\n%v\nwant\n%v", output, outputExpected)
|
|
}
|
|
}
|
|
}
|
|
|
|
f("-4", []sequenceValue{{Value: -4}})
|
|
|
|
f("_", []sequenceValue{{Omitted: true}})
|
|
|
|
f("stale", []sequenceValue{{Value: decimal.StaleNaN}})
|
|
|
|
f("-4x1", []sequenceValue{{Value: -4}, {Value: -4}})
|
|
|
|
f("_x1", []sequenceValue{{Omitted: true}})
|
|
|
|
f("1+1x2 0.1 0.1+0.3x2 3.14", []sequenceValue{{Value: 1}, {Value: 2}, {Value: 3}, {Value: 0.1}, {Value: 0.1}, {Value: 0.4}, {Value: 0.7}, {Value: 3.14}})
|
|
|
|
f("2-1x4", []sequenceValue{{Value: 2}, {Value: 1}, {Value: 0}, {Value: -1}, {Value: -2}})
|
|
|
|
f("1+1x1 _ -4 stale 3+20x1", []sequenceValue{{Value: 1}, {Value: 2}, {Omitted: true}, {Value: -4}, {Value: decimal.StaleNaN}, {Value: 3}, {Value: 23}})
|
|
}
|
|
|
|
func TestParseInputSeries_Success(t *testing.T) {
|
|
f := func(input []series) {
|
|
t.Helper()
|
|
var interval promutils.Duration
|
|
_, err := parseInputSeries(input, &interval, time.Now())
|
|
if err != nil {
|
|
t.Fatalf("expect to see no error: %v", err)
|
|
}
|
|
}
|
|
|
|
f([]series{{Series: "test", Values: "1"}})
|
|
f([]series{{Series: "test{}", Values: "1"}})
|
|
f([]series{{Series: "test{env=\"prod\",job=\"a\" }", Values: "1"}})
|
|
f([]series{{Series: "{__name__=\"test\",env=\"prod\",job=\"a\" }", Values: "1"}})
|
|
}
|
|
|
|
func TestParseInputSeries_Fail(t *testing.T) {
|
|
f := func(input []series) {
|
|
t.Helper()
|
|
var interval promutils.Duration
|
|
_, err := parseInputSeries(input, &interval, time.Now())
|
|
if err == nil {
|
|
t.Fatalf("expect to see error: %v", err)
|
|
}
|
|
}
|
|
|
|
f([]series{{Series: "", Values: "1"}})
|
|
f([]series{{Series: "{}", Values: "1"}})
|
|
f([]series{{Series: "{env=\"prod\",job=\"a\" or env=\"dev\",job=\"b\"}", Values: "1"}})
|
|
}
|