Add testcases for contract mining to the jail RPC tests.
This commit is contained in:
parent
6c2a8ef1f9
commit
397bf83924
|
@ -16,6 +16,7 @@ import (
|
||||||
"github.com/status-im/status-go/signal"
|
"github.com/status-im/status-go/signal"
|
||||||
e2e "github.com/status-im/status-go/t/e2e"
|
e2e "github.com/status-im/status-go/t/e2e"
|
||||||
. "github.com/status-im/status-go/t/utils"
|
. "github.com/status-im/status-go/t/utils"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/stretchr/testify/suite"
|
"github.com/stretchr/testify/suite"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -107,16 +108,34 @@ func (s *JailRPCTestSuite) TestRegressionGetTransactionReceipt() {
|
||||||
expected := `{"jsonrpc":"2.0","id":7,"result":null}`
|
expected := `{"jsonrpc":"2.0","id":7,"result":null}`
|
||||||
s.Equal(expected, got)
|
s.Equal(expected, got)
|
||||||
}
|
}
|
||||||
|
func (s *JailRPCTestSuite) TestContractDeploymentLES() {
|
||||||
|
s.testContractDeployment(false)
|
||||||
|
}
|
||||||
|
func (s *JailRPCTestSuite) TestContractDeploymentRPC() {
|
||||||
|
s.testContractDeployment(true)
|
||||||
|
}
|
||||||
|
|
||||||
func (s *JailRPCTestSuite) TestContractDeployment() {
|
func (s *JailRPCTestSuite) testContractDeployment(upstream bool) {
|
||||||
CheckTestSkipForNetworks(s.T(), params.MainNetworkID)
|
CheckTestSkipForNetworks(s.T(), params.MainNetworkID)
|
||||||
|
if upstream && GetNetworkID() == params.StatusChainNetworkID {
|
||||||
|
// only testing RPC on rinkeby
|
||||||
|
s.T().Skip()
|
||||||
|
}
|
||||||
|
|
||||||
s.StartTestBackend()
|
testContractMining := true
|
||||||
|
if GetNetworkID() == params.StatusChainNetworkID {
|
||||||
|
// we don't do mining on our chain
|
||||||
|
testContractMining = false
|
||||||
|
}
|
||||||
|
|
||||||
|
s.StartTestBackend(setUpstreamOption(s.T(), upstream))
|
||||||
defer s.StopTestBackend()
|
defer s.StopTestBackend()
|
||||||
|
|
||||||
s.NoError(s.Backend.SelectAccount(TestConfig.Account1.Address, TestConfig.Account1.Password))
|
s.NoError(s.Backend.SelectAccount(TestConfig.Account1.Address, TestConfig.Account1.Password))
|
||||||
|
|
||||||
|
if !upstream {
|
||||||
EnsureNodeSync(s.Backend.StatusNode().EnsureSync)
|
EnsureNodeSync(s.Backend.StatusNode().EnsureSync)
|
||||||
|
}
|
||||||
|
|
||||||
// obtain VM for a given chat (to send custom JS to jailed version of Send())
|
// obtain VM for a given chat (to send custom JS to jailed version of Send())
|
||||||
s.jail.CreateAndInitCell(testChatID)
|
s.jail.CreateAndInitCell(testChatID)
|
||||||
|
@ -140,7 +159,7 @@ func (s *JailRPCTestSuite) TestContractDeployment() {
|
||||||
result := s.Backend.ApproveSignRequest(txID, TestConfig.Account1.Password)
|
result := s.Backend.ApproveSignRequest(txID, TestConfig.Account1.Password)
|
||||||
txHash.SetBytes(result.Response.Bytes())
|
txHash.SetBytes(result.Response.Bytes())
|
||||||
if s.NoError(result.Error, event["id"]) {
|
if s.NoError(result.Error, event["id"]) {
|
||||||
s.T().Logf("contract transaction complete, URL: %s", "https://ropsten.etherscan.io/tx/"+txHash.Hex())
|
s.T().Logf("contract transaction complete, URL: %s", "https://rinkeby.etherscan.io/tx/"+txHash.Hex())
|
||||||
}
|
}
|
||||||
|
|
||||||
close(completeQueuedTransaction)
|
close(completeQueuedTransaction)
|
||||||
|
@ -150,6 +169,8 @@ func (s *JailRPCTestSuite) TestContractDeployment() {
|
||||||
_, err = cell.Run(`
|
_, err = cell.Run(`
|
||||||
var responseValue = null;
|
var responseValue = null;
|
||||||
var errorValue = null;
|
var errorValue = null;
|
||||||
|
var wasMined = false;
|
||||||
|
var wasSent = false;
|
||||||
var testContract = web3.eth.contract([{"constant":true,"inputs":[{"name":"a","type":"int256"}],"name":"double","outputs":[{"name":"","type":"int256"}],"payable":false,"type":"function"}]);
|
var testContract = web3.eth.contract([{"constant":true,"inputs":[{"name":"a","type":"int256"}],"name":"double","outputs":[{"name":"","type":"int256"}],"payable":false,"type":"function"}]);
|
||||||
var test = testContract.new(
|
var test = testContract.new(
|
||||||
{
|
{
|
||||||
|
@ -165,6 +186,10 @@ func (s *JailRPCTestSuite) TestContractDeployment() {
|
||||||
// Once the contract has the transactionHash property set and once its deployed on an address.
|
// Once the contract has the transactionHash property set and once its deployed on an address.
|
||||||
if (!contract.address) {
|
if (!contract.address) {
|
||||||
responseValue = contract.transactionHash;
|
responseValue = contract.transactionHash;
|
||||||
|
wasSent = true;
|
||||||
|
}
|
||||||
|
if (contract.address) {
|
||||||
|
wasMined = true;
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
`)
|
`)
|
||||||
|
@ -176,8 +201,7 @@ func (s *JailRPCTestSuite) TestContractDeployment() {
|
||||||
s.FailNow("test timed out")
|
s.FailNow("test timed out")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wait until callback is fired and `responseValue` is set. Hacky but simple.
|
s.waitForBoolValue(cell, "wasSent", true, 30*time.Second, "timeout while waiting for the contract tx to be sent")
|
||||||
time.Sleep(5 * time.Second)
|
|
||||||
|
|
||||||
errorValue, err := cell.Get("errorValue")
|
errorValue, err := cell.Get("errorValue")
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
|
@ -191,6 +215,30 @@ func (s *JailRPCTestSuite) TestContractDeployment() {
|
||||||
|
|
||||||
expectedResponse := txHash.Hex()
|
expectedResponse := txHash.Hex()
|
||||||
s.Equal(expectedResponse, response)
|
s.Equal(expectedResponse, response)
|
||||||
|
|
||||||
|
if testContractMining {
|
||||||
|
s.waitForBoolValue(cell, "wasMined", true, 3*time.Minute, "timeout while waiting for the contract to be mined")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *JailRPCTestSuite) waitForBoolValue(cell jail.JSCell, name string, expected bool, timeout time.Duration, msg string) {
|
||||||
|
deadline := time.Now().Add(timeout)
|
||||||
|
|
||||||
|
s.T().Logf("waiting for the variable '%s' to be '%v' with timeout of '%v'", name, expected, timeout)
|
||||||
|
|
||||||
|
for time.Now().Before(deadline) {
|
||||||
|
boolValue, err := cell.Get(name)
|
||||||
|
s.NoError(err)
|
||||||
|
actualValue, err := boolValue.Value().ToBoolean()
|
||||||
|
s.NoError(err)
|
||||||
|
if actualValue == expected {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
time.Sleep(100 * time.Millisecond)
|
||||||
|
}
|
||||||
|
|
||||||
|
s.Fail(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *JailRPCTestSuite) TestJailVMPersistence() {
|
func (s *JailRPCTestSuite) TestJailVMPersistence() {
|
||||||
|
@ -301,7 +349,7 @@ func (s *JailRPCTestSuite) TestJailVMPersistence() {
|
||||||
|
|
||||||
txHash.SetBytes(result.Response.Bytes())
|
txHash.SetBytes(result.Response.Bytes())
|
||||||
|
|
||||||
s.T().Logf("Transaction complete: https://ropsten.etherscan.io/tx/%s", txHash.Hex())
|
s.T().Logf("Transaction complete: https://rinkeby.etherscan.io/tx/%s", txHash.Hex())
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -349,3 +397,14 @@ func (s *JailRPCTestSuite) TestJailVMPersistence() {
|
||||||
s.T().Log(total)
|
s.T().Log(total)
|
||||||
s.InDelta(0.840003, total, 0.0000001)
|
s.InDelta(0.840003, total, 0.0000001)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func setUpstreamOption(t *testing.T, upstream bool) e2e.TestNodeOption {
|
||||||
|
return func(config *params.NodeConfig) {
|
||||||
|
if upstream {
|
||||||
|
networkURL, err := GetRemoteURL()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
config.UpstreamConfig.Enabled = true
|
||||||
|
config.UpstreamConfig.URL = networkURL
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue