mirror of
https://github.com/taigrr/bitcask
synced 2025-01-18 04:03:17 -08:00
Improves Test Coverage by covering error cases (#95)
* Add Unit Test for testing a corrupted config * Add Unit Test for testing errors from .Stats() * Refactor Datafile into an interface and add Unit Tests for testing Merge() errors * Refactor indexer into an interface and add Unit Tests for .Close() errors * Add Unit Tests for .Delete() errors * Add Unit Tests for testing Put/Get errors * Add Unit Test for testing Open errors (bad path for example) * Refactor out bitcask.writeConfig * Add more tests for config errors * Add unit test for options that might error * Add more test cases for close errors * Add test case for rotating datafiles * Fix a possible data race in .Stats() * Add test case for checksum errors * Add test case for Sync errors with Put and WithSync enabled * Refactor and use testify.mock for mocks and generate mocks for all interfaces * Refactor TestCloseErrors * Refactored TestDeleteErrors * Refactored TestGetErrors * Refactored TestPutErrors * Refactored TestMergeErrors and fixed a bug with .Fold() * Add test case for Scan() errors * Apparently only Scan() can return nil Node()s?
This commit is contained in:
@@ -2,6 +2,7 @@ package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/prologic/bitcask"
|
||||
"github.com/prologic/bitcask/internal/config"
|
||||
@@ -36,11 +37,11 @@ func init() {
|
||||
|
||||
func recover(path string, dryRun bool) int {
|
||||
maxKeySize := bitcask.DefaultMaxKeySize
|
||||
if cfg, err := config.Decode(path); err == nil {
|
||||
if cfg, err := config.Load(filepath.Join(path, "config.json")); err == nil {
|
||||
maxKeySize = cfg.MaxKeySize
|
||||
}
|
||||
|
||||
t, found, err := index.ReadFromFile(path, maxKeySize)
|
||||
t, found, err := index.NewIndexer().Load(path, maxKeySize)
|
||||
if err != nil && !index.IsIndexCorruption(err) {
|
||||
log.WithError(err).Info("error while opening the index file")
|
||||
}
|
||||
@@ -60,24 +61,12 @@ func recover(path string, dryRun bool) int {
|
||||
return 0
|
||||
}
|
||||
|
||||
fi, err := os.OpenFile("index.recovered", os.O_WRONLY|os.O_CREATE, 0600)
|
||||
if err != nil {
|
||||
log.WithError(err).Info("error while creating recovered index file")
|
||||
return 1
|
||||
}
|
||||
|
||||
// Leverage that t has the partiatially read tree even on corrupted files
|
||||
err = index.WriteIndex(t, fi)
|
||||
err = index.NewIndexer().Save(t, "index.recovered")
|
||||
if err != nil {
|
||||
log.WithError(err).Info("error while writing the recovered index file")
|
||||
|
||||
fi.Close()
|
||||
return 1
|
||||
}
|
||||
err = fi.Close()
|
||||
if err != nil {
|
||||
log.WithError(err).Info("the recovered file index coudn't be saved correctly")
|
||||
}
|
||||
log.Debug("the index was recovered in the index.recovered new file")
|
||||
|
||||
return 0
|
||||
|
||||
Reference in New Issue
Block a user