mirror of
https://github.com/ncruces/go-sqlite3.git
synced 2026-01-12 05:59:14 +00:00
More tests.
This commit is contained in:
135
vfs_test.go
Normal file
135
vfs_test.go
Normal file
@@ -0,0 +1,135 @@
|
||||
package sqlite3
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"math/rand"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/ncruces/julianday"
|
||||
)
|
||||
|
||||
func Test_vfsLocaltime(t *testing.T) {
|
||||
memory := make(MockMemory, 128)
|
||||
module := &MockModule{&memory}
|
||||
|
||||
memory.Write(0, []byte("zero"))
|
||||
|
||||
rc := vfsLocaltime(context.TODO(), module, 0, 4)
|
||||
if rc != 0 {
|
||||
t.Fatal("returned", rc)
|
||||
}
|
||||
|
||||
epoch := time.Unix(0, 0)
|
||||
if z, _ := memory.Read(0, 4); !bytes.Equal(z, []byte("zero")) {
|
||||
t.Fatal("overwrote zero address")
|
||||
}
|
||||
if s, _ := memory.ReadUint32Le(4 + 0*4); int(s) != epoch.Second() {
|
||||
t.Fatal("wrong second")
|
||||
}
|
||||
if m, _ := memory.ReadUint32Le(4 + 1*4); int(m) != epoch.Minute() {
|
||||
t.Fatal("wrong minute")
|
||||
}
|
||||
if h, _ := memory.ReadUint32Le(4 + 2*4); int(h) != epoch.Hour() {
|
||||
t.Fatal("wrong hour")
|
||||
}
|
||||
if d, _ := memory.ReadUint32Le(4 + 3*4); int(d) != epoch.Day() {
|
||||
t.Fatal("wrong day")
|
||||
}
|
||||
if m, _ := memory.ReadUint32Le(4 + 4*4); time.Month(1+m) != epoch.Month() {
|
||||
t.Fatal("wrong month")
|
||||
}
|
||||
if y, _ := memory.ReadUint32Le(4 + 5*4); 1900+int(y) != epoch.Year() {
|
||||
t.Fatal("wrong year")
|
||||
}
|
||||
if w, _ := memory.ReadUint32Le(4 + 6*4); time.Weekday(w) != epoch.Weekday() {
|
||||
t.Fatal("wrong weekday")
|
||||
}
|
||||
if d, _ := memory.ReadUint32Le(4 + 7*4); int(d) != epoch.YearDay()-1 {
|
||||
t.Fatal("wrong yearday")
|
||||
}
|
||||
}
|
||||
|
||||
func Test_vfsRandomness(t *testing.T) {
|
||||
memory := make(MockMemory, 128)
|
||||
module := &MockModule{&memory}
|
||||
|
||||
memory.Write(0, []byte("zero"))
|
||||
|
||||
rand.Seed(0)
|
||||
rc := vfsRandomness(context.TODO(), module, 0, 16, 4)
|
||||
if rc != 16 {
|
||||
t.Fatal("returned", rc)
|
||||
}
|
||||
|
||||
if z, _ := memory.Read(0, 4); !bytes.Equal(z, []byte("zero")) {
|
||||
t.Fatal("overwrote zero address")
|
||||
}
|
||||
|
||||
var want [16]byte
|
||||
rand.Seed(0)
|
||||
rand.Read(want[:])
|
||||
|
||||
if got, _ := memory.Read(4, 16); !bytes.Equal(got, want[:]) {
|
||||
t.Fatalf("got %q, want %q", got, want)
|
||||
}
|
||||
}
|
||||
|
||||
func Test_vfsSleep(t *testing.T) {
|
||||
start := time.Now()
|
||||
|
||||
rc := vfsSleep(context.TODO(), 0, 123456)
|
||||
if rc != 0 {
|
||||
t.Fatal("returned", rc)
|
||||
}
|
||||
|
||||
want := 123456 * time.Microsecond
|
||||
if got := time.Since(start); got < want {
|
||||
t.Fatalf("got %v, want %v", got, want)
|
||||
}
|
||||
}
|
||||
|
||||
func Test_vfsCurrentTime(t *testing.T) {
|
||||
memory := make(MockMemory, 128)
|
||||
module := &MockModule{&memory}
|
||||
|
||||
memory.Write(0, []byte("zero"))
|
||||
|
||||
now := time.Now()
|
||||
rc := vfsCurrentTime(context.TODO(), module, 0, 4)
|
||||
if rc != 0 {
|
||||
t.Fatal("returned", rc)
|
||||
}
|
||||
|
||||
if z, _ := memory.Read(0, 4); !bytes.Equal(z, []byte("zero")) {
|
||||
t.Fatal("overwrote zero address")
|
||||
}
|
||||
want := julianday.Float(now)
|
||||
if got, _ := memory.ReadFloat64Le(4); float32(got) != float32(want) {
|
||||
t.Fatalf("got %v, want %v", got, want)
|
||||
}
|
||||
}
|
||||
|
||||
func Test_vfsCurrentTime64(t *testing.T) {
|
||||
memory := make(MockMemory, 128)
|
||||
module := &MockModule{&memory}
|
||||
|
||||
memory.Write(0, []byte("zero"))
|
||||
|
||||
now := time.Now()
|
||||
time.Sleep(time.Millisecond)
|
||||
rc := vfsCurrentTime64(context.TODO(), module, 0, 4)
|
||||
if rc != 0 {
|
||||
t.Fatal("returned", rc)
|
||||
}
|
||||
|
||||
if z, _ := memory.Read(0, 4); !bytes.Equal(z, []byte("zero")) {
|
||||
t.Fatal("overwrote zero address")
|
||||
}
|
||||
day, nsec := julianday.Date(now)
|
||||
want := day*86_400_000 + nsec/1_000_000
|
||||
if got, _ := memory.ReadUint64Le(4); int64(got)-want > 100 {
|
||||
t.Fatalf("got %v, want %v", got, want)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user