63 Star 180 Fork 3

Gitee 极速下载 / hyperledger-fabric

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
此仓库是为了提升国内下载速度的镜像仓库,每日同步一次。 原始仓库: https://github.com/hyperledger/fabric
克隆/下载
test_exports.go 5.51 KB
一键复制 编辑 原始数据 按行查看 历史
/*
Copyright IBM Corp. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
package privacyenabledstate
import (
"io/ioutil"
"os"
"testing"
"time"
"github.com/hyperledger/fabric/common/metrics/disabled"
"github.com/hyperledger/fabric/core/ledger"
"github.com/hyperledger/fabric/core/ledger/kvledger/bookkeeping"
"github.com/hyperledger/fabric/core/ledger/kvledger/txmgmt/statedb/statecouchdb"
"github.com/hyperledger/fabric/core/ledger/mock"
"github.com/hyperledger/fabric/core/ledger/util/couchdb"
"github.com/hyperledger/fabric/core/ledger/util/couchdbtest"
"github.com/stretchr/testify/assert"
)
// TestEnv - an interface that a test environment implements
type TestEnv interface {
StartExternalResource()
Init(t testing.TB)
GetDBHandle(id string) DB
GetName() string
Cleanup()
StopExternalResource()
}
// Tests will be run against each environment in this array
// For example, to skip CouchDB tests, remove &couchDBLockBasedEnv{}
//var testEnvs = []testEnv{&levelDBCommonStorageTestEnv{}, &couchDBCommonStorageTestEnv{}}
var testEnvs = []TestEnv{&LevelDBCommonStorageTestEnv{}, &CouchDBCommonStorageTestEnv{}}
///////////// LevelDB Environment //////////////
// LevelDBCommonStorageTestEnv implements TestEnv interface for leveldb based storage
type LevelDBCommonStorageTestEnv struct {
t testing.TB
provider DBProvider
bookkeeperTestEnv *bookkeeping.TestEnv
dbPath string
}
// Init implements corresponding function from interface TestEnv
func (env *LevelDBCommonStorageTestEnv) Init(t testing.TB) {
dbPath, err := ioutil.TempDir("", "cstestenv")
if err != nil {
t.Fatalf("Failed to create level db storage directory: %s", err)
}
env.bookkeeperTestEnv = bookkeeping.NewTestEnv(t)
dbProvider, err := NewCommonStorageDBProvider(
env.bookkeeperTestEnv.TestProvider,
&disabled.Provider{},
&mock.HealthCheckRegistry{},
&StateDBConfig{
&ledger.StateDBConfig{},
dbPath,
},
[]string{"lscc", "_lifecycle"},
)
assert.NoError(t, err)
env.t = t
env.provider = dbProvider
env.dbPath = dbPath
}
// StartExternalResource will be an empty implementation for levelDB test environment.
func (env *LevelDBCommonStorageTestEnv) StartExternalResource() {
// empty implementation
}
// StopExternalResource will be an empty implementation for levelDB test environment.
func (env *LevelDBCommonStorageTestEnv) StopExternalResource() {
// empty implementation
}
// GetDBHandle implements corresponding function from interface TestEnv
func (env *LevelDBCommonStorageTestEnv) GetDBHandle(id string) DB {
db, err := env.provider.GetDBHandle(id)
assert.NoError(env.t, err)
return db
}
// GetName implements corresponding function from interface TestEnv
func (env *LevelDBCommonStorageTestEnv) GetName() string {
return "levelDBCommonStorageTestEnv"
}
// Cleanup implements corresponding function from interface TestEnv
func (env *LevelDBCommonStorageTestEnv) Cleanup() {
env.provider.Close()
env.bookkeeperTestEnv.Cleanup()
os.RemoveAll(env.dbPath)
}
///////////// CouchDB Environment //////////////
// CouchDBCommonStorageTestEnv implements TestEnv interface for couchdb based storage
type CouchDBCommonStorageTestEnv struct {
couchAddress string
t testing.TB
provider DBProvider
bookkeeperTestEnv *bookkeeping.TestEnv
redoPath string
couchCleanup func()
}
// StartExternalResource starts external couchDB resources.
func (env *CouchDBCommonStorageTestEnv) StartExternalResource() {
if env.couchAddress == "" {
env.couchAddress, env.couchCleanup = couchdbtest.CouchDBSetup(nil)
}
}
// StopExternalResource stops external couchDB resources.
func (env *CouchDBCommonStorageTestEnv) StopExternalResource() {
if env.couchAddress != "" {
env.couchCleanup()
}
}
// Init implements corresponding function from interface TestEnv
func (env *CouchDBCommonStorageTestEnv) Init(t testing.TB) {
redoPath, err := ioutil.TempDir("", "pestate")
if err != nil {
t.Fatalf("Failed to create redo log directory: %s", err)
}
env.StartExternalResource()
stateDBConfig := &StateDBConfig{
StateDBConfig: &ledger.StateDBConfig{
StateDatabase: "CouchDB",
CouchDB: &couchdb.Config{
Address: env.couchAddress,
Username: "",
Password: "",
MaxRetries: 3,
MaxRetriesOnStartup: 20,
RequestTimeout: 35 * time.Second,
InternalQueryLimit: 1000,
MaxBatchUpdateSize: 1000,
RedoLogPath: redoPath,
},
},
LevelDBPath: "",
}
env.bookkeeperTestEnv = bookkeeping.NewTestEnv(t)
dbProvider, err := NewCommonStorageDBProvider(
env.bookkeeperTestEnv.TestProvider,
&disabled.Provider{},
&mock.HealthCheckRegistry{},
stateDBConfig,
[]string{"lscc", "_lifecycle"},
)
assert.NoError(t, err)
env.t = t
env.provider = dbProvider
env.redoPath = redoPath
}
// GetDBHandle implements corresponding function from interface TestEnv
func (env *CouchDBCommonStorageTestEnv) GetDBHandle(id string) DB {
db, err := env.provider.GetDBHandle(id)
assert.NoError(env.t, err)
return db
}
// GetName implements corresponding function from interface TestEnv
func (env *CouchDBCommonStorageTestEnv) GetName() string {
return "couchDBCommonStorageTestEnv"
}
// Cleanup implements corresponding function from interface TestEnv
func (env *CouchDBCommonStorageTestEnv) Cleanup() {
csdbProvider := env.provider.(*CommonStorageDBProvider)
if csdbProvider != nil {
statecouchdb.CleanupDB(env.t, csdbProvider.VersionedDBProvider)
}
os.RemoveAll(env.redoPath)
env.bookkeeperTestEnv.Cleanup()
env.provider.Close()
}
Go
1
https://gitee.com/mirrors/hyperledger-fabric.git
git@gitee.com:mirrors/hyperledger-fabric.git
mirrors
hyperledger-fabric
hyperledger-fabric
v2.1.1

搜索帮助