/
suite.go
62 lines (55 loc) · 1.37 KB
/
suite.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package dstest
import (
"reflect"
"runtime"
"testing"
dstore "github.com/ipsn/go-ipfs/gxlibs/github.com/ipfs/go-datastore"
query "github.com/ipsn/go-ipfs/gxlibs/github.com/ipfs/go-datastore/query"
)
// BasicSubtests is a list of all basic tests.
var BasicSubtests = []func(t *testing.T, ds dstore.Datastore){
SubtestBasicPutGet,
SubtestNotFounds,
SubtestManyKeysAndQuery,
}
// BatchSubtests is a list of all basic batching datastore tests.
var BatchSubtests = []func(t *testing.T, ds dstore.Batching){
RunBatchTest,
RunBatchDeleteTest,
RunBatchPutAndDeleteTest,
}
func getFunctionName(i interface{}) string {
return runtime.FuncForPC(reflect.ValueOf(i).Pointer()).Name()
}
func clearDs(t *testing.T, ds dstore.Datastore) {
q, err := ds.Query(query.Query{KeysOnly: true})
if err != nil {
t.Fatal(err)
}
res, err := q.Rest()
if err != nil {
t.Fatal(err)
}
for _, r := range res {
if err := ds.Delete(dstore.RawKey(r.Key)); err != nil {
t.Fatal(err)
}
}
}
// SubtestAll tests the given datastore against all the subtests.
func SubtestAll(t *testing.T, ds dstore.Datastore) {
for _, f := range BasicSubtests {
t.Run(getFunctionName(f), func(t *testing.T) {
f(t, ds)
clearDs(t, ds)
})
}
if ds, ok := ds.(dstore.Batching); ok {
for _, f := range BatchSubtests {
t.Run(getFunctionName(f), func(t *testing.T) {
f(t, ds)
clearDs(t, ds)
})
}
}
}