suite.go 1.4 KB
Newer Older
Steven Allen's avatar
Steven Allen committed
1 2 3 4 5 6 7 8
package dstest

import (
	"reflect"
	"runtime"
	"testing"

	dstore "github.com/ipfs/go-datastore"
9
	query "github.com/ipfs/go-datastore/query"
Steven Allen's avatar
Steven Allen committed
10 11 12 13 14 15
)

// BasicSubtests is a list of all basic tests.
var BasicSubtests = []func(t *testing.T, ds dstore.Datastore){
	SubtestBasicPutGet,
	SubtestNotFounds,
16
	SubtestCombinations,
Steven Allen's avatar
Steven Allen committed
17
	SubtestOrder,
Steven Allen's avatar
Steven Allen committed
18
	SubtestLimit,
Steven Allen's avatar
Steven Allen committed
19
	SubtestFilter,
Steven Allen's avatar
Steven Allen committed
20
	SubtestManyKeysAndQuery,
21
	SubtestReturnSizes,
Steven Allen's avatar
Steven Allen committed
22 23 24 25 26 27
}

// BatchSubtests is a list of all basic batching datastore tests.
var BatchSubtests = []func(t *testing.T, ds dstore.Batching){
	RunBatchTest,
	RunBatchDeleteTest,
28
	RunBatchPutAndDeleteTest,
Steven Allen's avatar
Steven Allen committed
29 30 31 32 33 34
}

func getFunctionName(i interface{}) string {
	return runtime.FuncForPC(reflect.ValueOf(i).Pointer()).Name()
}

35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
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)
		}
	}
}

Steven Allen's avatar
Steven Allen committed
51 52 53 54 55
// 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)
56
			clearDs(t, ds)
Steven Allen's avatar
Steven Allen committed
57 58
		})
	}
Steven Allen's avatar
Steven Allen committed
59 60
	if ds, ok := ds.(dstore.Batching); ok {
		for _, f := range BatchSubtests {
Steven Allen's avatar
Steven Allen committed
61 62
			t.Run(getFunctionName(f), func(t *testing.T) {
				f(t, ds)
63
				clearDs(t, ds)
Steven Allen's avatar
Steven Allen committed
64 65 66 67
			})
		}
	}
}