Skip to content

Commit bdd972f

Browse files
adnan-cdenyeart
authored andcommitted
[FAB-2388] Fix intermittent CouchDB failures
https://jira.hyperledger.org/browse/FAB-2388 Instead of creating/deleting same database multiple times, the unit-tests now use different databases for each test. This should avoid hitting the database deletion async issue in Couch 2.x. Activating statecouchdb unit-tests. Change-Id: Iba6eff9e259098971cf9063f467350a478ff2dab Signed-off-by: Adnan Choudhury <[email protected]>
1 parent 9a09ac0 commit bdd972f

File tree

5 files changed

+53
-47
lines changed

5 files changed

+53
-47
lines changed

core/ledger/kvledger/txmgmt/statedb/commontests/test_common.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import (
2727

2828
// TestBasicRW tests basic read-write
2929
func TestBasicRW(t *testing.T, dbProvider statedb.VersionedDBProvider) {
30-
db, err := dbProvider.GetDBHandle("TestDB")
30+
db, err := dbProvider.GetDBHandle("testbasicrw")
3131
testutil.AssertNoError(t, err, "")
3232

3333
// Test retrieval of non-existent key - returns nil rather than error
@@ -61,10 +61,10 @@ func TestBasicRW(t *testing.T, dbProvider statedb.VersionedDBProvider) {
6161

6262
// TestMultiDBBasicRW tests basic read-write on multiple dbs
6363
func TestMultiDBBasicRW(t *testing.T, dbProvider statedb.VersionedDBProvider) {
64-
db1, err := dbProvider.GetDBHandle("TestDB1")
64+
db1, err := dbProvider.GetDBHandle("testmultidbbasicrw")
6565
testutil.AssertNoError(t, err, "")
6666

67-
db2, err := dbProvider.GetDBHandle("TestDB2")
67+
db2, err := dbProvider.GetDBHandle("testmultidbbasicrw2")
6868
testutil.AssertNoError(t, err, "")
6969

7070
batch1 := statedb.NewUpdateBatch()
@@ -100,7 +100,7 @@ func TestMultiDBBasicRW(t *testing.T, dbProvider statedb.VersionedDBProvider) {
100100

101101
// TestDeletes tests deteles
102102
func TestDeletes(t *testing.T, dbProvider statedb.VersionedDBProvider) {
103-
db, err := dbProvider.GetDBHandle("TestDB")
103+
db, err := dbProvider.GetDBHandle("testdeletes")
104104
testutil.AssertNoError(t, err, "")
105105

106106
batch := statedb.NewUpdateBatch()
@@ -135,7 +135,7 @@ func TestDeletes(t *testing.T, dbProvider statedb.VersionedDBProvider) {
135135

136136
// TestIterator tests the iterator
137137
func TestIterator(t *testing.T, dbProvider statedb.VersionedDBProvider) {
138-
db, err := dbProvider.GetDBHandle("TestDB")
138+
db, err := dbProvider.GetDBHandle("testiterator")
139139
testutil.AssertNoError(t, err, "")
140140
db.Open()
141141
defer db.Close()
@@ -178,7 +178,7 @@ func testItr(t *testing.T, itr statedb.ResultsIterator, expectedKeys []string) {
178178

179179
// TestQuery tests queries
180180
func TestQuery(t *testing.T, dbProvider statedb.VersionedDBProvider) {
181-
db, err := dbProvider.GetDBHandle("TestDB")
181+
db, err := dbProvider.GetDBHandle("testquery")
182182
testutil.AssertNoError(t, err, "")
183183
db.Open()
184184
defer db.Close()

core/ledger/kvledger/txmgmt/statedb/statecouchdb/statecouchdb_test.go

+17-16
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,20 @@ func TestMain(m *testing.M) {
3333

3434
//call a helper method to load the core.yaml, will be used to detect if CouchDB is enabled
3535
ledgertestutil.SetupCoreYAMLConfig("./../../../../../../peer")
36-
37-
viper.Set("ledger.state.couchDBConfig.couchDBAddress", "127.0.0.1:5984")
36+
viper.Set("ledger.state.stateDatabase", "CouchDB")
37+
viper.Set("ledger.state.couchDBConfig.couchDBAddress", "couchdb:5984")
3838
viper.Set("peer.fileSystemPath", "/tmp/fabric/ledgertests/kvledger/txmgmt/statedb/statecouchdb")
39-
40-
os.Exit(m.Run())
39+
result := m.Run()
40+
viper.Set("ledger.state.stateDatabase", "goleveldb")
41+
os.Exit(result)
4142
}
4243

4344
func TestBasicRW(t *testing.T) {
4445
if ledgerconfig.IsCouchDBEnabled() == true {
4546

4647
env := NewTestVDBEnv(t)
47-
env.Cleanup("TestDB")
48-
defer env.Cleanup("TestDB")
48+
env.Cleanup("testbasicrw")
49+
defer env.Cleanup("testbasicrw")
4950
commontests.TestBasicRW(t, env.DBProvider)
5051

5152
}
@@ -55,10 +56,10 @@ func TestMultiDBBasicRW(t *testing.T) {
5556
if ledgerconfig.IsCouchDBEnabled() == true {
5657

5758
env := NewTestVDBEnv(t)
58-
env.Cleanup("TestDB1")
59-
env.Cleanup("TestDB2")
60-
defer env.Cleanup("TestDB1")
61-
defer env.Cleanup("TestDB2")
59+
env.Cleanup("testmultidbbasicrw")
60+
env.Cleanup("testmultidbbasicrw2")
61+
defer env.Cleanup("testmultidbbasicrw")
62+
defer env.Cleanup("testmultidbbasicrw2")
6263
commontests.TestMultiDBBasicRW(t, env.DBProvider)
6364

6465
}
@@ -67,8 +68,8 @@ func TestMultiDBBasicRW(t *testing.T) {
6768
func TestDeletes(t *testing.T) {
6869
if ledgerconfig.IsCouchDBEnabled() == true {
6970
env := NewTestVDBEnv(t)
70-
env.Cleanup("TestDB")
71-
defer env.Cleanup("TestDB")
71+
env.Cleanup("testdeletes")
72+
defer env.Cleanup("testdeletes")
7273
commontests.TestDeletes(t, env.DBProvider)
7374
}
7475
}
@@ -77,8 +78,8 @@ func TestIterator(t *testing.T) {
7778
if ledgerconfig.IsCouchDBEnabled() == true {
7879

7980
env := NewTestVDBEnv(t)
80-
env.Cleanup("TestDB")
81-
defer env.Cleanup("TestDB")
81+
env.Cleanup("testiterator")
82+
defer env.Cleanup("testiterator")
8283
commontests.TestIterator(t, env.DBProvider)
8384

8485
}
@@ -119,8 +120,8 @@ func TestQuery(t *testing.T) {
119120
if ledgerconfig.IsCouchDBEnabled() == true {
120121

121122
env := NewTestVDBEnv(t)
122-
env.Cleanup("TestDB")
123-
defer env.Cleanup("TestDB")
123+
env.Cleanup("testquery")
124+
defer env.Cleanup("testquery")
124125
commontests.TestQuery(t, env.DBProvider)
125126

126127
}

core/ledger/kvledger/txmgmt/statedb/statecouchdb/statecouchdb_test_export.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ import (
2525
)
2626

2727
//Basic setup to test couch
28-
var connectURL = "localhost:5984"
29-
var badConnectURL = "localhost:5990"
28+
var connectURL = "couchdb:5984"
29+
var badConnectURL = "couchdb:5990"
3030
var username = ""
3131
var password = ""
3232

core/ledger/util/couchdb/couchdb_test.go

+25-21
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,17 @@ import (
3232
//Basic setup to test couch
3333
var connectURL = "couchdb:5984"
3434
var badConnectURL = "couchdb:5990"
35-
var database = "couch_util_testdb"
3635
var username = ""
3736
var password = ""
3837

39-
func cleanup() error {
38+
func cleanup(database string) error {
4039
//create a new connection
41-
couchInstance, _ := CreateCouchInstance(connectURL, username, password)
42-
db, err := CreateCouchDatabase(*couchInstance, database)
40+
couchInstance, err := CreateCouchInstance(connectURL, username, password)
4341
if err != nil {
4442
fmt.Println("Unexpected error", err)
4543
return err
4644
}
45+
db := CouchDatabase{couchInstance: *couchInstance, dbName: database}
4746
//drop the test database
4847
db.DropDatabase()
4948
return nil
@@ -62,8 +61,7 @@ var assetJSON = []byte(`{"asset_name":"marble1","color":"blue","size":"35","owne
6261

6362
func TestMain(m *testing.M) {
6463
ledgertestutil.SetupCoreYAMLConfig("./../../../../peer")
65-
//TODO CouchDB tests are disabled. Re-enable once intermittent failures are resolved.
66-
//viper.Set("ledger.state.stateDatabase", "CouchDB")
64+
viper.Set("ledger.state.stateDatabase", "CouchDB")
6765
result := m.Run()
6866
viper.Set("ledger.state.stateDatabase", "goleveldb")
6967
os.Exit(result)
@@ -92,9 +90,10 @@ func TestDBCreateSaveWithoutRevision(t *testing.T) {
9290

9391
if ledgerconfig.IsCouchDBEnabled() == true {
9492

95-
err := cleanup()
93+
database := "testdbcreatesavewithoutrevision"
94+
err := cleanup(database)
9695
testutil.AssertNoError(t, err, fmt.Sprintf("Error when trying to cleanup Error: %s", err))
97-
defer cleanup()
96+
defer cleanup(database)
9897

9998
if err == nil {
10099
//create a new instance and database object
@@ -162,9 +161,10 @@ func TestDBCreateDatabaseAndPersist(t *testing.T) {
162161

163162
if ledgerconfig.IsCouchDBEnabled() == true {
164163

165-
err := cleanup()
164+
database := "testdbcreatedatabaseandpersist"
165+
err := cleanup(database)
166166
testutil.AssertNoError(t, err, fmt.Sprintf("Error when trying to cleanup Error: %s", err))
167-
defer cleanup()
167+
defer cleanup(database)
168168

169169
if err == nil {
170170
//create a new instance and database object
@@ -250,9 +250,10 @@ func TestDBBadJSON(t *testing.T) {
250250

251251
if ledgerconfig.IsCouchDBEnabled() == true {
252252

253-
err := cleanup()
253+
database := "testdbbadjson"
254+
err := cleanup(database)
254255
testutil.AssertNoError(t, err, fmt.Sprintf("Error when trying to cleanup Error: %s", err))
255-
defer cleanup()
256+
defer cleanup(database)
256257

257258
if err == nil {
258259

@@ -286,9 +287,10 @@ func TestPrefixScan(t *testing.T) {
286287
if !ledgerconfig.IsCouchDBEnabled() {
287288
return
288289
}
289-
err := cleanup()
290+
database := "testprefixscan"
291+
err := cleanup(database)
290292
testutil.AssertNoError(t, err, fmt.Sprintf("Error when trying to cleanup Error: %s", err))
291-
defer cleanup()
293+
defer cleanup(database)
292294

293295
if err == nil {
294296
//create a new instance and database object
@@ -339,17 +341,17 @@ func TestPrefixScan(t *testing.T) {
339341
//Retrieve the info for the new database and make sure the name matches
340342
_, _, errdbinfo := db.GetDatabaseInfo()
341343
testutil.AssertError(t, errdbinfo, fmt.Sprintf("Error should have been thrown for missing database"))
342-
343344
}
344345
}
345346

346347
func TestDBSaveAttachment(t *testing.T) {
347348

348349
if ledgerconfig.IsCouchDBEnabled() == true {
349350

350-
err := cleanup()
351+
database := "testdbsaveattachment"
352+
err := cleanup(database)
351353
testutil.AssertNoError(t, err, fmt.Sprintf("Error when trying to cleanup Error: %s", err))
352-
defer cleanup()
354+
defer cleanup(database)
353355

354356
if err == nil {
355357

@@ -390,9 +392,10 @@ func TestDBDeleteDocument(t *testing.T) {
390392

391393
if ledgerconfig.IsCouchDBEnabled() == true {
392394

393-
err := cleanup()
395+
database := "testdbdeletedocument"
396+
err := cleanup(database)
394397
testutil.AssertNoError(t, err, fmt.Sprintf("Error when trying to cleanup Error: %s", err))
395-
defer cleanup()
398+
defer cleanup(database)
396399

397400
if err == nil {
398401
//create a new instance and database object
@@ -427,9 +430,10 @@ func TestDBDeleteNonExistingDocument(t *testing.T) {
427430

428431
if ledgerconfig.IsCouchDBEnabled() == true {
429432

430-
err := cleanup()
433+
database := "testdbdeletenonexistingdocument"
434+
err := cleanup(database)
431435
testutil.AssertNoError(t, err, fmt.Sprintf("Error when trying to cleanup Error: %s", err))
432-
defer cleanup()
436+
defer cleanup(database)
433437

434438
if err == nil {
435439
//create a new instance and database object

core/ledger/util/couchdb/couchdbutil_test.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,9 @@ import (
2828
func TestCreateCouchDBConnectionAndDB(t *testing.T) {
2929
if ledgerconfig.IsCouchDBEnabled() == true {
3030

31-
cleanup()
32-
defer cleanup()
31+
database := "testcreatecouchdbconnectionanddb"
32+
cleanup(database)
33+
defer cleanup(database)
3334
//create a new connection
3435
couchInstance, err := CreateCouchInstance(connectURL, "", "")
3536
testutil.AssertNoError(t, err, fmt.Sprintf("Error when trying to CreateCouchInstance"))

0 commit comments

Comments
 (0)