(t *testing.T)
| 209 | } |
| 210 | |
| 211 | func TestDB_Get(t *testing.T) { |
| 212 | opts := config.DefaultOptions |
| 213 | dir, _ := os.MkdirTemp("", "flydb-get") |
| 214 | opts.DirPath = dir |
| 215 | opts.DataFileSize = 64 * 1024 * 1024 |
| 216 | db, err := NewDB(opts) |
| 217 | defer destroyDB(db) |
| 218 | assert.Nil(t, err) |
| 219 | assert.NotNil(t, db) |
| 220 | |
| 221 | // Read a piece of data normally |
| 222 | err = db.Put(randkv.GetTestKey(11), randkv.RandomValue(24)) |
| 223 | assert.Nil(t, err) |
| 224 | val1, err := db.Get(randkv.GetTestKey(11)) |
| 225 | assert.Nil(t, err) |
| 226 | assert.NotNil(t, val1) |
| 227 | |
| 228 | // Read a nonexistent key |
| 229 | val2, err := db.Get([]byte("some key unknown")) |
| 230 | assert.Nil(t, val2) |
| 231 | assert.Equal(t, _const.ErrKeyNotFound, err) |
| 232 | |
| 233 | // The value is read after being repeatedly Put |
| 234 | err = db.Put(randkv.GetTestKey(22), randkv.RandomValue(24)) |
| 235 | assert.Nil(t, err) |
| 236 | err = db.Put(randkv.GetTestKey(22), randkv.RandomValue(24)) |
| 237 | val3, err := db.Get(randkv.GetTestKey(22)) |
| 238 | assert.Nil(t, err) |
| 239 | assert.NotNil(t, val3) |
| 240 | |
| 241 | // Get the value after it is deleted |
| 242 | err = db.Put(randkv.GetTestKey(33), randkv.RandomValue(24)) |
| 243 | assert.Nil(t, err) |
| 244 | err = db.Delete(randkv.GetTestKey(33)) |
| 245 | assert.Nil(t, err) |
| 246 | val4, err := db.Get(randkv.GetTestKey(33)) |
| 247 | assert.Equal(t, 0, len(val4)) |
| 248 | assert.Equal(t, _const.ErrKeyNotFound, err) |
| 249 | |
| 250 | // Convert it to the old data file and obtain the value from the old data file |
| 251 | for i := 100; i < 1000000; i++ { |
| 252 | err := db.Put(randkv.GetTestKey(i), randkv.RandomValue(128)) |
| 253 | assert.Nil(t, err) |
| 254 | } |
| 255 | assert.Equal(t, 2, len(db.olderFiles)) |
| 256 | val5, err := db.Get(randkv.GetTestKey(101)) |
| 257 | assert.Nil(t, err) |
| 258 | assert.NotNil(t, val5) |
| 259 | |
| 260 | // After the restart, all the data previously written can be obtained |
| 261 | err = db.Close() |
| 262 | assert.Nil(t, err) |
| 263 | |
| 264 | // Restart the database |
| 265 | db2, err := NewDB(opts) |
| 266 | val6, err := db2.Get(randkv.GetTestKey(11)) |
| 267 | assert.Nil(t, err) |
| 268 | assert.NotNil(t, val6) |
nothing calls this directly
no test coverage detected