diff --git a/bitcask.go b/bitcask.go index ef21fef..8427c66 100644 --- a/bitcask.go +++ b/bitcask.go @@ -1,7 +1,7 @@ package bitcask import ( - "errors" + "fmt" "io" "io/ioutil" "os" @@ -13,13 +13,6 @@ import ( "github.com/prologic/trie" ) -var ( - ErrKeyNotFound = errors.New("error: key not found") - ErrKeyTooLarge = errors.New("error: key too large") - ErrValueTooLarge = errors.New("error: value too large") - ErrDatabaseLocked = errors.New("error: database locked") -) - type Bitcask struct { *flock.Flock @@ -54,7 +47,7 @@ func (b *Bitcask) Get(key string) ([]byte, error) { item, ok := b.keydir.Get(key) if !ok { - return nil, ErrKeyNotFound + return nil, fmt.Errorf("error: key not found %s", key) } if item.FileID == b.curr.id { @@ -73,10 +66,10 @@ func (b *Bitcask) Get(key string) ([]byte, error) { func (b *Bitcask) Put(key string, value []byte) error { if len(key) > b.opts.MaxKeySize { - return ErrKeyTooLarge + return fmt.Errorf("error: key too large %d > %d", len(key), b.opts.MaxKeySize) } if len(value) > b.opts.MaxValueSize { - return ErrValueTooLarge + return fmt.Errorf("error: value too large %d > %d", len(value), b.opts.MaxValueSize) } index, err := b.put(key, value) @@ -365,7 +358,7 @@ func Open(path string, options ...func(*Bitcask) error) (*Bitcask, error) { } if !locked { - return nil, ErrDatabaseLocked + return nil, fmt.Errorf("error: database locked %s", path) } return bitcask, nil diff --git a/bitcask_test.go b/bitcask_test.go index 50bfde7..4c60eca 100644 --- a/bitcask_test.go +++ b/bitcask_test.go @@ -45,7 +45,7 @@ func TestAll(t *testing.T) { assert.NoError(err) _, err = db.Get("foo") assert.Error(err) - assert.Equal(err.Error(), "error: key not found") + assert.Equal("error: key not found foo", err.Error()) }) t.Run("Sync", func(t *testing.T) { @@ -92,7 +92,7 @@ func TestDeletedKeys(t *testing.T) { assert.NoError(err) _, err = db.Get("foo") assert.Error(err) - assert.Equal("error: key not found", err.Error()) + assert.Equal("error: key not found foo", err.Error()) }) t.Run("Sync", func(t *testing.T) { @@ -120,7 +120,7 @@ func TestDeletedKeys(t *testing.T) { t.Run("Get", func(t *testing.T) { _, err = db.Get("foo") assert.Error(err) - assert.Equal("error: key not found", err.Error()) + assert.Equal("error: key not found foo", err.Error()) }) t.Run("Close", func(t *testing.T) { @@ -138,19 +138,17 @@ func TestMaxKeySize(t *testing.T) { var db *Bitcask - size := 16 - t.Run("Open", func(t *testing.T) { - db, err = Open(testdir, WithMaxKeySize(size)) + db, err = Open(testdir, WithMaxKeySize(16)) assert.NoError(err) }) t.Run("Put", func(t *testing.T) { - key := strings.Repeat(" ", size+1) + key := strings.Repeat(" ", 17) value := []byte("foobar") err = db.Put(key, value) assert.Error(err) - assert.Equal("error: key too large", err.Error()) + assert.Equal("error: key too large 17 > 16", err.Error()) }) } @@ -162,19 +160,17 @@ func TestMaxValueSize(t *testing.T) { var db *Bitcask - size := 16 - t.Run("Open", func(t *testing.T) { - db, err = Open(testdir, WithMaxValueSize(size)) + db, err = Open(testdir, WithMaxValueSize(16)) assert.NoError(err) }) t.Run("Put", func(t *testing.T) { key := "foo" - value := []byte(strings.Repeat(" ", size+1)) + value := []byte(strings.Repeat(" ", 17)) err = db.Put(key, value) assert.Error(err) - assert.Equal("error: value too large", err.Error()) + assert.Equal("error: value too large 17 > 16", err.Error()) }) } @@ -393,7 +389,7 @@ func TestLocking(t *testing.T) { _, err = Open(testdir) assert.Error(err) - assert.Equal("error: database locked", err.Error()) + assert.Equal(fmt.Sprintf("error: database locked %s", testdir), err.Error()) } type benchmarkTestCase struct {