Commit cbcc2979 authored by vipwzw's avatar vipwzw

merge from chain33

parent 8a67a5cf
......@@ -23,7 +23,7 @@ func TestCount(t *testing.T) {
assert.Equal(t, i, int64(1))
kvs, err := count.Save()
assert.Nil(t, err)
setKV(ldb, kvs)
util.SaveKVList(ldb, kvs)
count = NewCount("prefix", "name#hello", kvdb)
i, err = count.Get()
......
......@@ -33,7 +33,7 @@ func TestJoin(t *testing.T) {
kvs, err := tablejoin.Save()
assert.Nil(t, err)
assert.Equal(t, 7, len(kvs))
setKV(ldb, kvs)
util.SaveKVList(ldb, kvs)
//query table
//每个表的查询,用 tablejoin.MustGetTable("gameaddr")
//join query 用 tablejoin.Query
......@@ -54,7 +54,7 @@ func TestJoin(t *testing.T) {
kvs, err = tablejoin.Save()
assert.Nil(t, err)
assert.Equal(t, 7, len(kvs))
setKV(ldb, kvs)
util.SaveKVList(ldb, kvs)
rows, err = tablejoin.ListIndex("addr#status", JoinKey([]byte("addr1"), []byte("2")), nil, 0, 0)
assert.Nil(t, err)
assert.Equal(t, 1, len(rows))
......@@ -78,7 +78,7 @@ func TestJoin(t *testing.T) {
kvs, err = tablejoin.Save()
assert.Nil(t, err)
assert.Equal(t, 5, len(kvs))
setKV(ldb, kvs)
util.SaveKVList(ldb, kvs)
//改回到全部是1的情况
rightdata = &protodata.Game{GameID: "gameid1", Status: 1}
......@@ -88,7 +88,7 @@ func TestJoin(t *testing.T) {
kvs, err = tablejoin.Save()
assert.Nil(t, err)
assert.Equal(t, 10, len(kvs))
setKV(ldb, kvs)
util.SaveKVList(ldb, kvs)
rows, err = tablejoin.ListIndex("addr#status", JoinKey([]byte("addr1"), []byte("1")), nil, 0, 0)
assert.Nil(t, err)
assert.Equal(t, 1, len(rows))
......
......@@ -8,7 +8,6 @@ import (
"fmt"
"testing"
"github.com/33cn/chain33/common"
"github.com/33cn/chain33/common/db"
"github.com/33cn/chain33/types"
"github.com/33cn/chain33/util"
......@@ -49,7 +48,7 @@ func TestTransactinList(t *testing.T) {
assert.Nil(t, err)
assert.Equal(t, len(kvs), 12)
//save to database
setKV(ldb, kvs)
util.SaveKVList(ldb, kvs)
//测试查询
query := table.GetQuery(kvdb)
......@@ -187,7 +186,7 @@ func TestTransactinListAuto(t *testing.T) {
assert.Nil(t, err)
assert.Equal(t, len(kvs), 13)
//save to database
setKV(ldb, kvs)
util.SaveKVList(ldb, kvs)
//测试查询
query := table.GetQuery(kvdb)
......@@ -255,28 +254,6 @@ func mergeDup(kvs []*types.KeyValue) (kvset []*types.KeyValue) {
return kvset
}
func setKV(kvdb db.DB, kvs []*types.KeyValue) {
//printKV(kvs)
batch := kvdb.NewBatch(true)
for i := 0; i < len(kvs); i++ {
if kvs[i].Value == nil {
batch.Delete(kvs[i].Key)
continue
}
batch.Set(kvs[i].Key, kvs[i].Value)
}
err := batch.Write()
if err != nil {
panic(err)
}
}
func printKV(kvs []*types.KeyValue) {
for i := 0; i < len(kvs); i++ {
fmt.Printf("KV %d %s(%s)\n", i, string(kvs[i].Key), common.ToHex(kvs[i].Value))
}
}
func TestRow(t *testing.T) {
rowmeta := NewTransactionRow()
row := rowmeta.CreateRow()
......@@ -325,7 +302,7 @@ func TestDel(t *testing.T) {
assert.Nil(t, err)
assert.Equal(t, len(kvs), 6)
//save to database
setKV(ldb, kvs)
util.SaveKVList(ldb, kvs)
//printKV(kvs)
query := table.GetQuery(kvdb)
rows, err := query.ListIndex("From", []byte(addr1[0:10]), nil, 0, 0)
......@@ -367,7 +344,7 @@ func TestUpdate(t *testing.T) {
assert.Nil(t, err)
assert.Equal(t, len(kvs), 3)
//save to database
setKV(ldb, kvs)
util.SaveKVList(ldb, kvs)
query := table.GetQuery(kvdb)
rows, err := query.ListIndex("From", []byte(tx1.From()), nil, 0, 0)
assert.Nil(t, err)
......@@ -403,7 +380,7 @@ func TestReplace(t *testing.T) {
assert.Nil(t, err)
assert.Equal(t, 3, len(kvs))
//save to database
setKV(ldb, kvs)
util.SaveKVList(ldb, kvs)
query := table.GetQuery(kvdb)
_, err = query.ListIndex("From", []byte(addr1[0:10]), nil, 0, 0)
assert.Equal(t, err, types.ErrNotFound)
......
......@@ -159,7 +159,15 @@ func (c *KVCreator) GetRollbackKVList() ([]*types.KeyValue, error) {
if err != nil {
return nil, err
}
return c.parseRollback(&rollbacklog)
kvs, err := c.parseRollback(&rollbacklog)
if err != nil {
return nil, err
}
//reverse kvs
for left, right := 0, len(kvs)-1; left < right; left, right = left+1, right-1 {
kvs[left], kvs[right] = kvs[right], kvs[left]
}
return kvs, nil
}
//rollbackLog rollback log
......
......@@ -11,14 +11,64 @@ import (
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"))
creator := NewKVCreator(kvdb, []byte("prefix-"), nil)
creator.AddKVOnly([]byte("a"), []byte("b"))
_, err := kvdb.Get([]byte("prefix-a"))
assert.Equal(t, err, types.ErrNotFound)
creator.Add([]byte("a"), []byte("b"))
value, err := kvdb.Get([]byte("a"))
value, err := kvdb.Get([]byte("prefix-a"))
assert.Equal(t, err, nil)
assert.Equal(t, value, []byte("b"))
creator = NewKVCreator(kvdb, []byte("prefix-"), []byte("rollback"))
creator.Add([]byte("a"), []byte("b"))
creator.Add([]byte("a1"), []byte("b1"))
creator.AddNoPrefix([]byte("np"), []byte("np-value"))
creator.AddList([]*types.KeyValue{
{Key: []byte("l1"), Value: []byte("vl1")},
{Key: []byte("l2"), Value: []byte("vl2")},
})
creator.Add([]byte("c1"), nil)
creator.Add([]byte("l2"), nil)
creator.AddRollbackKV()
assert.Equal(t, 7, len(creator.KVList()))
util.SaveKVList(ldb, creator.KVList())
kvs, err := creator.GetRollbackKVList()
assert.Nil(t, err)
assert.Equal(t, 6, len(kvs))
assert.Equal(t, []byte("b"), kvs[5].Value)
assert.Equal(t, []byte(nil), kvs[4].Value)
assert.Equal(t, []byte(nil), kvs[3].Value)
assert.Equal(t, []byte(nil), kvs[2].Value)
assert.Equal(t, []byte(nil), kvs[1].Value)
assert.Equal(t, []byte("vl2"), kvs[0].Value)
//current: a = b
//set data:
//a -> b (a -> b)
//a1 -> b1 (a1 -> nil)
//l1 -> vl1 (l1 -> nil)
//l2 -> vl2 (l2->nil)
//c1 -> nil (ignore)
//l2 -> nil (l2 -> vl2)
//rollback 的过程实际上是 set 的逆过程,就像时间倒流一样
//save rollback kvs
_, err = creator.Get([]byte("np"))
assert.Equal(t, types.ErrNotFound, err)
v, _ := creator.GetNoPrefix([]byte("np"))
assert.Equal(t, []byte("np-value"), v)
util.SaveKVList(ldb, kvs)
v, _ = kvdb.Get([]byte("prefix-a"))
assert.Equal(t, []byte("b"), v)
v, _ = creator.Get([]byte("a"))
assert.Equal(t, []byte("b"), v)
_, err = creator.Get([]byte("a1"))
assert.Equal(t, types.ErrNotFound, err)
_, err = creator.Get([]byte("l1"))
assert.Equal(t, types.ErrNotFound, err)
_, err = creator.Get([]byte("l2"))
assert.Equal(t, types.ErrNotFound, err)
_, err = creator.Get([]byte("c1"))
assert.Equal(t, types.ErrNotFound, err)
}
func TestHeightIndexStr(t *testing.T) {
......
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