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