go-vise

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

gdbm_test.go (3254B)


      1 package gdbm
      2 
      3 import (
      4 	"bytes"
      5 	"context"
      6 	"io/ioutil"
      7 	"testing"
      8 
      9 	"git.defalsify.org/vise.git/db"
     10 	"git.defalsify.org/vise.git/db/dbtest"
     11 )
     12 
     13 func TestCasesGdbm(t *testing.T) {
     14 	ctx := context.Background()
     15 
     16 	store := NewGdbmDb()
     17 	f, err := ioutil.TempFile("", "vise-db-gdbm-*")
     18 	if err != nil {
     19 		t.Fatal(err)
     20 	}
     21 	err = store.Connect(ctx, f.Name())
     22 	if err != nil {
     23 		t.Fatal(err)
     24 	}
     25 
     26 	err = dbtest.RunTests(t, ctx, store)
     27 	if err != nil {
     28 		t.Fatal(err)
     29 	}
     30 }
     31 
     32 func TestPutGetGdbm(t *testing.T) {
     33 	var dbi db.Db
     34 	ctx := context.Background()
     35 	sid := "ses"
     36 	f, err := ioutil.TempFile("", "vise-db-*")
     37 	if err != nil {
     38 		t.Fatal(err)
     39 	}
     40 	store := NewGdbmDb()
     41 	store.SetPrefix(db.DATATYPE_USERDATA)
     42 	store.SetSession(sid)
     43 
     44 	dbi = store
     45 	_ = dbi
     46 
     47 	err = store.Connect(ctx, f.Name())
     48 	if err != nil {
     49 		t.Fatal(err)
     50 	}
     51 	err = store.Put(ctx, []byte("foo"), []byte("bar"))
     52 	if err != nil {
     53 		t.Fatal(err)
     54 	}
     55 	v, err := store.Get(ctx, []byte("foo"))
     56 	if err != nil {
     57 		t.Fatal(err)
     58 	}
     59 	if !bytes.Equal(v, []byte("bar")) {
     60 		t.Fatalf("expected value 'bar', found '%s'", v)
     61 	}
     62 	_, err = store.Get(ctx, []byte("bar"))
     63 	if err == nil {
     64 		t.Fatal("expected get error for key 'bar'")
     65 	}
     66 
     67 }
     68 
     69 func TestConnect(t *testing.T) {
     70 	ctx := context.Background()
     71 	store := NewGdbmDb()
     72 	err := store.Connect(ctx, "")
     73 	if err == nil {
     74 		t.Fatal("expected error")
     75 	}
     76 	f, err := ioutil.TempFile("", "vise-db-gdbm-*")
     77 	if err != nil {
     78 		t.Fatal(err)
     79 	}
     80 	err = store.Connect(ctx, f.Name())
     81 	if err != nil {
     82 		t.Fatal(err)
     83 	}
     84 	err = store.SetLock(db.DATATYPE_USERDATA, true)
     85 	if err != nil {
     86 		t.Fatal(err)
     87 	}
     88 	store.SetPrefix(db.DATATYPE_USERDATA)
     89 	if store.CheckPut() {
     90 		t.Fatal("expected checkput false")
     91 	}
     92 	err = store.Put(ctx, []byte("foo"), []byte("bar"))
     93 	if err == nil {
     94 		t.Fatal("expected error")
     95 	}
     96 	if store.CheckPut() {
     97 		t.Fatal("expected checkput false")
     98 	}
     99 	err = store.SetLock(db.DATATYPE_USERDATA, false)
    100 	if err != nil {
    101 		t.Fatal(err)
    102 	}
    103 	if !store.CheckPut() {
    104 		t.Fatal("expected checkput false")
    105 	}
    106 	err = store.Close()
    107 	if err != nil {
    108 		t.Fatal(err)
    109 	}
    110 	err = store.Put(ctx, []byte("foo"), []byte("bar"))
    111 	if err == nil {
    112 		t.Fatal("expected error")
    113 	}
    114 }
    115 
    116 func TestReopen(t *testing.T) {
    117 	ctx := context.Background()
    118 	store := NewGdbmDb()
    119 	f, err := ioutil.TempFile("", "vise-db-gdbm-*")
    120 	if err != nil {
    121 		t.Fatal(err)
    122 	}
    123 	err = store.Connect(ctx, f.Name())
    124 	if err != nil {
    125 		t.Fatal(err)
    126 	}
    127 	err = store.Connect(ctx, f.Name())
    128 	if err != nil {
    129 		t.Fatal(err)
    130 	}
    131 	store.SetPrefix(db.DATATYPE_USERDATA)
    132 	err = store.Put(ctx, []byte("foo"), []byte("bar"))
    133 	if err != nil {
    134 		t.Fatal(err)
    135 	}
    136 	err = store.Close()
    137 	if err != nil {
    138 		t.Fatal(err)
    139 	}
    140 
    141 	store = NewGdbmDb()
    142 	err = store.Connect(ctx, f.Name())
    143 	if err != nil {
    144 		t.Fatal(err)
    145 	}
    146 	store.SetPrefix(db.DATATYPE_USERDATA)
    147 	v, err := store.Get(ctx, []byte("foo"))
    148 	if err != nil {
    149 		t.Fatal(err)
    150 	}
    151 	if !bytes.Equal(v, []byte("bar")) {
    152 		t.Fatalf("expected 'bar', got: '%s'", v)
    153 	}
    154 }
    155 
    156 func TestNoKey(t *testing.T) {
    157 	ctx := context.Background()
    158 	store := NewGdbmDb()
    159 	f, err := ioutil.TempFile("", "vise-db-gdbm-*")
    160 	if err != nil {
    161 		t.Fatal(err)
    162 	}
    163 	err = store.Connect(ctx, f.Name())
    164 	if err != nil {
    165 		t.Fatal(err)
    166 	}
    167 	_, err = store.Get(ctx, []byte("xyzzy"))
    168 	if err == nil {
    169 		t.Fatal(err)
    170 	}
    171 }