f3a52d1da5
Ensure that we don't query too far in the history, which slows things down. Change-Id: Ia77aa522f7f4c5d43629d51bb9a51a49fab6fa14
72 lines
1.6 KiB
Go
72 lines
1.6 KiB
Go
// Copyright (C) 2021 Storj Labs, Inc.
|
|
// See LICENSE for copying information.
|
|
|
|
package metabase
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"storj.io/private/dbutil"
|
|
)
|
|
|
|
func TestLimitedAsOfSystemTime(t *testing.T) {
|
|
const (
|
|
unixNano = 1623324728961910000
|
|
unixNanoStr = `1623324728961910000`
|
|
)
|
|
|
|
check := func(expect string, startNano, baselineNano int64, maxInterval time.Duration) {
|
|
var start, baseline time.Time
|
|
if startNano != 0 {
|
|
start = time.Unix(0, startNano)
|
|
}
|
|
if baselineNano != 0 {
|
|
baseline = time.Unix(0, baselineNano)
|
|
}
|
|
result := limitedAsOfSystemTime(dbutil.Cockroach, start, baseline, maxInterval)
|
|
require.Equal(t, expect, result)
|
|
}
|
|
|
|
// baseline in the future
|
|
check("",
|
|
unixNano-time.Second.Nanoseconds(),
|
|
unixNano,
|
|
0,
|
|
)
|
|
|
|
// ignore interval when positive or zero
|
|
check(" AS OF SYSTEM TIME '"+unixNanoStr+"' ",
|
|
unixNano+time.Second.Nanoseconds(),
|
|
unixNano,
|
|
0,
|
|
)
|
|
check(" AS OF SYSTEM TIME '"+unixNanoStr+"' ",
|
|
unixNano+time.Second.Nanoseconds(),
|
|
unixNano,
|
|
2*time.Second,
|
|
)
|
|
|
|
// ignore interval when it doesn't exceed the time difference
|
|
check(" AS OF SYSTEM TIME '"+unixNanoStr+"' ",
|
|
unixNano+time.Second.Nanoseconds(),
|
|
unixNano,
|
|
-time.Second,
|
|
)
|
|
|
|
// limit to interval when the time between now and baseline is large
|
|
check(" AS OF SYSTEM TIME '-1s' ",
|
|
unixNano+time.Minute.Nanoseconds(),
|
|
unixNano,
|
|
-time.Second,
|
|
)
|
|
|
|
// ignore now and baseline when either is zero
|
|
check(" AS OF SYSTEM TIME '-1s' ", 0, unixNano, -time.Second)
|
|
check(" AS OF SYSTEM TIME '-1s' ", unixNano, 0, -time.Second)
|
|
check("", unixNano, 0, 0)
|
|
check("", 0, unixNano, 0)
|
|
}
|