Commit c2cd9285 authored by vipwzw's avatar vipwzw Committed by 33cn

fix test

parent 4be69878
......@@ -12,7 +12,6 @@ import (
"os"
"path/filepath"
"testing"
"time"
"github.com/33cn/chain33/account"
......@@ -110,7 +109,7 @@ func runCase(tt *testing.T, c VMCase, file string) {
// 1 构建预置环境 pre
inst := evm.NewEVMExecutor()
inst.SetEnv(c.env.currentNumber, c.env.currentTimestamp, uint64(c.env.currentDifficulty))
inst.SetEnv(c.env.currentNumber, c.env.currentTimestamp, uint64(c.env.currentDifficulty), nil, nil)
inst.CheckInit()
statedb := inst.GetMStateDB()
mdb := createStateDB(statedb, c)
......
......@@ -252,7 +252,7 @@ func createContract(mdb *db.GoMemDB, tx types.Transaction, maxCodeSize int) (ret
inst.CheckInit()
msg, _ := inst.GetMessage(&tx)
inst.SetEnv(10, 0, uint64(10))
inst.SetEnv(10, 0, uint64(10), nil, nil)
statedb = inst.GetMStateDB()
statedb.StateDB = mdb
......
......@@ -413,12 +413,16 @@ kvcreator.prototype.receipt = function() {
function GetExecName() {
var exec = execname()
if (exec.err) {
return ""
}
throwerr(exec.err)
return exec.value
}
function GetRandnum() {
var n = randnum()
throwerr(n.err)
return n.value
}
function ExecAddress(name) {
var addr = execaddress(name)
if (addr.err) {
......@@ -521,6 +525,7 @@ function Init(context) {
this.context = context
this.kvc.add("action", "init")
this.kvc.add("context", this.context)
this.kvc.add("randnum", GetRandnum())
return this.kvc.receipt()
}
......
......@@ -7,6 +7,7 @@ function Init(context) {
this.context = context
this.kvc.add("action", "init")
this.kvc.add("context", this.context)
this.kvc.add("randnum", GetRandnum())
return this.kvc.receipt()
}
......
......@@ -3,9 +3,11 @@ package executor
import (
"bytes"
"encoding/json"
"fmt"
"sync"
"sync/atomic"
"github.com/33cn/chain33/client/api"
"github.com/33cn/chain33/common"
drivers "github.com/33cn/chain33/system/dapp"
"github.com/33cn/chain33/types"
......@@ -114,6 +116,9 @@ func (u *js) callVM(prefix string, payload *jsproto.Call, tx *types.Transaction,
vm.Set("args", payload.Args)
callfunc := "callcode(context, f, args, loglist)"
jsvalue, err := vm.Run(callfunc)
if u.GetExecutorAPI().IsErr() {
return nil, api.ErrAPIEnv
}
if err != nil {
return nil, err
}
......@@ -229,6 +234,23 @@ func (u *js) execnameFunc(vm *otto.Otto, name string) {
})
}
func (u *js) randnumFunc(vm *otto.Otto, name string) {
vm.Set("randnum", func(call otto.FunctionCall) otto.Value {
hash := u.GetLastHash()
fmt.Println("-----randnum", common.ToHex(hash))
param := &types.ReqRandHash{
ExecName: "ticket",
BlockNum: 5,
Hash: hash,
}
randhash, err := u.GetExecutorAPI().GetRandNum(param)
if err != nil {
return errReturn(vm, err)
}
return okReturn(vm, common.ToHex(randhash))
})
}
func (u *js) listdbFunc(vm *otto.Otto, name string) {
//List(prefix, key []byte, count, direction int32) ([][]byte, error)
_, plocal := calcAllPrefix(name)
......@@ -281,6 +303,7 @@ func (u *js) createVM(name string, tx *types.Transaction, index int) (*otto.Otto
u.localdbFunc(vm, name)
u.listdbFunc(vm, name)
u.execnameFunc(vm, name)
u.randnumFunc(vm, name)
u.registerAccountFunc(vm)
u.registerTableFunc(vm, name)
return vm, nil
......
......@@ -9,6 +9,7 @@ import (
"testing"
"time"
"github.com/33cn/chain33/client/mocks"
"github.com/33cn/chain33/common/db"
"github.com/33cn/chain33/types"
"github.com/33cn/chain33/util"
......@@ -16,6 +17,7 @@ import (
"github.com/33cn/plugin/plugin/dapp/js/types/jsproto"
"github.com/robertkrimen/otto"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
)
func init() {
......@@ -24,7 +26,10 @@ func init() {
func initExec(ldb db.DB, kvdb db.KVDB, code string, t assert.TestingT) *js {
e := newjs().(*js)
e.SetEnv(1, time.Now().Unix(), 1)
e.SetEnv(1, time.Now().Unix(), 1, nil, nil)
mockapi := &mocks.QueueProtocolAPI{}
mockapi.On("Query", "ticket", "RandNumHash", mock.Anything).Return(&types.ReplyHash{Hash: []byte("hello")}, nil)
e.SetAPI(mockapi)
e.SetLocalDB(kvdb)
e.SetStateDB(kvdb)
c, tx := createCodeTx("test", code)
......
......@@ -25,7 +25,9 @@ func init() {
}
func TestJsVM(t *testing.T) {
mocker := testnode.New("--free--", nil)
cfg, sub := testnode.GetDefaultConfig()
cfg.Consensus.Name = "ticket"
mocker := testnode.NewWithConfig(cfg, sub, nil)
defer mocker.Close()
mocker.Listen()
//开始部署合约, 测试阶段任何人都可以部署合约
......
......@@ -410,12 +410,16 @@ kvcreator.prototype.receipt = function() {
function GetExecName() {
var exec = execname()
if (exec.err) {
return ""
}
throwerr(exec.err)
return exec.value
}
function GetRandnum() {
var n = randnum()
throwerr(n.err)
return n.value
}
function ExecAddress(name) {
var addr = execaddress(name)
if (addr.err) {
......
......@@ -4,6 +4,7 @@ function Init(context) {
this.context = context
this.kvc.add("action", "init")
this.kvc.add("context", this.context)
this.kvc.add("randnum", GetRandnum())
return this.kvc.receipt()
}
......
......@@ -54,7 +54,7 @@ func (suite *AssetTransferTestSuite) SetupTest() {
suite.exec = newParacross().(*Paracross)
suite.exec.SetLocalDB(suite.localDB)
suite.exec.SetStateDB(suite.stateDB)
suite.exec.SetEnv(0, 0, 0)
suite.exec.SetEnv(0, 0, 0, nil, nil)
suite.exec.SetAPI(suite.api)
enableParacrossTransfer = true
......
......@@ -49,7 +49,7 @@ func (suite *AssetWithdrawTestSuite) SetupTest() {
suite.exec = newParacross().(*Paracross)
suite.exec.SetLocalDB(suite.localDB)
suite.exec.SetStateDB(suite.stateDB)
suite.exec.SetEnv(0, 0, 0)
suite.exec.SetEnv(0, 0, 0, nil, nil)
suite.exec.SetAPI(suite.api)
enableParacrossTransfer = true
......
......@@ -102,7 +102,7 @@ func (suite *CommitTestSuite) SetupSuite() {
suite.exec = newParacross().(*Paracross)
suite.exec.SetLocalDB(suite.localDB)
suite.exec.SetStateDB(suite.stateDB)
suite.exec.SetEnv(0, 0, 0)
suite.exec.SetEnv(0, 0, 0, nil, nil)
suite.exec.SetAPI(suite.api)
enableParacrossTransfer = false
......
......@@ -72,7 +72,7 @@ func (s *suiteRelay) SetupSuite() {
relay := &relay{}
relay.SetStateDB(accDb)
relay.SetLocalDB(s.kvdb)
relay.SetEnv(10, 100, 1)
relay.SetEnv(10, 100, 1, nil, nil)
relay.SetIsFree(false)
relay.SetAPI(nil)
relay.SetChild(relay)
......@@ -139,7 +139,7 @@ func (s *suiteRelay) TestExec_1() {
tx.Payload = types.Encode(sell)
tx.Sign(types.SECP256K1, privFrom)
s.relay.SetEnv(10, 1000, 1)
s.relay.SetEnv(10, 1000, 1, nil, nil)
heightBytes := types.Encode(&types.Int64{Data: int64(10)})
s.kvdb.On("Get", mock.Anything).Return(heightBytes, nil).Once()
......@@ -180,7 +180,7 @@ func (s *suiteRelay) TestExec_2() {
tx.Payload = types.Encode(sell)
tx.Sign(types.SECP256K1, privTo)
s.relay.SetEnv(20, 2000, 1)
s.relay.SetEnv(20, 2000, 1, nil, nil)
heightBytes := types.Encode(&types.Int64{Data: int64(20)})
s.kvdb.On("Get", mock.Anything).Return(heightBytes, nil).Once()
receipt, err := s.relay.Exec(tx, 0)
......@@ -216,7 +216,7 @@ func (s *suiteRelay) TestExec_3() {
tx.Payload = types.Encode(sell)
tx.Sign(types.SECP256K1, privFrom)
s.relay.SetEnv(30, 3000, 1)
s.relay.SetEnv(30, 3000, 1, nil, nil)
heightBytes := types.Encode(&types.Int64{Data: int64(30)})
s.kvdb.On("Get", mock.Anything).Return(heightBytes, nil).Once()
receipt, err := s.relay.Exec(tx, 0)
......@@ -287,7 +287,7 @@ func (s *suiteRelay) TestExec_4() {
tx.Payload = types.Encode(sell)
tx.Sign(types.SECP256K1, privFrom)
s.relay.SetEnv(40, 4000, 1)
s.relay.SetEnv(40, 4000, 1, nil, nil)
_, err := s.relay.Exec(tx, 0)
s.Nil(err)
......@@ -404,7 +404,7 @@ func (s *suiteBtcHeader) SetupSuite() {
relay := &relay{}
relay.SetStateDB(s.db)
relay.SetLocalDB(s.kvdb)
relay.SetEnv(10, 100, 1)
relay.SetEnv(10, 100, 1, nil, nil)
relay.SetIsFree(false)
relay.SetAPI(nil)
relay.SetChild(relay)
......@@ -515,7 +515,7 @@ func (s *suiteBtcHeader) TestSaveBtcHead_1() {
tx.Payload = types.Encode(sell)
tx.Sign(types.SECP256K1, privFrom)
s.relay.SetEnv(10, 1000, 1)
s.relay.SetEnv(10, 1000, 1, nil, nil)
s.db.On("Get", mock.Anything).Return(nil, types.ErrNotFound).Once()
s.db.On("Set", mock.Anything, mock.Anything).Return(nil).Once()
......
......@@ -152,7 +152,7 @@ func (s *suiteRelayDB) SetupSuite() {
relay := &relay{}
relay.SetStateDB(accDb)
relay.SetLocalDB(s.kvdb)
relay.SetEnv(10, 100, 1)
relay.SetEnv(10, 100, 1, nil, nil)
relay.SetIsFree(false)
relay.SetAPI(nil)
relay.SetChild(relay)
......@@ -175,7 +175,7 @@ func (s *suiteRelayDB) TestRelayCreate_1() {
tx.Nonce = 1 //for different order id
tx.Sign(types.SECP256K1, privFrom)
s.relay.SetEnv(10, 1000, 1)
s.relay.SetEnv(10, 1000, 1, nil, nil)
s.relayDb = newRelayDB(s.relay, tx)
heightBytes := types.Encode(&types.Int64{Data: int64(10)})
s.kvdb.On("Get", mock.Anything).Return(heightBytes, nil).Once()
......@@ -207,7 +207,7 @@ func (s *suiteRelayDB) TestRevokeCreate_1aUnlock() {
tx.To = s.addrRelay
tx.Sign(types.SECP256K1, privFrom)
s.relay.SetEnv(11, 1000, 1)
s.relay.SetEnv(11, 1000, 1, nil, nil)
s.relayDb = newRelayDB(s.relay, tx)
heightBytes := types.Encode(&types.Int64{Data: int64(10)})
s.kvdb.On("Get", mock.Anything).Return(heightBytes, nil).Once()
......@@ -228,7 +228,7 @@ func (s *suiteRelayDB) TestRevokeCreate_1bCancel() {
tx.To = s.addrRelay
tx.Sign(types.SECP256K1, privFrom)
s.relay.SetEnv(11, 1000, 1)
s.relay.SetEnv(11, 1000, 1, nil, nil)
s.relayDb = newRelayDB(s.relay, tx)
heightBytes := types.Encode(&types.Int64{Data: int64(10)})
s.kvdb.On("Get", mock.Anything).Return(heightBytes, nil).Once()
......@@ -308,7 +308,7 @@ func (s *suiteAccept) setupRelayCreate() {
tx.Nonce = 2 //for different order id
tx.Sign(types.SECP256K1, privFrom)
s.relay.SetEnv(10, 1000, 1)
s.relay.SetEnv(10, 1000, 1, nil, nil)
s.relayDb = newRelayDB(s.relay, tx)
heightBytes := types.Encode(&types.Int64{Data: int64(10)})
s.kvdb.On("Get", mock.Anything).Return(heightBytes, nil).Once()
......@@ -335,7 +335,7 @@ func (s *suiteAccept) SetupSuite() {
relay := &relay{}
relay.SetStateDB(accDb)
relay.SetLocalDB(s.kvdb)
relay.SetEnv(10, 100, 1)
relay.SetEnv(10, 100, 1, nil, nil)
relay.SetIsFree(false)
relay.SetAPI(nil)
relay.SetChild(relay)
......@@ -356,7 +356,7 @@ func (s *suiteAccept) TestRelayAccept() {
tx.To = s.addrRelay
tx.Sign(types.SECP256K1, privTo)
s.relay.SetEnv(10, 1000, 1)
s.relay.SetEnv(10, 1000, 1, nil, nil)
s.relayDb = newRelayDB(s.relay, tx)
heightBytes := types.Encode(&types.Int64{Data: int64(20)})
s.kvdb.On("Get", mock.Anything).Return(heightBytes, nil).Once()
......@@ -387,7 +387,7 @@ func (s *suiteAccept) TestRevokeAccept_1() {
tx.To = s.addrRelay
tx.Sign(types.SECP256K1, privFrom)
s.relay.SetEnv(11, 1000, 1)
s.relay.SetEnv(11, 1000, 1, nil, nil)
s.relayDb = newRelayDB(s.relay, tx)
heightBytes := types.Encode(&types.Int64{Data: int64(22)})
s.kvdb.On("Get", mock.Anything).Return(heightBytes, nil).Once()
......@@ -408,7 +408,7 @@ func (s *suiteAccept) TestRevokeAccept_2() {
tx.To = s.addrRelay
tx.Sign(types.SECP256K1, privFrom)
s.relay.SetEnv(11, 1000, 1)
s.relay.SetEnv(11, 1000, 1, nil, nil)
s.relayDb = newRelayDB(s.relay, tx)
heightBytes := types.Encode(&types.Int64{Data: int64(20 + lockBtcHeight)})
s.kvdb.On("Get", mock.Anything).Return(heightBytes, nil).Once()
......@@ -429,7 +429,7 @@ func (s *suiteAccept) TestRevokeAccept_3() {
tx.To = s.addrRelay
tx.Sign(types.SECP256K1, privTo)
s.relay.SetEnv(11, 1000, 1)
s.relay.SetEnv(11, 1000, 1, nil, nil)
s.relayDb = newRelayDB(s.relay, tx)
heightBytes := types.Encode(&types.Int64{Data: int64(20 + lockBtcHeight)})
s.kvdb.On("Get", mock.Anything).Return(heightBytes, nil).Once()
......@@ -506,7 +506,7 @@ func (s *suiteConfirm) setupRelayCreate() {
tx.Nonce = 3 //for different order id
tx.Sign(types.SECP256K1, privFrom)
s.relay.SetEnv(10, 1000, 1)
s.relay.SetEnv(10, 1000, 1, nil, nil)
s.relayDb = newRelayDB(s.relay, tx)
heightBytes := types.Encode(&types.Int64{Data: int64(10)})
s.kvdb.On("Get", mock.Anything).Return(heightBytes, nil).Once()
......@@ -533,7 +533,7 @@ func (s *suiteConfirm) SetupSuite() {
relay := &relay{}
relay.SetStateDB(accDb)
relay.SetLocalDB(s.kvdb)
relay.SetEnv(10, 100, 1)
relay.SetEnv(10, 100, 1, nil, nil)
relay.SetIsFree(false)
relay.SetAPI(nil)
relay.SetChild(relay)
......@@ -555,7 +555,7 @@ func (s *suiteConfirm) setupAccept() {
tx.To = s.addrRelay
tx.Sign(types.SECP256K1, privTo)
s.relay.SetEnv(10, 1000, 1)
s.relay.SetEnv(10, 1000, 1, nil, nil)
s.relayDb = newRelayDB(s.relay, tx)
heightBytes := types.Encode(&types.Int64{Data: int64(20)})
s.kvdb.On("Get", mock.Anything).Return(heightBytes, nil).Once()
......@@ -586,7 +586,7 @@ func (s *suiteConfirm) TestConfirm_1() {
tx.To = s.addrRelay
tx.Sign(types.SECP256K1, privFrom)
s.relay.SetEnv(30, 3000, 1)
s.relay.SetEnv(30, 3000, 1, nil, nil)
s.relayDb = newRelayDB(s.relay, tx)
_, err := s.relayDb.confirmTx(order)
s.Equal(ty.ErrRelayReturnAddr, err)
......@@ -604,7 +604,7 @@ func (s *suiteConfirm) TestConfirm_2() {
tx.To = s.addrRelay
tx.Sign(types.SECP256K1, privTo)
s.relay.SetEnv(30, 3000, 1)
s.relay.SetEnv(30, 3000, 1, nil, nil)
s.relayDb = newRelayDB(s.relay, tx)
heightBytes := types.Encode(&types.Int64{Data: int64(30)})
s.kvdb.On("Get", mock.Anything).Return(heightBytes, nil).Once()
......@@ -635,7 +635,7 @@ func (s *suiteConfirm) TestRevokeConfirm_1() {
tx.To = s.addrRelay
tx.Sign(types.SECP256K1, privFrom)
s.relay.SetEnv(40, 4000, 1)
s.relay.SetEnv(40, 4000, 1, nil, nil)
s.relayDb = newRelayDB(s.relay, tx)
heightBytes := types.Encode(&types.Int64{Data: int64(30 + lockBtcHeight)})
s.kvdb.On("Get", mock.Anything).Return(heightBytes, nil).Once()
......@@ -656,7 +656,7 @@ func (s *suiteConfirm) TestRevokeConfirm_2() {
tx.To = s.addrRelay
tx.Sign(types.SECP256K1, privFrom)
s.relay.SetEnv(40, 4000, 1)
s.relay.SetEnv(40, 4000, 1, nil, nil)
s.relayDb = newRelayDB(s.relay, tx)
heightBytes := types.Encode(&types.Int64{Data: int64(30 + 4*lockBtcHeight)})
s.kvdb.On("Get", mock.Anything).Return(heightBytes, nil).Once()
......@@ -733,7 +733,7 @@ func (s *suiteVerify) setupRelayCreate() {
tx.Nonce = 4 //for different order id
tx.Sign(types.SECP256K1, privFrom)
s.relay.SetEnv(10, 1000, 1)
s.relay.SetEnv(10, 1000, 1, nil, nil)
s.relayDb = newRelayDB(s.relay, tx)
heightBytes := types.Encode(&types.Int64{Data: int64(10)})
s.kvdb.On("Get", mock.Anything).Return(heightBytes, nil).Once()
......@@ -764,7 +764,7 @@ func (s *suiteVerify) setupAccept() {
tx.To = s.addrRelay
tx.Sign(types.SECP256K1, privTo)
s.relay.SetEnv(20, 2000, 1)
s.relay.SetEnv(20, 2000, 1, nil, nil)
s.relayDb = newRelayDB(s.relay, tx)
heightBytes := types.Encode(&types.Int64{Data: int64(20)})
s.kvdb.On("Get", mock.Anything).Return(heightBytes, nil).Once()
......@@ -795,7 +795,7 @@ func (s *suiteVerify) setupConfirm() {
tx.To = s.addrRelay
tx.Sign(types.SECP256K1, privTo)
s.relay.SetEnv(30, 3000, 1)
s.relay.SetEnv(30, 3000, 1, nil, nil)
s.relayDb = newRelayDB(s.relay, tx)
heightBytes := types.Encode(&types.Int64{Data: int64(30)})
s.kvdb.On("Get", mock.Anything).Return(heightBytes, nil).Once()
......@@ -822,7 +822,7 @@ func (s *suiteVerify) SetupSuite() {
relay := &relay{}
relay.SetStateDB(accDb)
relay.SetLocalDB(s.kvdb)
relay.SetEnv(10, 100, 1)
relay.SetEnv(10, 100, 1, nil, nil)
relay.SetIsFree(false)
relay.SetAPI(nil)
relay.SetChild(relay)
......@@ -880,7 +880,7 @@ func (s *suiteVerify) TestVerify() {
tx.To = s.addrRelay
tx.Sign(types.SECP256K1, privTo)
s.relay.SetEnv(40, 4000, 1)
s.relay.SetEnv(40, 4000, 1, nil, nil)
s.relayDb = newRelayDB(s.relay, tx)
receipt, err := s.relayDb.verifyTx(order)
......@@ -964,7 +964,7 @@ func (s *suiteVerifyCli) setupRelayCreate() {
tx.Nonce = 5 //for different order id
tx.Sign(types.SECP256K1, privFrom)
s.relay.SetEnv(10, 1000, 1)
s.relay.SetEnv(10, 1000, 1, nil, nil)
s.relayDb = newRelayDB(s.relay, tx)
heightBytes := types.Encode(&types.Int64{Data: int64(10)})
s.kvdb.On("Get", mock.Anything).Return(heightBytes, nil).Once()
......@@ -995,7 +995,7 @@ func (s *suiteVerifyCli) setupAccept() {
tx.To = s.addrRelay
tx.Sign(types.SECP256K1, privTo)
s.relay.SetEnv(20, 2000, 1)
s.relay.SetEnv(20, 2000, 1, nil, nil)
s.relayDb = newRelayDB(s.relay, tx)
heightBytes := types.Encode(&types.Int64{Data: int64(20)})
s.kvdb.On("Get", mock.Anything).Return(heightBytes, nil).Once()
......@@ -1026,7 +1026,7 @@ func (s *suiteVerifyCli) setupConfirm() {
tx.To = s.addrRelay
tx.Sign(types.SECP256K1, privTo)
s.relay.SetEnv(30, 3000, 1)
s.relay.SetEnv(30, 3000, 1, nil, nil)
s.relayDb = newRelayDB(s.relay, tx)
heightBytes := types.Encode(&types.Int64{Data: int64(30)})
s.kvdb.On("Get", mock.Anything).Return(heightBytes, nil).Once()
......@@ -1053,7 +1053,7 @@ func (s *suiteVerifyCli) SetupSuite() {
relay := &relay{}
relay.SetStateDB(accDb)
relay.SetLocalDB(s.kvdb)
relay.SetEnv(10, 100, 1)
relay.SetEnv(10, 100, 1, nil, nil)
relay.SetIsFree(false)
relay.SetAPI(nil)
relay.SetChild(relay)
......@@ -1085,7 +1085,7 @@ func (s *suiteVerifyCli) TestVerify() {
tx.To = s.addrRelay
tx.Sign(types.SECP256K1, privTo)
s.relay.SetEnv(40, 4000, 1)
s.relay.SetEnv(40, 4000, 1, nil, nil)
s.relayDb = newRelayDB(s.relay, tx)
receipt, err := s.relayDb.verifyCmdTx(order)
......@@ -1128,7 +1128,7 @@ func (s *suiteSaveBtcHeader) SetupSuite() {
relay := &relay{}
relay.SetStateDB(s.db)
relay.SetLocalDB(s.kvdb)
relay.SetEnv(10, 100, 1)
relay.SetEnv(10, 100, 1, nil, nil)
relay.SetIsFree(false)
relay.SetAPI(nil)
relay.SetChild(relay)
......@@ -1138,7 +1138,7 @@ func (s *suiteSaveBtcHeader) SetupSuite() {
tx.To = "addr"
tx.Sign(types.SECP256K1, privFrom)
s.relay.SetEnv(40, 4000, 1)
s.relay.SetEnv(40, 4000, 1, nil, nil)
s.relayDb = newRelayDB(s.relay, tx)
}
......
......@@ -19,7 +19,7 @@ const (
// GetRandNum for ticket executor
func (ticket *Ticket) GetRandNum(blockHash []byte, blockNum int64) (types.Message, error) {
tlog.Debug("GetRandNum", "blockHash", blockHash, "blockNum", blockNum)
tlog.Debug("GetRandNum", "blockHash", common.ToHex(blockHash), "blockNum", blockNum)
if blockNum < minBlockNum {
blockNum = minBlockNum
......@@ -35,6 +35,11 @@ func (ticket *Ticket) GetRandNum(blockHash []byte, blockNum int64) (types.Messag
if err != nil {
return nil, err
}
//如果是genesis block 那么直接返回一个固定值,防止测试的时候出错
if txActions == nil && err == nil {
modify := common.Sha256([]byte("hello"))
return &types.ReplyHash{Hash: modify}, nil
}
var modifies []byte
var bits uint32
var ticketIds string
......@@ -59,7 +64,7 @@ func (ticket *Ticket) getTxActions(blockHash []byte, blockNum int64) ([]*tickett
var txActions []*tickettypes.TicketAction
var reqHashes types.ReqHashes
currHash := blockHash
tlog.Debug("getTxActions", "blockHash", blockHash, "blockNum", blockNum)
tlog.Debug("getTxActions", "blockHash", common.ToHex(blockHash), "blockNum", blockNum)
//根据blockHash,查询block,循环blockNum
for blockNum > 0 {
......@@ -69,22 +74,26 @@ func (ticket *Ticket) getTxActions(blockHash []byte, blockNum int64) ([]*tickett
if err != nil {
return txActions, err
}
if tempBlock.Head.Height <= 0 {
return nil, nil
}
reqHashes.Hashes = append(reqHashes.Hashes, currHash)
currHash = tempBlock.Head.ParentHash
if tempBlock.Head.Height < 0 && blockNum > 1 {
return txActions, types.ErrBlockNotFound
}
if tempBlock.Head.Height <= 1 {
break
}
blockNum--
}
blockDetails, err := ticket.GetAPI().GetBlockByHashes(&reqHashes)
if err != nil {
tlog.Error("getTxActions", "blockHash", blockHash, "blockNum", blockNum, "err", err)
return txActions, err
}
for _, block := range blockDetails.Items {
tlog.Debug("getTxActions", "blockHeight", block.Block.Height, "blockhash", block.Block.Hash())
tlog.Debug("getTxActions", "blockHeight", block.Block.Height, "blockhash", common.ToHex(block.Block.Hash()))
ticketAction, err := ticket.getMinerTx(block.Block)
if err != nil {
return txActions, err
......@@ -92,7 +101,6 @@ func (ticket *Ticket) getTxActions(blockHash []byte, blockNum int64) ([]*tickett
txActions = append(txActions, ticketAction)
}
return txActions, nil
}
func (ticket *Ticket) getMinerTx(current *types.Block) (*tickettypes.TicketAction, error) {
......
......@@ -90,7 +90,7 @@ func TestUnfreeze(t *testing.T) {
}
exec := newUnfreeze()
exec.SetStateDB(stateDB)
exec.SetEnv(env.blockHeight, env.blockTime, env.difficulty)
exec.SetEnv(env.blockHeight, env.blockTime, env.difficulty, nil, nil)
receipt, err := exec.Exec(createTx, int(1))
assert.Nil(t, err)
assert.NotNil(t, receipt)
......@@ -117,7 +117,7 @@ func TestUnfreeze(t *testing.T) {
t.Error("RPC_UnfreezeWithdrawTx sign", "err", err)
}
blockTime := int64(10)
exec.SetEnv(env.blockHeight+1, env.blockTime+blockTime, env.difficulty)
exec.SetEnv(env.blockHeight+1, env.blockTime+blockTime, env.difficulty, nil, nil)
receipt, err = exec.Exec(withdrawTx, 1)
assert.Nil(t, err)
assert.NotNil(t, receipt)
......@@ -151,7 +151,7 @@ func TestUnfreeze(t *testing.T) {
t.Error("RPC_UnfreezeWithdrawTx sign", "err", err)
}
blockTime := int64(10)
exec.SetEnv(env.blockHeight+1, env.blockTime+blockTime, env.difficulty)
exec.SetEnv(env.blockHeight+1, env.blockTime+blockTime, env.difficulty, nil, nil)
receipt, err = exec.Exec(withdrawTx, 1)
assert.Equal(t, pty.ErrNoPrivilege, err)
assert.Nil(t, receipt)
......@@ -214,7 +214,7 @@ func TestUnfreeze(t *testing.T) {
t.Error("RPC_UnfreezeWithdrawTx sign", "err", err)
}
blockTime := int64(10)
exec.SetEnv(env.blockHeight+1, env.blockTime+blockTime+blockTime, env.difficulty)
exec.SetEnv(env.blockHeight+1, env.blockTime+blockTime+blockTime, env.difficulty, nil, nil)
receipt, err = exec.Exec(withdrawTx, 1)
assert.Equal(t, pty.ErrUnfreezeEmptied, err)
assert.Nil(t, receipt)
......
......@@ -230,7 +230,7 @@ func (chain *BlockChain) getLastHeader(msg queue.Message) {
func (chain *BlockChain) addBlockDetail(msg queue.Message) {
blockDetail := msg.Data.(*types.BlockDetail)
Height := blockDetail.Block.Height
chainlog.Info("EventAddBlockDetail", "height", blockDetail.Block.Height, "hash", common.HashHex(blockDetail.Block.Hash()))
chainlog.Info("EventAddBlockDetail", "height", blockDetail.Block.Height, "parent", common.ToHex(blockDetail.Block.ParentHash))
//首先判断共识过来的block的parenthash是否是当前bestchain链的tip区块,如果不是就直接返回错误给共识模块
blockDetail, err := chain.ProcAddBlockMsg(true, blockDetail, "self")
if err != nil {
......
......@@ -87,6 +87,7 @@ func newParaChainAPI(api client.QueueProtocolAPI, grpcaddr string) ExecutorAPI {
if paraRemoteGrpcClient == "" {
paraRemoteGrpcClient = "127.0.0.1:8002"
}
println("------", paraRemoteGrpcClient)
conn, err := grpc.Dial(paraRemoteGrpcClient, grpc.WithInsecure())
if err != nil {
panic(err)
......
......@@ -217,8 +217,10 @@ func S(key string, value interface{}) {
mu.Lock()
defer mu.Unlock()
if strings.HasPrefix(key, "config.") {
if isLocal() {
if !isLocal() { //only local can modify for test
panic("prefix config. is readonly")
} else {
tlog.Error("modify " + key + " is only for test")
}
return
}
......@@ -559,6 +561,17 @@ func parseSubModule(cfg *subModule) (*ConfigSubModule, error) {
return &subcfg, nil
}
//ModifySubConfig json data modify
func ModifySubConfig(sub []byte, key string, value interface{}) ([]byte, error) {
var data map[string]interface{}
err := json.Unmarshal(sub, &data)
if err != nil {
return nil, err
}
data[key] = value
return json.Marshal(data)
}
func parseItem(data map[string]interface{}) map[string][]byte {
subconfig := make(map[string][]byte)
if len(data) == 0 {
......
......@@ -9,7 +9,6 @@ Title="local"
TestNet=true
FixTime=false
[log]
# 日志级别,支持debug(dbug)/info/warn/error(eror)/crit
loglevel = "debug"
......
......@@ -66,6 +66,7 @@ type Chain33Mock struct {
store queue.Module
rpc *rpc.RPC
cfg *types.Config
sub *types.ConfigSubModule
datadir string
lastsend []byte
}
......@@ -86,7 +87,7 @@ func newWithConfig(cfg *types.Config, sub *types.ConfigSubModule, mockapi client
q := queue.New("channel")
types.Debug = false
datadir := util.ResetDatadir(cfg, "$TEMP/")
mock := &Chain33Mock{cfg: cfg, q: q, datadir: datadir}
mock := &Chain33Mock{cfg: cfg, sub: sub, q: q, datadir: datadir}
mock.random = rand.New(rand.NewSource(types.Now().UnixNano()))
mock.exec = executor.New(cfg.Exec, sub.Exec)
......@@ -163,6 +164,14 @@ func (mock *Chain33Mock) Listen() {
l := len(mock.cfg.RPC.GrpcBindAddr)
mock.cfg.RPC.GrpcBindAddr = mock.cfg.RPC.GrpcBindAddr[0:l-2] + ":" + fmt.Sprint(portgrpc)
}
if mock.sub.Consensus["para"] != nil {
data, err := types.ModifySubConfig(mock.sub.Consensus["para"], "ParaRemoteGrpcClient", mock.cfg.RPC.GrpcBindAddr)
if err != nil {
panic(err)
}
mock.sub.Consensus["para"] = data
types.S("config.consensus.sub.para.ParaRemoteGrpcClient", mock.cfg.RPC.GrpcBindAddr)
}
}
//GetBlockChain :
......
......@@ -130,7 +130,11 @@ func JSONPrint(t *testing.T, input interface{}) {
t.Error(err)
return
}
t.Log(string(data))
if t == nil {
fmt.Println(string(data))
} else {
t.Log(string(data))
}
}
// CreateManageTx : Create Manage Tx
......
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