Commit 5a3e37b1 authored by vipwzw's avatar vipwzw

add kvcreator

parent e4a889a0
...@@ -7,12 +7,13 @@ package table ...@@ -7,12 +7,13 @@ package table
import ( import (
"testing" "testing"
"github.com/33cn/chain33/util"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
) )
func TestCount(t *testing.T) { func TestCount(t *testing.T) {
dir, leveldb, kvdb := getdb() dir, ldb, kvdb := util.CreateTestDB()
defer dbclose(dir, leveldb) defer util.CloseTestDB(dir, ldb)
count := NewCount("prefix", "name#hello", kvdb) count := NewCount("prefix", "name#hello", kvdb)
count.Inc() count.Inc()
count.Dec() count.Dec()
...@@ -22,7 +23,7 @@ func TestCount(t *testing.T) { ...@@ -22,7 +23,7 @@ func TestCount(t *testing.T) {
assert.Equal(t, i, int64(1)) assert.Equal(t, i, int64(1))
kvs, err := count.Save() kvs, err := count.Save()
assert.Nil(t, err) assert.Nil(t, err)
setKV(leveldb, kvs) setKV(ldb, kvs)
count = NewCount("prefix", "name#hello", kvdb) count = NewCount("prefix", "name#hello", kvdb)
i, err = count.Get() i, err = count.Get()
......
...@@ -5,6 +5,7 @@ import ( ...@@ -5,6 +5,7 @@ import (
"testing" "testing"
protodata "github.com/33cn/chain33/common/db/table/proto" protodata "github.com/33cn/chain33/common/db/table/proto"
"github.com/33cn/chain33/util"
"github.com/golang/protobuf/proto" "github.com/golang/protobuf/proto"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
...@@ -12,8 +13,8 @@ import ( ...@@ -12,8 +13,8 @@ import (
) )
func TestJoin(t *testing.T) { func TestJoin(t *testing.T) {
dir, leveldb, kvdb := getdb() dir, ldb, kvdb := util.CreateTestDB()
defer dbclose(dir, leveldb) defer util.CloseTestDB(dir, ldb)
table1, err := NewTable(NewGameRow(), kvdb, optgame) table1, err := NewTable(NewGameRow(), kvdb, optgame)
assert.Nil(t, err) assert.Nil(t, err)
table2, err := NewTable(NewGameAddrRow(), kvdb, optgameaddr) table2, err := NewTable(NewGameAddrRow(), kvdb, optgameaddr)
...@@ -32,7 +33,7 @@ func TestJoin(t *testing.T) { ...@@ -32,7 +33,7 @@ func TestJoin(t *testing.T) {
kvs, err := tablejoin.Save() kvs, err := tablejoin.Save()
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, 7, len(kvs)) assert.Equal(t, 7, len(kvs))
setKV(leveldb, kvs) setKV(ldb, kvs)
//query table //query table
//每个表的查询,用 tablejoin.MustGetTable("gameaddr") //每个表的查询,用 tablejoin.MustGetTable("gameaddr")
//join query 用 tablejoin.Query //join query 用 tablejoin.Query
...@@ -53,7 +54,7 @@ func TestJoin(t *testing.T) { ...@@ -53,7 +54,7 @@ func TestJoin(t *testing.T) {
kvs, err = tablejoin.Save() kvs, err = tablejoin.Save()
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, 7, len(kvs)) assert.Equal(t, 7, len(kvs))
setKV(leveldb, kvs) setKV(ldb, kvs)
rows, err = tablejoin.ListIndex("addr#status", JoinKey([]byte("addr1"), []byte("2")), nil, 0, 0) rows, err = tablejoin.ListIndex("addr#status", JoinKey([]byte("addr1"), []byte("2")), nil, 0, 0)
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, 1, len(rows)) assert.Equal(t, 1, len(rows))
...@@ -77,7 +78,7 @@ func TestJoin(t *testing.T) { ...@@ -77,7 +78,7 @@ func TestJoin(t *testing.T) {
kvs, err = tablejoin.Save() kvs, err = tablejoin.Save()
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, 5, len(kvs)) assert.Equal(t, 5, len(kvs))
setKV(leveldb, kvs) setKV(ldb, kvs)
//改回到全部是1的情况 //改回到全部是1的情况
rightdata = &protodata.Game{GameID: "gameid1", Status: 1} rightdata = &protodata.Game{GameID: "gameid1", Status: 1}
...@@ -87,7 +88,7 @@ func TestJoin(t *testing.T) { ...@@ -87,7 +88,7 @@ func TestJoin(t *testing.T) {
kvs, err = tablejoin.Save() kvs, err = tablejoin.Save()
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, 10, len(kvs)) assert.Equal(t, 10, len(kvs))
setKV(leveldb, kvs) setKV(ldb, kvs)
rows, err = tablejoin.ListIndex("addr#status", JoinKey([]byte("addr1"), []byte("1")), nil, 0, 0) rows, err = tablejoin.ListIndex("addr#status", JoinKey([]byte("addr1"), []byte("1")), nil, 0, 0)
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, 1, len(rows)) assert.Equal(t, 1, len(rows))
......
...@@ -6,8 +6,6 @@ package table ...@@ -6,8 +6,6 @@ package table
import ( import (
"bytes" "bytes"
"fmt" "fmt"
"io/ioutil"
"os"
"testing" "testing"
"github.com/33cn/chain33/common" "github.com/33cn/chain33/common"
...@@ -19,8 +17,8 @@ import ( ...@@ -19,8 +17,8 @@ import (
) )
func TestTransactinList(t *testing.T) { func TestTransactinList(t *testing.T) {
dir, leveldb, kvdb := getdb() dir, ldb, kvdb := util.CreateTestDB()
defer dbclose(dir, leveldb) defer util.CloseTestDB(dir, ldb)
opt := &Option{ opt := &Option{
Prefix: "prefix", Prefix: "prefix",
Name: "name", Name: "name",
...@@ -51,7 +49,7 @@ func TestTransactinList(t *testing.T) { ...@@ -51,7 +49,7 @@ func TestTransactinList(t *testing.T) {
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, len(kvs), 12) assert.Equal(t, len(kvs), 12)
//save to database //save to database
setKV(leveldb, kvs) setKV(ldb, kvs)
//测试查询 //测试查询
query := table.GetQuery(kvdb) query := table.GetQuery(kvdb)
...@@ -157,8 +155,8 @@ func TestTransactinList(t *testing.T) { ...@@ -157,8 +155,8 @@ func TestTransactinList(t *testing.T) {
} }
func TestTransactinListAuto(t *testing.T) { func TestTransactinListAuto(t *testing.T) {
dir, leveldb, kvdb := getdb() dir, ldb, kvdb := util.CreateTestDB()
defer dbclose(dir, leveldb) defer util.CloseTestDB(dir, ldb)
opt := &Option{ opt := &Option{
Prefix: "prefix", Prefix: "prefix",
Name: "name", Name: "name",
...@@ -189,7 +187,7 @@ func TestTransactinListAuto(t *testing.T) { ...@@ -189,7 +187,7 @@ func TestTransactinListAuto(t *testing.T) {
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, len(kvs), 13) assert.Equal(t, len(kvs), 13)
//save to database //save to database
setKV(leveldb, kvs) setKV(ldb, kvs)
//测试查询 //测试查询
query := table.GetQuery(kvdb) query := table.GetQuery(kvdb)
...@@ -298,8 +296,8 @@ func TestRow(t *testing.T) { ...@@ -298,8 +296,8 @@ func TestRow(t *testing.T) {
} }
func TestDel(t *testing.T) { func TestDel(t *testing.T) {
dir, leveldb, kvdb := getdb() dir, ldb, kvdb := util.CreateTestDB()
defer dbclose(dir, leveldb) defer util.CloseTestDB(dir, ldb)
opt := &Option{ opt := &Option{
Prefix: "prefix", Prefix: "prefix",
Name: "name", Name: "name",
...@@ -327,7 +325,7 @@ func TestDel(t *testing.T) { ...@@ -327,7 +325,7 @@ func TestDel(t *testing.T) {
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, len(kvs), 6) assert.Equal(t, len(kvs), 6)
//save to database //save to database
setKV(leveldb, kvs) setKV(ldb, kvs)
//printKV(kvs) //printKV(kvs)
query := table.GetQuery(kvdb) query := table.GetQuery(kvdb)
rows, err := query.ListIndex("From", []byte(addr1[0:10]), nil, 0, 0) rows, err := query.ListIndex("From", []byte(addr1[0:10]), nil, 0, 0)
...@@ -344,8 +342,8 @@ func printAllKey(db db.DB) { ...@@ -344,8 +342,8 @@ func printAllKey(db db.DB) {
} }
func TestUpdate(t *testing.T) { func TestUpdate(t *testing.T) {
dir, leveldb, kvdb := getdb() dir, ldb, kvdb := util.CreateTestDB()
defer dbclose(dir, leveldb) defer util.CloseTestDB(dir, ldb)
opt := &Option{ opt := &Option{
Prefix: "prefix", Prefix: "prefix",
Name: "name", Name: "name",
...@@ -369,7 +367,7 @@ func TestUpdate(t *testing.T) { ...@@ -369,7 +367,7 @@ func TestUpdate(t *testing.T) {
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, len(kvs), 3) assert.Equal(t, len(kvs), 3)
//save to database //save to database
setKV(leveldb, kvs) setKV(ldb, kvs)
query := table.GetQuery(kvdb) query := table.GetQuery(kvdb)
rows, err := query.ListIndex("From", []byte(tx1.From()), nil, 0, 0) rows, err := query.ListIndex("From", []byte(tx1.From()), nil, 0, 0)
assert.Nil(t, err) assert.Nil(t, err)
...@@ -377,8 +375,8 @@ func TestUpdate(t *testing.T) { ...@@ -377,8 +375,8 @@ func TestUpdate(t *testing.T) {
} }
func TestReplace(t *testing.T) { func TestReplace(t *testing.T) {
dir, leveldb, kvdb := getdb() dir, ldb, kvdb := util.CreateTestDB()
defer dbclose(dir, leveldb) defer util.CloseTestDB(dir, ldb)
opt := &Option{ opt := &Option{
Prefix: "prefix", Prefix: "prefix",
Name: "name", Name: "name",
...@@ -405,7 +403,7 @@ func TestReplace(t *testing.T) { ...@@ -405,7 +403,7 @@ func TestReplace(t *testing.T) {
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, 3, len(kvs)) assert.Equal(t, 3, len(kvs))
//save to database //save to database
setKV(leveldb, kvs) setKV(ldb, kvs)
query := table.GetQuery(kvdb) query := table.GetQuery(kvdb)
_, err = query.ListIndex("From", []byte(addr1[0:10]), nil, 0, 0) _, err = query.ListIndex("From", []byte(addr1[0:10]), nil, 0, 0)
assert.Equal(t, err, types.ErrNotFound) assert.Equal(t, err, types.ErrNotFound)
...@@ -445,20 +443,3 @@ func (tx *TransactionRow) Get(key string) ([]byte, error) { ...@@ -445,20 +443,3 @@ func (tx *TransactionRow) Get(key string) ([]byte, error) {
} }
return nil, types.ErrNotFound return nil, types.ErrNotFound
} }
func getdb() (string, db.DB, db.KVDB) {
dir, err := ioutil.TempDir("", "goleveldb")
if err != nil {
panic(err)
}
leveldb, err := db.NewGoLevelDB("goleveldb", dir, 128)
if err != nil {
panic(err)
}
return dir, leveldb, db.NewKVDB(leveldb)
}
func dbclose(dir string, dbm db.DB) {
os.RemoveAll(dir)
dbm.Close()
}
package dapp
import (
"testing"
"github.com/33cn/chain33/types"
"github.com/stretchr/testify/assert"
)
type demoApp struct {
*DriverBase
}
func newdemoApp() Driver {
demo := &demoApp{DriverBase: &DriverBase{}}
demo.SetChild(demo)
return demo
}
func (demo *demoApp) GetDriverName() string {
return "demo"
}
type noneApp struct {
*DriverBase
}
func newnoneApp() Driver {
none := &noneApp{DriverBase: &DriverBase{}}
none.SetChild(none)
return none
}
func (none *noneApp) GetDriverName() string {
return "none"
}
func TestReigister(t *testing.T) {
Register("none", newnoneApp, 0)
Register("demo", newdemoApp, 1)
_, err := LoadDriver("demo", 0)
assert.Equal(t, err, types.ErrUnknowDriver)
_, err = LoadDriver("demo", 1)
assert.Equal(t, err, nil)
tx := &types.Transaction{Execer: []byte("demo")}
driver := LoadDriverAllow(tx, 0, 0)
assert.Equal(t, "none", driver.GetDriverName())
driver = LoadDriverAllow(tx, 0, 1)
assert.Equal(t, "demo", driver.GetDriverName())
types.SetTitleOnlyForTest("user.p.hello.")
tx = &types.Transaction{Execer: []byte("demo")}
driver = LoadDriverAllow(tx, 0, 0)
assert.Equal(t, "none", driver.GetDriverName())
driver = LoadDriverAllow(tx, 0, 1)
assert.Equal(t, "demo", driver.GetDriverName())
tx.Execer = []byte("user.p.hello.demo")
driver = LoadDriverAllow(tx, 0, 1)
assert.Equal(t, "demo", driver.GetDriverName())
tx.Execer = []byte("user.p.hello2.demo")
driver = LoadDriverAllow(tx, 0, 1)
assert.Equal(t, "none", driver.GetDriverName())
}
func TestExecAddress(t *testing.T) {
assert.Equal(t, "16htvcBNSEA7fZhAdLJphDwQRQJaHpyHTp", ExecAddress("ticket"))
}
...@@ -7,6 +7,7 @@ package dapp ...@@ -7,6 +7,7 @@ package dapp
import ( import (
"fmt" "fmt"
"github.com/33cn/chain33/common/db"
"github.com/33cn/chain33/types" "github.com/33cn/chain33/types"
) )
...@@ -15,3 +16,37 @@ func HeightIndexStr(height, index int64) string { ...@@ -15,3 +16,37 @@ func HeightIndexStr(height, index int64) string {
v := height*types.MaxTxsPerBlock + index v := height*types.MaxTxsPerBlock + index
return fmt.Sprintf("%018d", v) return fmt.Sprintf("%018d", v)
} }
//KVCreator 创建KV的辅助工具
type KVCreator struct {
kvs []*types.KeyValue
kvdb db.KV
}
//NewKVCreator 创建创建者
func NewKVCreator(kv db.KV) *KVCreator {
return &KVCreator{kvdb: kv}
}
func (c *KVCreator) add(key, value []byte, set bool) *KVCreator {
c.kvs = append(c.kvs, &types.KeyValue{Key: key, Value: value})
if set {
c.kvdb.Set(key, value)
}
return c
}
//Add add and set to kvdb
func (c *KVCreator) Add(key, value []byte) *KVCreator {
return c.add(key, value, true)
}
//AddKV only add KV
func (c *KVCreator) AddKV(key, value []byte) *KVCreator {
return c.add(key, value, false)
}
//KVList 读取所有的kv列表
func (c *KVCreator) KVList() []*types.KeyValue {
return c.kvs
}
package dapp
import (
"testing"
"github.com/33cn/chain33/types"
"github.com/33cn/chain33/util"
"github.com/stretchr/testify/assert"
)
func TestKVCreator(t *testing.T) {
dir, ldb, kvdb := util.CreateTestDB()
defer util.CloseTestDB(dir, ldb)
creator := NewKVCreator(kvdb)
creator.AddKV([]byte("a"), []byte("b"))
_, err := kvdb.Get([]byte("a"))
assert.Equal(t, err, types.ErrNotFound)
creator.Add([]byte("a"), []byte("b"))
value, err := kvdb.Get([]byte("a"))
assert.Equal(t, err, nil)
assert.Equal(t, value, []byte("b"))
}
func TestHeightIndexStr(t *testing.T) {
assert.Equal(t, "000000000000100001", HeightIndexStr(1, 1))
}
...@@ -10,12 +10,37 @@ import ( ...@@ -10,12 +10,37 @@ import (
"github.com/33cn/chain33/common" "github.com/33cn/chain33/common"
"github.com/33cn/chain33/common/crypto" "github.com/33cn/chain33/common/crypto"
"github.com/golang/protobuf/proto" proto "github.com/golang/protobuf/proto"
) )
// Hash 获取block的hash值 // Hash 获取block的hash值
func (block *Block) Hash() []byte { func (block *Block) Hash() []byte {
data, err := proto.Marshal(block.GetHeader()) if IsFork(block.Height, "ForkBlockHash") {
return block.HashNew()
}
return block.HashOld()
}
//HashByForkHeight hash 通过自己设置的fork 高度计算 hash
func (block *Block) HashByForkHeight(forkheight int64) []byte {
if block.Height >= forkheight {
return block.HashNew()
}
return block.HashOld()
}
//HashNew 新版本的Hash
func (block *Block) HashNew() []byte {
data, err := proto.Marshal(block.getHeaderHashNew())
if err != nil {
panic(err)
}
return common.Sha256(data)
}
//HashOld 老版本的hash
func (block *Block) HashOld() []byte {
data, err := proto.Marshal(block.getHeaderHashOld())
if err != nil { if err != nil {
panic(err) panic(err)
} }
...@@ -35,11 +60,32 @@ func (block *Block) GetHeader() *Header { ...@@ -35,11 +60,32 @@ func (block *Block) GetHeader() *Header {
head.TxHash = block.TxHash head.TxHash = block.TxHash
head.BlockTime = block.BlockTime head.BlockTime = block.BlockTime
head.Height = block.Height head.Height = block.Height
if IsFork(head.Height, "ForkBlockHash") {
head.Difficulty = block.Difficulty head.Difficulty = block.Difficulty
head.StateHash = block.StateHash head.StateHash = block.StateHash
head.TxCount = int64(len(block.Txs)) head.TxCount = int64(len(block.Txs))
} return head
}
func (block *Block) getHeaderHashOld() *Header {
head := &Header{}
head.Version = block.Version
head.ParentHash = block.ParentHash
head.TxHash = block.TxHash
head.BlockTime = block.BlockTime
head.Height = block.Height
return head
}
func (block *Block) getHeaderHashNew() *Header {
head := &Header{}
head.Version = block.Version
head.ParentHash = block.ParentHash
head.TxHash = block.TxHash
head.BlockTime = block.BlockTime
head.Height = block.Height
head.Difficulty = block.Difficulty
head.StateHash = block.StateHash
head.TxCount = int64(len(block.Txs))
return head return head
} }
......
package types
import (
"encoding/hex"
"testing"
"github.com/stretchr/testify/assert"
)
func TestBlock(t *testing.T) {
b := &Block{}
assert.Equal(t, "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", hex.EncodeToString(b.Hash()))
assert.Equal(t, b.HashOld(), b.HashNew())
assert.Equal(t, b.HashOld(), b.Hash())
b.Height = 10
b.Difficulty = 1
assert.NotEqual(t, b.HashOld(), b.HashNew())
assert.NotEqual(t, b.HashOld(), b.HashNew())
assert.Equal(t, b.HashNew(), b.HashByForkHeight(10))
assert.Equal(t, b.HashOld(), b.HashByForkHeight(11))
assert.Equal(t, true, b.CheckSign())
b.Txs = append(b.Txs, &Transaction{})
assert.Equal(t, false, b.CheckSign())
b.Txs = append(b.Txs, &Transaction{})
b.Txs = append(b.Txs, &Transaction{})
b.Txs = append(b.Txs, &Transaction{})
b.Txs = append(b.Txs, &Transaction{})
assert.Equal(t, false, b.CheckSign())
}
...@@ -262,7 +262,6 @@ func TestIterateCallBack_PrefixWithoutExecAddr(t *testing.T) { ...@@ -262,7 +262,6 @@ func TestIterateCallBack_PrefixWithoutExecAddr(t *testing.T) {
value := Encode(acc) value := Encode(acc)
fmt.Println("TestIterateCallBack_PrefixWithoutExecAddr--test case 1---")
bRet := reply.IterateCallBack([]byte(key), value) bRet := reply.IterateCallBack([]byte(key), value)
assert.Equal(t, false, bRet) assert.Equal(t, false, bRet)
assert.Equal(t, 1, len(reply.Keys)) assert.Equal(t, 1, len(reply.Keys))
...@@ -270,7 +269,6 @@ func TestIterateCallBack_PrefixWithoutExecAddr(t *testing.T) { ...@@ -270,7 +269,6 @@ func TestIterateCallBack_PrefixWithoutExecAddr(t *testing.T) {
assert.Equal(t, int64(1), reply.Num) assert.Equal(t, int64(1), reply.Num)
assert.Equal(t, 0, len(reply.NextKey)) assert.Equal(t, 0, len(reply.NextKey))
fmt.Println("TestIterateCallBack_PrefixWithoutExecAddr--test case 2---")
bRet = reply.IterateCallBack([]byte(key), value) bRet = reply.IterateCallBack([]byte(key), value)
assert.Equal(t, false, bRet) assert.Equal(t, false, bRet)
assert.Equal(t, 2, len(reply.Keys)) assert.Equal(t, 2, len(reply.Keys))
...@@ -278,7 +276,6 @@ func TestIterateCallBack_PrefixWithoutExecAddr(t *testing.T) { ...@@ -278,7 +276,6 @@ func TestIterateCallBack_PrefixWithoutExecAddr(t *testing.T) {
assert.Equal(t, int64(2), reply.Num) assert.Equal(t, int64(2), reply.Num)
assert.Equal(t, 0, len(reply.NextKey)) assert.Equal(t, 0, len(reply.NextKey))
fmt.Println("TestIterateCallBack_PrefixWithoutExecAddr--test case 3---")
key2 := "mavl-coins-bty-exec-16htvcBNSEA7fZhAdLJphDwQRQJaHpyHTp:2JmFaA6unrCFYEWPGRi7uuXY1KthTJxJEP" key2 := "mavl-coins-bty-exec-16htvcBNSEA7fZhAdLJphDwQRQJaHpyHTp:2JmFaA6unrCFYEWPGRi7uuXY1KthTJxJEP"
bRet = reply.IterateCallBack([]byte(key2), value) bRet = reply.IterateCallBack([]byte(key2), value)
assert.Equal(t, false, bRet) assert.Equal(t, false, bRet)
...@@ -287,7 +284,6 @@ func TestIterateCallBack_PrefixWithoutExecAddr(t *testing.T) { ...@@ -287,7 +284,6 @@ func TestIterateCallBack_PrefixWithoutExecAddr(t *testing.T) {
assert.Equal(t, int64(2), reply.Num) assert.Equal(t, int64(2), reply.Num)
assert.Equal(t, 0, len(reply.NextKey)) assert.Equal(t, 0, len(reply.NextKey))
fmt.Println("TestIterateCallBack_PrefixWithoutExecAddr--test case 4---")
key3 := "mavl-coins-bty-exec-26htvcBNSEA7fZhAdLJphDwQRQJaHpyHTp:1JmFaA6unrCFYEWPGRi7uuXY1KthTJxJEP" key3 := "mavl-coins-bty-exec-26htvcBNSEA7fZhAdLJphDwQRQJaHpyHTp:1JmFaA6unrCFYEWPGRi7uuXY1KthTJxJEP"
bRet = reply.IterateCallBack([]byte(key3), value) bRet = reply.IterateCallBack([]byte(key3), value)
assert.Equal(t, false, bRet) assert.Equal(t, false, bRet)
...@@ -296,7 +292,6 @@ func TestIterateCallBack_PrefixWithoutExecAddr(t *testing.T) { ...@@ -296,7 +292,6 @@ func TestIterateCallBack_PrefixWithoutExecAddr(t *testing.T) {
assert.Equal(t, int64(3), reply.Num) assert.Equal(t, int64(3), reply.Num)
assert.Equal(t, 0, len(reply.NextKey)) assert.Equal(t, 0, len(reply.NextKey))
fmt.Println("TestIterateCallBack_PrefixWithoutExecAddr--test case 5---")
reply.Count = int64(4) reply.Count = int64(4)
bRet = reply.IterateCallBack([]byte(key3), value) bRet = reply.IterateCallBack([]byte(key3), value)
...@@ -331,7 +326,6 @@ func TestIterateCallBack_PrefixWithExecAddr(t *testing.T) { ...@@ -331,7 +326,6 @@ func TestIterateCallBack_PrefixWithExecAddr(t *testing.T) {
value := Encode(acc) value := Encode(acc)
fmt.Println("TestIterateCallBack_PrefixWithExecAddr--test case 1---")
key2 := "mavl-coins-bty-exec-16htvcBNSEA7fZhAdLJphDwQRQJaHpyHTp:2JmFaA6unrCFYEWPGRi7uuXY1KthTJxJEP" key2 := "mavl-coins-bty-exec-16htvcBNSEA7fZhAdLJphDwQRQJaHpyHTp:2JmFaA6unrCFYEWPGRi7uuXY1KthTJxJEP"
bRet := reply.IterateCallBack([]byte(key2), value) bRet := reply.IterateCallBack([]byte(key2), value)
assert.Equal(t, false, bRet) assert.Equal(t, false, bRet)
...@@ -340,7 +334,6 @@ func TestIterateCallBack_PrefixWithExecAddr(t *testing.T) { ...@@ -340,7 +334,6 @@ func TestIterateCallBack_PrefixWithExecAddr(t *testing.T) {
assert.Equal(t, int64(0), reply.Num) assert.Equal(t, int64(0), reply.Num)
assert.Equal(t, 0, len(reply.NextKey)) assert.Equal(t, 0, len(reply.NextKey))
fmt.Println("TestIterateCallBack_PrefixWithExecAddr--test case 2---")
bRet = reply.IterateCallBack([]byte(key), value) bRet = reply.IterateCallBack([]byte(key), value)
assert.Equal(t, true, bRet) assert.Equal(t, true, bRet)
assert.Equal(t, 1, len(reply.Keys)) assert.Equal(t, 1, len(reply.Keys))
...@@ -348,7 +341,6 @@ func TestIterateCallBack_PrefixWithExecAddr(t *testing.T) { ...@@ -348,7 +341,6 @@ func TestIterateCallBack_PrefixWithExecAddr(t *testing.T) {
assert.Equal(t, int64(1), reply.Num) assert.Equal(t, int64(1), reply.Num)
assert.Equal(t, len(key), len(reply.NextKey)) assert.Equal(t, len(key), len(reply.NextKey))
fmt.Println("TestIterateCallBack_PrefixWithExecAddr--test case 3---")
//key2 := "mavl-coins-bty-exec-16htvcBNSEA7fZhAdLJphDwQRQJaHpyHTp:2JmFaA6unrCFYEWPGRi7uuXY1KthTJxJEP" //key2 := "mavl-coins-bty-exec-16htvcBNSEA7fZhAdLJphDwQRQJaHpyHTp:2JmFaA6unrCFYEWPGRi7uuXY1KthTJxJEP"
reply.NextKey = nil reply.NextKey = nil
reply.Count = int64(2) reply.Count = int64(2)
...@@ -359,7 +351,6 @@ func TestIterateCallBack_PrefixWithExecAddr(t *testing.T) { ...@@ -359,7 +351,6 @@ func TestIterateCallBack_PrefixWithExecAddr(t *testing.T) {
assert.Equal(t, int64(1), reply.Num) assert.Equal(t, int64(1), reply.Num)
assert.Equal(t, 0, len(reply.NextKey)) assert.Equal(t, 0, len(reply.NextKey))
fmt.Println("TestIterateCallBack_PrefixWithExecAddr--test case 4---")
reply.NextKey = nil reply.NextKey = nil
key3 := "mavl-coins-bty-exec-26htvcBNSEA7fZhAdLJphDwQRQJaHpyHTp:1JmFaA6unrCFYEWPGRi7uuXY1KthTJxJEP" key3 := "mavl-coins-bty-exec-26htvcBNSEA7fZhAdLJphDwQRQJaHpyHTp:1JmFaA6unrCFYEWPGRi7uuXY1KthTJxJEP"
bRet = reply.IterateCallBack([]byte(key3), value) bRet = reply.IterateCallBack([]byte(key3), value)
...@@ -369,7 +360,6 @@ func TestIterateCallBack_PrefixWithExecAddr(t *testing.T) { ...@@ -369,7 +360,6 @@ func TestIterateCallBack_PrefixWithExecAddr(t *testing.T) {
assert.Equal(t, int64(2), reply.Num) assert.Equal(t, int64(2), reply.Num)
assert.Equal(t, len(key3), len(reply.NextKey)) assert.Equal(t, len(key3), len(reply.NextKey))
fmt.Println("TestIterateCallBack_PrefixWithExecAddr--test case 5---")
bRet = reply.IterateCallBack([]byte(key), value) bRet = reply.IterateCallBack([]byte(key), value)
assert.Equal(t, true, bRet) assert.Equal(t, true, bRet)
assert.Equal(t, 3, len(reply.Keys)) assert.Equal(t, 3, len(reply.Keys))
......
...@@ -10,6 +10,7 @@ import ( ...@@ -10,6 +10,7 @@ import (
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"math/rand" "math/rand"
"os"
"os/user" "os/user"
"path/filepath" "path/filepath"
"strings" "strings"
...@@ -18,6 +19,7 @@ import ( ...@@ -18,6 +19,7 @@ import (
"github.com/33cn/chain33/common/address" "github.com/33cn/chain33/common/address"
"github.com/33cn/chain33/common/crypto" "github.com/33cn/chain33/common/crypto"
"github.com/33cn/chain33/common/db"
"github.com/33cn/chain33/common/log/log15" "github.com/33cn/chain33/common/log/log15"
"github.com/33cn/chain33/common/merkle" "github.com/33cn/chain33/common/merkle"
"github.com/33cn/chain33/queue" "github.com/33cn/chain33/queue"
...@@ -407,3 +409,22 @@ func ResetDatadir(cfg *types.Config, datadir string) string { ...@@ -407,3 +409,22 @@ func ResetDatadir(cfg *types.Config, datadir string) string {
cfg.Store.DbPath = filepath.Join(datadir, cfg.Store.DbPath) cfg.Store.DbPath = filepath.Join(datadir, cfg.Store.DbPath)
return datadir return datadir
} }
//CreateTestDB 创建一个测试数据库
func CreateTestDB() (string, db.DB, db.KVDB) {
dir, err := ioutil.TempDir("", "goleveldb")
if err != nil {
panic(err)
}
leveldb, err := db.NewGoLevelDB("goleveldb", dir, 128)
if err != nil {
panic(err)
}
return dir, leveldb, db.NewKVDB(leveldb)
}
//CloseTestDB 创建一个测试数据库
func CloseTestDB(dir string, dbm db.DB) {
os.RemoveAll(dir)
dbm.Close()
}
...@@ -177,3 +177,13 @@ func TestDelDupTx(t *testing.T) { ...@@ -177,3 +177,13 @@ func TestDelDupTx(t *testing.T) {
txcache = DelDupTx(txcache) txcache = DelDupTx(txcache)
assert.Equal(t, txcache, txcacheresult) assert.Equal(t, txcache, txcacheresult)
} }
func TestDB(t *testing.T) {
dir, db, kvdb := CreateTestDB()
defer CloseTestDB(dir, db)
err := kvdb.Set([]byte("a"), []byte("b"))
assert.Nil(t, err)
value, err := kvdb.Get([]byte("a"))
assert.Nil(t, err)
assert.Equal(t, value, []byte("b"))
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment