go-vise

Constrained Size Output Virtual Machine
Info | Log | Files | Refs | README | LICENSE

log_test.go (2282B)


      1 package log
      2 
      3 import (
      4 	"bytes"
      5 	"context"
      6 	"encoding/binary"
      7 	"testing"
      8 	"time"
      9 
     10 	"git.defalsify.org/vise.git/db"
     11 	"git.defalsify.org/vise.git/db/mem"
     12 )
     13 
     14 func TestLogDb(t *testing.T) {
     15 	sessionId := "xyzzy"
     16 	ctx := context.Background()
     17 	main := mem.NewMemDb()
     18 	sub := mem.NewMemDb()
     19 	store := NewLogDb(main, sub)
     20 	err := store.Connect(ctx, "main")
     21 	if err != nil {
     22 		t.Fatal(err)
     23 	}
     24 
     25 	k := []byte("foo")
     26 	v := []byte("bar")
     27 	tstart := time.Now()
     28 	store.SetPrefix(db.DATATYPE_USERDATA)
     29 	store.SetSession(sessionId)
     30 	err = store.Put(ctx, k, v)
     31 	if err != nil {
     32 		t.Fatal(err)
     33 	}
     34 
     35 	r, err := store.Get(ctx, k)
     36 	if err != nil {
     37 		t.Fatal(err)
     38 	}
     39 	if !bytes.Equal(r, v) {
     40 		t.Fatalf("Expected %x, got %x", v, r)
     41 	}
     42 
     43 	sub.SetPrefix(db.DATATYPE_UNKNOWN)
     44 	tend := time.Now()
     45 	dump, err := sub.Dump(ctx, append([]byte{db.DATATYPE_UNKNOWN}, []byte(sessionId)...))
     46 	if err != nil {
     47 		t.Fatal(err)
     48 	}
     49 	r, _ = dump.Next(ctx)
     50 	targetLen := len(sessionId) + 8 + 1 + 1
     51 	if len(r) != targetLen {
     52 		t.Fatalf("Unexpected length %d (%x), should be %d", len(r), r, targetLen)
     53 	}
     54 
     55 	k, err = sub.FromSessionKey(r[1:])
     56 	if err != nil {
     57 		t.Fatal(err)
     58 	}
     59 	tn := binary.BigEndian.Uint64(k)
     60 	tExpect := uint64(tstart.UnixNano())
     61 	if tn <= tExpect {
     62 		t.Fatalf("expected %d should be after %d", tn, tExpect)
     63 	}
     64 	tExpect = uint64(tend.UnixNano())
     65 	if tn >= tExpect {
     66 		t.Fatalf("expected %v should be before %v", tn, tExpect)
     67 	}
     68 }
     69 
     70 func TestLogDbConvert(t *testing.T) {
     71 	sessionId := "xyzzy"
     72 	ctx := context.Background()
     73 	main := mem.NewMemDb()
     74 	sub := mem.NewMemDb()
     75 	store := NewLogDb(main, sub)
     76 	err := store.Connect(ctx, "main")
     77 	if err != nil {
     78 		t.Fatal(err)
     79 	}
     80 
     81 	k := []byte("foo")
     82 	v := []byte("bar")
     83 	store.SetPrefix(db.DATATYPE_USERDATA)
     84 	store.SetSession(sessionId)
     85 	err = store.Put(ctx, k, v)
     86 	if err != nil {
     87 		t.Fatal(err)
     88 	}
     89 
     90 	dump, err := sub.Dump(ctx, []byte{db.DATATYPE_UNKNOWN})
     91 	if err != nil {
     92 		t.Fatal(err)
     93 	}
     94 	rk, rv := dump.Next(ctx)
     95 	entry, err := store.ToLogDbEntry(ctx, rk, rv)
     96 	if err != nil {
     97 		t.Fatal(err)
     98 	}
     99 	if !bytes.Equal(entry.Key, k) {
    100 		t.Fatalf("expected %x, got %x", k, entry.Key)
    101 	}
    102 	if !bytes.Equal(entry.Val, v) {
    103 		t.Fatalf("expected %x, got %x", v, entry.Val)
    104 	}
    105 	if entry.SessionId != sessionId {
    106 		t.Fatalf("expected %x, got %x", sessionId, entry.SessionId)
    107 	}
    108 }