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 }