Skip to content

Commit 7d2f4ae

Browse files
authored
Add ErrKeyNotFound (cosmos#148)
* add new ErrKeyNotFound and handle it
1 parent eea0a82 commit 7d2f4ae

File tree

3 files changed

+93
-2
lines changed

3 files changed

+93
-2
lines changed

da/mock/mock.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package mock
22

33
import (
44
"encoding/binary"
5+
"errors"
56

67
"github.com/celestiaorg/optimint/da"
78
"github.com/celestiaorg/optimint/log"
@@ -71,9 +72,12 @@ func (m *MockDataAvailabilityLayerClient) SubmitBlock(block *types.Block) da.Res
7172
func (m *MockDataAvailabilityLayerClient) CheckBlockAvailability(header *types.Header) da.ResultCheckBlock {
7273
hash := header.Hash()
7374
_, err := m.dalcKV.Get(hash[:])
74-
if err != nil {
75+
if errors.Is(err, store.ErrKeyNotFound) {
7576
return da.ResultCheckBlock{DAResult: da.DAResult{Code: da.StatusSuccess}, DataAvailable: false}
7677
}
78+
if err != nil {
79+
return da.ResultCheckBlock{DAResult: da.DAResult{Code: da.StatusError, Message: err.Error()}, DataAvailable: false}
80+
}
7781
return da.ResultCheckBlock{DAResult: da.DAResult{Code: da.StatusSuccess}, DataAvailable: true}
7882
}
7983

store/badger.go

+13-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,18 @@
11
package store
22

3-
import "github.com/dgraph-io/badger/v3"
3+
import (
4+
"errors"
5+
6+
"github.com/dgraph-io/badger/v3"
7+
)
48

59
var _ KVStore = &BadgerKV{}
610

11+
var (
12+
// ErrKeyNotFound is returned if key is not found in KVStore.
13+
ErrKeyNotFound = errors.New("key not found")
14+
)
15+
716
// BadgerKV is a implementation of KVStore using Badger v3.
817
type BadgerKV struct {
918
db *badger.DB
@@ -14,6 +23,9 @@ func (b *BadgerKV) Get(key []byte) ([]byte, error) {
1423
txn := b.db.NewTransaction(false)
1524
defer txn.Discard()
1625
item, err := txn.Get(key)
26+
if errors.Is(err, badger.ErrKeyNotFound) {
27+
return nil, ErrKeyNotFound
28+
}
1729
if err != nil {
1830
return nil, err
1931
}

store/badger_test.go

+75
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package store
2+
3+
import (
4+
"errors"
5+
"testing"
6+
7+
"github.com/dgraph-io/badger/v3"
8+
)
9+
10+
func TestGetErrors(t *testing.T) {
11+
dalcKV := NewInMemoryKVStore()
12+
13+
tc := []struct {
14+
name string
15+
key []byte
16+
err error
17+
}{
18+
{"empty key", []byte{}, badger.ErrEmptyKey},
19+
{"not found key", []byte("missing key"), ErrKeyNotFound},
20+
}
21+
22+
for _, tt := range tc {
23+
t.Run(tt.name, func(t *testing.T) {
24+
_, err := dalcKV.Get(tt.key)
25+
if !errors.Is(err, tt.err) {
26+
t.Errorf("Invalid err, got: %v expected %v", err, tt.err)
27+
}
28+
})
29+
}
30+
}
31+
32+
func TestSetErrors(t *testing.T) {
33+
dalcKV := NewInMemoryKVStore()
34+
35+
tc := []struct {
36+
name string
37+
key []byte
38+
value []byte
39+
err error
40+
}{
41+
{"empty key", []byte{}, []byte{}, badger.ErrEmptyKey},
42+
{"invalid key", []byte("!badger!key"), []byte("invalid header"), badger.ErrInvalidKey},
43+
}
44+
45+
for _, tt := range tc {
46+
t.Run(tt.name, func(t *testing.T) {
47+
err := dalcKV.Set(tt.key, tt.value)
48+
if !errors.Is(tt.err, err) {
49+
t.Errorf("Invalid err, got: %v expected %v", err, tt.err)
50+
}
51+
})
52+
}
53+
}
54+
55+
func TestDeleteErrors(t *testing.T) {
56+
dalcKV := NewInMemoryKVStore()
57+
58+
tc := []struct {
59+
name string
60+
key []byte
61+
err error
62+
}{
63+
{"empty key", []byte{}, badger.ErrEmptyKey},
64+
{"invalid key", []byte("!badger!key"), badger.ErrInvalidKey},
65+
}
66+
67+
for _, tt := range tc {
68+
t.Run(tt.name, func(t *testing.T) {
69+
err := dalcKV.Delete(tt.key)
70+
if !errors.Is(err, tt.err) {
71+
t.Errorf("Invalid err, got: %v expected %v", err, tt.err)
72+
}
73+
})
74+
}
75+
}

0 commit comments

Comments
 (0)