mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-12-01 14:47:38 +00:00
9e1c037249
The TryParseTimestampRFC3339Nano() must properly parse RFC3339 timestamps with timezone offsets. While at it, make tryParseTimestampISO8601 function private in order to prevent from improper usage of this function from outside the lib/logstorage package. Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/6508
75 lines
1.7 KiB
Go
75 lines
1.7 KiB
Go
package insertutils
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/VictoriaMetrics/VictoriaMetrics/lib/logstorage"
|
|
)
|
|
|
|
func TestExtractTimestampRFC3339NanoFromFields_Success(t *testing.T) {
|
|
f := func(timeField string, fields []logstorage.Field, nsecsExpected int64) {
|
|
t.Helper()
|
|
|
|
nsecs, err := ExtractTimestampRFC3339NanoFromFields(timeField, fields)
|
|
if err != nil {
|
|
t.Fatalf("unexpected error: %s", err)
|
|
}
|
|
if nsecs != nsecsExpected {
|
|
t.Fatalf("unexpected nsecs; got %d; want %d", nsecs, nsecsExpected)
|
|
}
|
|
|
|
for _, f := range fields {
|
|
if f.Name == timeField {
|
|
if f.Value != "" {
|
|
t.Fatalf("unexpected value for field %s; got %q; want %q", timeField, f.Value, "")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
f("time", []logstorage.Field{
|
|
{Name: "foo", Value: "bar"},
|
|
{Name: "time", Value: "2024-06-18T23:37:20Z"},
|
|
}, 1718753840000000000)
|
|
|
|
f("time", []logstorage.Field{
|
|
{Name: "foo", Value: "bar"},
|
|
{Name: "time", Value: "2024-06-18T23:37:20+08:00"},
|
|
}, 1718725040000000000)
|
|
|
|
f("time", []logstorage.Field{
|
|
{Name: "foo", Value: "bar"},
|
|
{Name: "time", Value: "2024-06-18T23:37:20.123-05:30"},
|
|
}, 1718773640123000000)
|
|
|
|
f("time", []logstorage.Field{
|
|
{Name: "time", Value: "2024-06-18T23:37:20.123456789-05:30"},
|
|
{Name: "foo", Value: "bar"},
|
|
}, 1718773640123456789)
|
|
}
|
|
|
|
func TestExtractTimestampRFC3339NanoFromFields_Error(t *testing.T) {
|
|
f := func(s string) {
|
|
t.Helper()
|
|
|
|
fields := []logstorage.Field{
|
|
{Name: "time", Value: s},
|
|
}
|
|
nsecs, err := ExtractTimestampRFC3339NanoFromFields("time", fields)
|
|
if err == nil {
|
|
t.Fatalf("expecting non-nil error")
|
|
}
|
|
if nsecs != 0 {
|
|
t.Fatalf("unexpected nsecs; got %d; want %d", nsecs, 0)
|
|
}
|
|
}
|
|
|
|
f("foobar")
|
|
|
|
// no Z at the end
|
|
f("2024-06-18T23:37:20")
|
|
|
|
// incomplete time
|
|
f("2024-06-18")
|
|
f("2024-06-18T23:37")
|
|
}
|