Skip to content

Commit a3122d7

Browse files
committed
[FAB-3564] Improve test coverage for common ledger
This CR - Adds more unit tests for improving the code coverage of package fabric/common/ledger/util/leveldbhelper - Removes an unused function Change-Id: I282b280fc31606522bf9df5c8dcc62bd66badb1e Signed-off-by: manish <[email protected]>
1 parent 5b80e47 commit a3122d7

File tree

4 files changed

+344
-98
lines changed

4 files changed

+344
-98
lines changed

common/ledger/util/leveldbhelper/leveldb_helper.go

-6
Original file line numberDiff line numberDiff line change
@@ -103,12 +103,6 @@ func (dbInst *DB) Close() {
103103
dbInst.dbState = closed
104104
}
105105

106-
func (dbInst *DB) isOpen() bool {
107-
dbInst.mux.Lock()
108-
defer dbInst.mux.Unlock()
109-
return dbInst.dbState == opened
110-
}
111-
112106
// Get returns the value for the given key
113107
func (dbInst *DB) Get(key []byte) ([]byte, error) {
114108
value, err := dbInst.db.Get(key, dbInst.readOpts)

common/ledger/util/leveldbhelper/leveldb_helper_test.go

+104-92
Original file line numberDiff line numberDiff line change
@@ -17,111 +17,123 @@ limitations under the License.
1717
package leveldbhelper
1818

1919
import (
20-
"fmt"
2120
"os"
21+
"path/filepath"
2222
"testing"
2323

2424
"github.com/hyperledger/fabric/common/ledger/testutil"
25+
"github.com/syndtr/goleveldb/leveldb"
2526
)
2627

27-
const testDBPath = "/tmp/fabric/ledgertests/util/leveldbhelper"
28-
29-
func TestDBBasicWriteAndReads(t *testing.T) {
30-
testDBBasicWriteAndReads(t, "db1", "db2", "")
28+
func TestLevelDBHelperWriteWithoutOpen(t *testing.T) {
29+
env := newTestDBEnv(t, testDBPath)
30+
defer env.cleanup()
31+
db := env.db
32+
defer func() {
33+
if recover() == nil {
34+
t.Fatalf("A panic is expected when writing to db before opening")
35+
}
36+
}()
37+
db.Put([]byte("key"), []byte("value"), false)
3138
}
3239

33-
func testDBBasicWriteAndReads(t *testing.T, dbNames ...string) {
34-
p := createTestDBProvider(t)
35-
defer p.Close()
36-
for _, dbName := range dbNames {
37-
db := p.GetDBHandle(dbName)
38-
db.Put([]byte("key1"), []byte("value1_"+dbName), false)
39-
db.Put([]byte("key2"), []byte("value2_"+dbName), false)
40-
db.Put([]byte("key3"), []byte("value3_"+dbName), false)
41-
}
42-
43-
for _, dbName := range dbNames {
44-
db := p.GetDBHandle(dbName)
45-
val, err := db.Get([]byte("key1"))
46-
testutil.AssertNoError(t, err, "")
47-
testutil.AssertEquals(t, val, []byte("value1_"+dbName))
48-
49-
val, err = db.Get([]byte("key2"))
50-
testutil.AssertNoError(t, err, "")
51-
testutil.AssertEquals(t, val, []byte("value2_"+dbName))
52-
53-
val, err = db.Get([]byte("key3"))
54-
testutil.AssertNoError(t, err, "")
55-
testutil.AssertEquals(t, val, []byte("value3_"+dbName))
56-
}
40+
func TestLevelDBHelperReadWithoutOpen(t *testing.T) {
41+
env := newTestDBEnv(t, testDBPath)
42+
defer env.cleanup()
43+
db := env.db
44+
defer func() {
45+
if recover() == nil {
46+
t.Fatalf("A panic is expected when writing to db before opening")
47+
}
48+
}()
49+
db.Get([]byte("key"))
5750
}
5851

59-
func TestIterator(t *testing.T) {
60-
p := createTestDBProvider(t)
61-
defer p.Close()
62-
db1 := p.GetDBHandle("db1")
63-
db2 := p.GetDBHandle("db2")
64-
db3 := p.GetDBHandle("db3")
65-
for i := 0; i < 20; i++ {
66-
db1.Put([]byte(createTestKey(i)), []byte(createTestValue("db1", i)), false)
67-
db2.Put([]byte(createTestKey(i)), []byte(createTestValue("db2", i)), false)
68-
db3.Put([]byte(createTestKey(i)), []byte(createTestValue("db3", i)), false)
52+
func TestLevelDBHelper(t *testing.T) {
53+
env := newTestDBEnv(t, testDBPath)
54+
//defer env.cleanup()
55+
db := env.db
56+
57+
db.Open()
58+
// second time open should not have any side effect
59+
db.Open()
60+
db.Put([]byte("key1"), []byte("value1"), false)
61+
db.Put([]byte("key2"), []byte("value2"), true)
62+
db.Put([]byte("key3"), []byte("value3"), true)
63+
64+
val, _ := db.Get([]byte("key2"))
65+
testutil.AssertEquals(t, string(val), "value2")
66+
67+
db.Delete([]byte("key1"), false)
68+
db.Delete([]byte("key2"), true)
69+
70+
val1, err1 := db.Get([]byte("key1"))
71+
testutil.AssertNoError(t, err1, "")
72+
testutil.AssertEquals(t, string(val1), "")
73+
74+
val2, err2 := db.Get([]byte("key2"))
75+
testutil.AssertNoError(t, err2, "")
76+
testutil.AssertEquals(t, string(val2), "")
77+
78+
db.Close()
79+
// second time open should not have any side effect
80+
db.Close()
81+
82+
val3, err3 := db.Get([]byte("key3"))
83+
testutil.AssertError(t, err3, "")
84+
85+
db.Open()
86+
batch := &leveldb.Batch{}
87+
batch.Put([]byte("key1"), []byte("value1"))
88+
batch.Put([]byte("key2"), []byte("value2"))
89+
batch.Delete([]byte("key3"))
90+
db.WriteBatch(batch, true)
91+
92+
val1, err1 = db.Get([]byte("key1"))
93+
testutil.AssertNoError(t, err1, "")
94+
testutil.AssertEquals(t, string(val1), "value1")
95+
96+
val2, err2 = db.Get([]byte("key2"))
97+
testutil.AssertNoError(t, err2, "")
98+
testutil.AssertEquals(t, string(val2), "value2")
99+
100+
val3, err3 = db.Get([]byte("key3"))
101+
testutil.AssertNoError(t, err3, "")
102+
testutil.AssertEquals(t, string(val3), "")
103+
104+
keys := []string{}
105+
itr := db.GetIterator(nil, nil)
106+
for itr.Next() {
107+
keys = append(keys, string(itr.Key()))
69108
}
70-
71-
itr1 := db2.GetIterator([]byte(createTestKey(2)), []byte(createTestKey(4)))
72-
defer itr1.Release()
73-
checkItrResults(t, itr1, createTestKeys(2, 3), createTestValues("db2", 2, 3))
74-
75-
itr2 := db2.GetIterator([]byte(createTestKey(2)), nil)
76-
defer itr2.Release()
77-
checkItrResults(t, itr2, createTestKeys(2, 19), createTestValues("db2", 2, 19))
78-
79-
itr3 := db2.GetIterator(nil, nil)
80-
defer itr3.Release()
81-
checkItrResults(t, itr3, createTestKeys(0, 19), createTestValues("db2", 0, 19))
109+
testutil.AssertEquals(t, keys, []string{"key1", "key2"})
82110
}
83111

84-
func checkItrResults(t *testing.T, itr *Iterator, expectedKeys []string, expectedValues []string) {
85-
defer itr.Release()
86-
var actualKeys []string
87-
var actualValues []string
88-
for itr.Next(); itr.Valid(); itr.Next() {
89-
actualKeys = append(actualKeys, string(itr.Key()))
90-
actualValues = append(actualValues, string(itr.Value()))
91-
}
92-
testutil.AssertEquals(t, actualKeys, expectedKeys)
93-
testutil.AssertEquals(t, actualValues, expectedValues)
94-
testutil.AssertEquals(t, itr.Next(), false)
112+
func TestCreateDBInEmptyDir(t *testing.T) {
113+
testutil.AssertNoError(t, os.RemoveAll(testDBPath), "")
114+
testutil.AssertNoError(t, os.MkdirAll(testDBPath, 0775), "")
115+
db := CreateDB(&Conf{testDBPath})
116+
defer db.Close()
117+
defer func() {
118+
if r := recover(); r != nil {
119+
t.Fatalf("Panic is not expected when opening db in an existing empty dir. %s", r)
120+
}
121+
}()
122+
db.Open()
95123
}
96124

97-
func createTestKey(i int) string {
98-
return fmt.Sprintf("key_%06d", i)
99-
}
100-
101-
func createTestValue(dbname string, i int) string {
102-
return fmt.Sprintf("value_%s_%06d", dbname, i)
103-
}
104-
105-
func createTestKeys(start int, end int) []string {
106-
var keys []string
107-
for i := start; i <= end; i++ {
108-
keys = append(keys, createTestKey(i))
109-
}
110-
return keys
111-
}
112-
113-
func createTestValues(dbname string, start int, end int) []string {
114-
var values []string
115-
for i := start; i <= end; i++ {
116-
values = append(values, createTestValue(dbname, i))
117-
}
118-
return values
119-
}
120-
121-
func createTestDBProvider(t *testing.T) *Provider {
122-
if err := os.RemoveAll(testDBPath); err != nil {
123-
t.Fatalf("Error:%s", err)
124-
}
125-
dbConf := &Conf{testDBPath}
126-
return NewProvider(dbConf)
125+
func TestCreateDBInNonEmptyDir(t *testing.T) {
126+
testutil.AssertNoError(t, os.RemoveAll(testDBPath), "")
127+
testutil.AssertNoError(t, os.MkdirAll(testDBPath, 0775), "")
128+
file, err := os.Create(filepath.Join(testDBPath, "dummyfile.txt"))
129+
testutil.AssertNoError(t, err, "")
130+
file.Close()
131+
db := CreateDB(&Conf{testDBPath})
132+
defer db.Close()
133+
defer func() {
134+
if r := recover(); r == nil {
135+
t.Fatalf("A panic is expected when opening db in an existing non-empty dir. %s", r)
136+
}
137+
}()
138+
db.Open()
127139
}

0 commit comments

Comments
 (0)