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 }