Commit b1df3f4a authored by duanjinfei's avatar duanjinfei

add case

parent c7e1fe00
...@@ -448,7 +448,7 @@ func GetTranFunc(caseType int, startIndex int, txCount int, nonceMap *sync.Map, ...@@ -448,7 +448,7 @@ func GetTranFunc(caseType int, startIndex int, txCount int, nonceMap *sync.Map,
// 部分相关-单层-写变量-合约发送者相关 // 部分相关-单层-写变量-合约发送者相关
case 20: case 20:
{ {
return PrSpWRTranCase(arr, contractArr[0], nonceMap, txArr, client) return PrSpWRTranCase(arr, contractArr[1], nonceMap, txArr, client)
} }
// 部分相关-多层-写变量-合约接受者相关 // 部分相关-多层-写变量-合约接受者相关
case 21: case 21:
...@@ -501,6 +501,11 @@ func GetTranFunc(caseType int, startIndex int, txCount int, nonceMap *sync.Map, ...@@ -501,6 +501,11 @@ func GetTranFunc(caseType int, startIndex int, txCount int, nonceMap *sync.Map,
{ {
return PrReErc721TranFromCase(startIndex, txCount, arr, contractArr[5], nonceMap, txArr, client) return PrReErc721TranFromCase(startIndex, txCount, arr, contractArr[5], nonceMap, txArr, client)
} }
case 31:
{
return PrReContractOneCoinTranCase1(txCount, arr, contractArr, nonceMap, txArr, client)
}
default: default:
{ {
return nil, nil return nil, nil
......
...@@ -61,17 +61,21 @@ func PrReCoinTranCase(txCount int, testAccArr *tool.AccArrFormat, accountNonceMa ...@@ -61,17 +61,21 @@ func PrReCoinTranCase(txCount int, testAccArr *tool.AccArrFormat, accountNonceMa
fromAddr := testAccArr.FromAddr[i] fromAddr := testAccArr.FromAddr[i]
sendAfterBal := util.GetAccBal(client, fromAddr) sendAfterBal := util.GetAccBal(client, fromAddr)
if sendAfterBal == nil { if sendAfterBal == nil {
log.Error("普通转账-接受者相关", "sendAfterBal is nil")
res = false res = false
} }
if sendBeforeBal[fromAddr].Sub(sendBeforeBal[fromAddr], sendAfterBal).Cmp(amount) != 1 { if sendBeforeBal[fromAddr].Sub(sendBeforeBal[fromAddr], sendAfterBal).Cmp(amount) != 1 {
log.Error("普通转账-接受者相关", "from balance error")
res = false res = false
} }
} }
reToAfterBal := util.GetAccBal(client, toAddr) reToAfterBal := util.GetAccBal(client, toAddr)
if reToAfterBal == nil { if reToAfterBal == nil {
log.Error("普通转账-接受者相关", "reToAfterBal is nil")
res = false res = false
} }
if reToAfterBal.Sub(reToAfterBal, beforeToBal).Cmp(amount.Mul(amount, big.NewInt(int64(txCount)))) != 0 { if reToAfterBal.Sub(reToAfterBal, beforeToBal).Cmp(amount.Mul(amount, big.NewInt(int64(txCount)))) != 0 {
log.Error("普通转账-接受者相关", "to balance error")
res = false res = false
} }
return res return res
...@@ -121,17 +125,21 @@ func PrSpCoinTranCase(txCount int, testAccArr *tool.AccArrFormat, accountNonceMa ...@@ -121,17 +125,21 @@ func PrSpCoinTranCase(txCount int, testAccArr *tool.AccArrFormat, accountNonceMa
toAddr := testAccArr.ToAddr[i] toAddr := testAccArr.ToAddr[i]
reAfterBal := util.GetAccBal(client, toAddr) reAfterBal := util.GetAccBal(client, toAddr)
if reAfterBal == nil { if reAfterBal == nil {
log.Error("普通转账-发送者相关", "reAfterBal is nil")
res = false res = false
} }
if reAfterBal.Sub(reAfterBal, reBeforeBal[toAddr]).Cmp(amount) != 0 { if reAfterBal.Sub(reAfterBal, reBeforeBal[toAddr]).Cmp(amount) != 0 {
log.Error("普通转账-发送者相关", "to balance error", toAddr.Hex())
res = false res = false
} }
} }
sendAfterBal := util.GetAccBal(client, fromAddr) sendAfterBal := util.GetAccBal(client, fromAddr)
if sendAfterBal == nil { if sendAfterBal == nil {
log.Error("普通转账-发送者相关", "sendAfterBal is nil")
res = false res = false
} }
if beforeFromBal.Sub(beforeFromBal, sendAfterBal).Cmp(amount.Mul(amount, big.NewInt(int64(txCount)))) != 1 { if beforeFromBal.Sub(beforeFromBal, sendAfterBal).Cmp(amount.Mul(amount, big.NewInt(int64(txCount)))) != 1 {
log.Error("普通转账-发送者相关", "from balance error")
res = false res = false
} }
return res return res
...@@ -190,25 +198,31 @@ func PrSpReCoinTranCase(txCount int, testAccArr *tool.AccArrFormat, accountNonce ...@@ -190,25 +198,31 @@ func PrSpReCoinTranCase(txCount int, testAccArr *tool.AccArrFormat, accountNonce
// A账户余额校验 // A账户余额校验
sendFromAfterBal := util.GetAccBal(client, fromAddr) sendFromAfterBal := util.GetAccBal(client, fromAddr)
if sendFromAfterBal == nil { if sendFromAfterBal == nil {
log.Error("普通转账-发送者和接受者部分相关", "sendFromAfterBal is nil")
res = false res = false
} }
if beforeFromBal.Sub(beforeFromBal, sendFromAfterBal).Cmp(amount) != 1 { if beforeFromBal.Sub(beforeFromBal, sendFromAfterBal).Cmp(amount) != 1 {
log.Error("普通转账-发送者和接受者部分相关", "from balance error")
res = false res = false
} }
// B账户余额校验 // B账户余额校验
reToAfterBal := util.GetAccBal(client, toAddr) reToAfterBal := util.GetAccBal(client, toAddr)
if reToAfterBal == nil { if reToAfterBal == nil {
log.Error("普通转账-发送者和接受者部分相关", "reToAfterBal is nil")
res = false res = false
} }
if beforeToBal.Sub(beforeToBal, reToAfterBal).Cmp(big.NewInt(0)) != 1 { if beforeToBal.Sub(beforeToBal, reToAfterBal).Cmp(big.NewInt(0)) != 1 {
log.Error("普通转账-发送者和接受者部分相关", "beforeToBal balance error")
res = false res = false
} }
// C账户余额校验 // C账户余额校验
reTo1AfterBal := util.GetAccBal(client, toAddr1) reTo1AfterBal := util.GetAccBal(client, toAddr1)
if reTo1AfterBal == nil { if reTo1AfterBal == nil {
log.Error("普通转账-发送者和接受者部分相关", "reToAfterBal is nil")
res = false res = false
} }
if reTo1AfterBal.Sub(reTo1AfterBal, beforeTo1Bal).Cmp(amount) != 0 { if reTo1AfterBal.Sub(reTo1AfterBal, beforeTo1Bal).Cmp(amount) != 0 {
log.Error("普通转账-发送者和接受者部分相关", "reTo1AfterBal balance error")
res = false res = false
} }
return res return res
...@@ -262,17 +276,21 @@ func AllPrSpReCoinTranCase(txCount int, testAccArr *tool.AccArrFormat, accountNo ...@@ -262,17 +276,21 @@ func AllPrSpReCoinTranCase(txCount int, testAccArr *tool.AccArrFormat, accountNo
// A账户余额校验 // A账户余额校验
sendFromAfterBal := util.GetAccBal(client, fromAddr) sendFromAfterBal := util.GetAccBal(client, fromAddr)
if sendFromAfterBal == nil { if sendFromAfterBal == nil {
log.Error("普通转账-发送者和接受者全部相关", "reToAfterBal is nil")
res = false res = false
} }
if beforeFromBal.Sub(beforeFromBal, sendFromAfterBal).Cmp(big.NewInt(0)) != 1 { if beforeFromBal.Sub(beforeFromBal, sendFromAfterBal).Cmp(big.NewInt(0)) != 1 {
log.Error("普通转账-发送者和接受者全部相关", "beforeFromBal balance error")
res = false res = false
} }
// B账户余额校验 // B账户余额校验
reToAfterBal := util.GetAccBal(client, toAddr) reToAfterBal := util.GetAccBal(client, toAddr)
if reToAfterBal == nil { if reToAfterBal == nil {
log.Error("普通转账-发送者和接受者全部相关", "reToAfterBal is nil")
res = false res = false
} }
if beforeToBal.Sub(beforeToBal, reToAfterBal).Cmp(big.NewInt(0)) != 1 { if beforeToBal.Sub(beforeToBal, reToAfterBal).Cmp(big.NewInt(0)) != 1 {
log.Error("普通转账-发送者和接受者全部相关", "beforeToBal balance error")
res = false res = false
} }
return res return res
...@@ -1504,3 +1522,69 @@ func PrReContractOneCoinTranTwiceCase(txCount int, testAccArr *tool.AccArrFormat ...@@ -1504,3 +1522,69 @@ func PrReContractOneCoinTranTwiceCase(txCount int, testAccArr *tool.AccArrFormat
} }
return resTxArr, verify return resTxArr, verify
} }
// PrReContractOneCoinTranCase1 A->b->a->C,A->c->a->C
func PrReContractOneCoinTranCase1(txCount int, testAccArr *tool.AccArrFormat, contractMap []map[string]common.Address, accountNonceMap *sync.Map, resTxArr []*types.Transaction, client *ethclient.Client) ([]*types.Transaction, func() bool) {
amount := big.NewInt(100000000000000000)
toAddr := testAccArr.ToAddr[0]
reBeforeToBal := util.GetAccBal(client, toAddr)
if reBeforeToBal == nil {
return nil, nil
}
sendBeforeContractBalMap := make(map[common.Address]*big.Int, 0)
coinTranAddr := contractMap[0][constant.COIN_TRANSFER]
sendBeforeBal := util.GetAccBal(client, coinTranAddr)
if sendBeforeBal == nil {
return nil, nil
}
sendBeforeContractBalMap[coinTranAddr] = sendBeforeBal
for i := 0; i < txCount; i++ {
contractCoinOneTrade := &coin.ContractCoinOneTrade{
ChainContractAdr: coinTranAddr,
Amount: amount,
}
oneChainCoinTransfer, err := contractCoin.NewOneChainCoinTransfer(contractMap[i][constant.ONE_COIN_TRANSFER], client)
if err != nil {
log.Error("NewOneChainCoinTransfer error:", err.Error())
return nil, nil
}
contractCoinOneTrade.ToAddr = []common.Address{toAddr}
auth, err := bind.NewKeyedTransactorWithChainID(testAccArr.FromPrv[i], tool.Cfg.ChainId)
if err != nil {
log.Errorf("DeployTokenTransfer func newKeyedTransactorWithChainID err:", err)
}
value, _ := accountNonceMap.Load(testAccArr.FromAddr[i])
auth.Nonce = big.NewInt(value.(int64))
auth.NoSend = true
auth.GasLimit = 500000
auth.GasPrice = big.NewInt(10000000000)
tx, err := contractCoinOneTrade.OneTransferSignTx(auth, oneChainCoinTransfer)
if err != nil {
log.Error("OneTransferSignTx error:", err.Error())
return nil, nil
}
resTxArr = append(resTxArr, tx)
}
verify := func() bool {
res := true
coinAddr := coinTranAddr
sendBeforeBal := sendBeforeContractBalMap[coinAddr]
sendAfterBal := util.GetAccBal(client, coinAddr)
if sendAfterBal == nil {
log.Error("")
res = false
}
if sendBeforeBal.Sub(sendBeforeBal, sendAfterBal).Cmp(big.NewInt(1).Mul(amount, big.NewInt(int64(txCount)))) != 0 {
res = false
}
reAfterToBal := util.GetAccBal(client, toAddr)
if reAfterToBal == nil {
res = false
}
if reAfterToBal.Sub(reAfterToBal, reBeforeToBal).Cmp(big.NewInt(1).Mul(amount, big.NewInt(int64(txCount)))) != 0 {
res = false
}
return res
}
return resTxArr, verify
}
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