blob: 07c1d87298106de81a6830e9dc4790b1e1d52769 [file] [log] [blame]
package events
import (
"encoding/binary"
"fmt"
"io/ioutil"
"math"
"path"
"testing"
"time"
assert "github.com/stretchr/testify/require"
"go.skia.org/infra/go/testutils"
)
func encodeEvent(v float64) []byte {
rv := make([]byte, 8)
binary.BigEndian.PutUint64(rv, math.Float64bits(v))
return rv
}
func decodeEvent(b []byte) float64 {
return math.Float64frombits(binary.BigEndian.Uint64(b))
}
func TestEncodeDecodeKey(t *testing.T) {
testutils.SmallTest(t)
tc := []time.Time{
time.Unix(0, 0),
time.Now(),
time.Now().UTC(),
}
for _, c := range tc {
enc, err := encodeKey(c)
assert.NoError(t, err)
dec, err := decodeKey(enc)
assert.NoError(t, err, fmt.Sprintf("%s", c))
assert.Equal(t, c.UTC(), dec.UTC())
}
// Errors.
tc = []time.Time{
{},
time.Date(0, 0, 0, 0, 0, 0, 0, time.UTC),
}
for _, c := range tc {
_, err := encodeKey(c)
assert.Error(t, err)
}
}
func TestInsertRetrieve(t *testing.T) {
testutils.MediumTest(t)
tmp, err := ioutil.TempDir("", "")
assert.NoError(t, err)
defer testutils.RemoveAll(t, tmp)
d, err := NewEventDB(path.Join(tmp, "events.bdb"))
assert.NoError(t, err)
now := time.Now()
k1 := now.Add(-3 * time.Second)
v1 := 0.05
s := "my-stream"
assert.NoError(t, d.Insert(&Event{
Stream: s,
Timestamp: k1,
Data: encodeEvent(v1),
}))
end := now.Add(time.Second)
start := end.Add(-100 * time.Second)
vs, err := d.Range(s, start, end)
assert.NoError(t, err)
assert.Equal(t, 1, len(vs))
assert.Equal(t, v1, decodeEvent(vs[0].Data))
}