Commit 052bf00d authored by vipwzw's avatar vipwzw Committed by 33cn

fixbug merge iter bug

parent 680eb2a9
......@@ -72,6 +72,10 @@ func (u *js) GetDriverName() string {
return driverName
}
func (u *js) ExecutorOrder() int64 {
return drivers.ExecLocalSameTime
}
func (u *js) IsFriend(myexec, writekey []byte, othertx *types.Transaction) bool {
if othertx == nil {
return false
......
......@@ -64,7 +64,6 @@ func TestCallcode(t *testing.T) {
dir, ldb, kvdb := util.CreateTestDB()
defer util.CloseTestDB(dir, ldb)
e := initExec(ldb, kvdb, jscode, t)
call, tx := callCodeTx("test", "hello", `{"hello":"world"}`)
receipt, err := e.Exec_Call(call, tx, 0)
assert.Nil(t, err)
......
......@@ -127,7 +127,7 @@ func (i *mergedIterator) next() bool {
return false
}
if i.dir == dirSOI {
i.prevKey = key
i.prevKey = cloneByte(key)
}
i.dir = dirForward
return true
......
......@@ -118,6 +118,48 @@ func TestMergeIterDup3(t *testing.T) {
assert.Equal(t, "db1-key-3", string(list0[2]))
}
func TestMergeIter3(t *testing.T) {
db1 := newGoMemDB(t)
db2 := newGoMemDB(t)
db3 := newGoMemDB(t)
db3.Set([]byte("key-1"), []byte("db3-key-1"))
db3.Set([]byte("key-2"), []byte("db3-key-2"))
db3.Set([]byte("key-3"), []byte("db3-key-3"))
//合并以后:
db := NewMergedIteratorDB([]IteratorDB{db1, db2, db3})
it0 := NewListHelper(db)
list0 := it0.List([]byte("key-"), nil, 0, 0)
for k, v := range list0 {
println(k, string(v))
}
assert.Equal(t, 3, len(list0))
assert.Equal(t, "db3-key-3", string(list0[0]))
assert.Equal(t, "db3-key-2", string(list0[1]))
assert.Equal(t, "db3-key-1", string(list0[2]))
}
func TestMergeIter1(t *testing.T) {
db1 := newGoMemDB(t)
db2 := newGoMemDB(t)
db3 := newGoMemDB(t)
db1.Set([]byte("key-1"), []byte("db1-key-1"))
db1.Set([]byte("key-2"), []byte("db1-key-2"))
db1.Set([]byte("key-3"), []byte("db1-key-3"))
//合并以后:
db := NewMergedIteratorDB([]IteratorDB{db1, db2, db3})
it0 := NewListHelper(db)
list0 := it0.List(nil, nil, 100, 0)
for k, v := range list0 {
println(k, string(v))
}
assert.Equal(t, 3, len(list0))
assert.Equal(t, "db1-key-3", string(list0[0]))
assert.Equal(t, "db1-key-2", string(list0[1]))
assert.Equal(t, "db1-key-1", string(list0[2]))
}
func TestMergeIterSearch(t *testing.T) {
db1 := newGoMemDB(t)
db2 := newGoMemDB(t)
......
......@@ -11,6 +11,8 @@ import (
"github.com/33cn/chain33/common"
"github.com/33cn/chain33/types"
_ "github.com/33cn/chain33/system/dapp/coins/types" //load system plugin
)
// DecodeLog decode log
......
......@@ -5,8 +5,10 @@
package types
import (
"encoding/json"
"testing"
"github.com/33cn/chain33/common"
"github.com/33cn/chain33/types"
"github.com/stretchr/testify/assert"
)
......@@ -54,3 +56,16 @@ func TestDecodeTx(t *testing.T) {
assert.NotNil(t, data)
assert.Nil(t, err)
}
func TestDecodeTx2(t *testing.T) {
bdata, err := common.FromHex("0a05636f696e73121018010a0c108084af5f1a05310a320a3320e8b31b30b9b69483d7f9d3f04c3a22314b67453376617969715a4b6866684d66744e3776743267447639486f4d6b393431")
assert.Nil(t, err)
var r types.Transaction
err = types.Decode(bdata, &r)
assert.Nil(t, err)
data, err := DecodeTx(&r)
assert.Nil(t, err)
jsondata, err := json.Marshal(data)
assert.Nil(t, err)
assert.Equal(t, string(jsondata), `{"execer":"coins","payload":{"transfer":{"cointoken":"","amount":"200000000","note":"1\n2\n3","to":""},"ty":1},"rawPayload":"0x18010a0c108084af5f1a05310a320a33","signature":{"ty":0,"pubkey":"","signature":""},"fee":449000,"feefmt":"0.0045","expire":0,"nonce":5539796760414985017,"from":"1HT7xU2Ngenf7D4yocz2SAcnNLW7rK8d4E","to":"1KgE3vayiqZKhfhMftN7vt2gDv9HoMk941","hash":"0x6f9d543a345f6e17d8c3cc5f846c22570acf3b4b5851f48d0c2be5459d90c410"}`)
}
......@@ -535,15 +535,20 @@ func (m *Marshaler) marshalValue(out *errWriter, prop *proto.Properties, v refle
out.write("null")
return out.err
}
out.write(`"`)
data := v.Interface().([]byte)
//开启这个选项后,会把utf8的字符串转化成string,而不会弄成hex
if m.EnableUTF8BytesToString && utf8.Valid(data) {
out.write(string(data))
s := string(data)
b, err := json.Marshal(s)
if err != nil {
return err
}
out.write(string(b))
} else {
out.write(`"`)
out.write(common.ToHex(data))
}
out.write(`"`)
}
return out.err
}
......
......@@ -402,3 +402,24 @@ func TestIterateCallBack_PrefixWithExecAddr(t *testing.T) {
assert.Equal(t, int64(3), reply.Num)
assert.Equal(t, len(key), len(reply.NextKey))
}
func TestJsonpbUTF8Tx(t *testing.T) {
bdata, err := common.FromHex("0a05636f696e73121018010a0c108084af5f1a05310a320a3320e8b31b30b9b69483d7f9d3f04c3a22314b67453376617969715a4b6866684d66744e3776743267447639486f4d6b393431")
assert.Nil(t, err)
var r Transaction
err = Decode(bdata, &r)
assert.Nil(t, err)
plType := LoadExecutorType("coins")
var pl Message
if plType != nil {
pl, err = plType.DecodePayload(&r)
if err != nil {
pl = nil
}
}
var pljson json.RawMessage
assert.NotNil(t, pl)
pljson, err = PBToJSONUTF8(pl)
assert.Nil(t, err)
assert.Equal(t, string(pljson), `{"transfer":{"cointoken":"","amount":"200000000","note":"1\n2\n3","to":""},"ty":1}`)
}
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