aboutsummaryrefslogtreecommitdiffstats
path: root/vm.cpp
diff options
context:
space:
mode:
authorPaweł Bylica <pawel.bylica@imapp.pl>2014-11-19 20:13:19 +0800
committerPaweł Bylica <pawel.bylica@imapp.pl>2014-11-19 20:13:19 +0800
commit7df5ec34c778414079b879a5bd1ce3ec83cffa85 (patch)
tree88338a67c0db41b26aaa0956ac7f7b252381f6e1 /vm.cpp
parent9544173e3b930dffe6b44e168c2b5664a5702a0c (diff)
downloaddexon-solidity-7df5ec34c778414079b879a5bd1ce3ec83cffa85.tar.gz
dexon-solidity-7df5ec34c778414079b879a5bd1ce3ec83cffa85.tar.zst
dexon-solidity-7df5ec34c778414079b879a5bd1ce3ec83cffa85.zip
In VM tests, check only if an exception occurred if an exception expected (no post state and output checking)
Diffstat (limited to 'vm.cpp')
-rw-r--r--vm.cpp77
1 files changed, 44 insertions, 33 deletions
diff --git a/vm.cpp b/vm.cpp
index cacbf94c..bdbe8155 100644
--- a/vm.cpp
+++ b/vm.cpp
@@ -300,6 +300,7 @@ void doVMTests(json_spirit::mValue& v, bool _fillin)
VM vm(fev.gas);
u256 gas;
+ bool vmExceptionOccured = false;
try
{
output = vm.go(fev, fev.simpleTrace()).toVector();
@@ -308,7 +309,7 @@ void doVMTests(json_spirit::mValue& v, bool _fillin)
catch (VMException const& _e)
{
cnote << "VM did throw an exception: " << diagnostic_information(_e);
- gas = 0;
+ vmExceptionOccured = true;
}
catch (Exception const& _e)
{
@@ -342,48 +343,58 @@ void doVMTests(json_spirit::mValue& v, bool _fillin)
{
o["env"] = mValue(fev.exportEnv());
o["exec"] = mValue(fev.exportExec());
- o["post"] = mValue(fev.exportState());
- o["callcreates"] = fev.exportCallCreates();
- o["out"] = "0x" + toHex(output);
- fev.push(o, "gas", gas);
+ if (!vmExceptionOccured)
+ {
+ o["post"] = mValue(fev.exportState());
+ o["callcreates"] = fev.exportCallCreates();
+ o["out"] = "0x" + toHex(output);
+ fev.push(o, "gas", gas);
+ }
}
else
{
- BOOST_REQUIRE(o.count("post") > 0);
- BOOST_REQUIRE(o.count("callcreates") > 0);
- BOOST_REQUIRE(o.count("out") > 0);
- BOOST_REQUIRE(o.count("gas") > 0);
+ if (o.count("post") > 0) // No exceptions expected
+ {
+ BOOST_CHECK(!vmExceptionOccured);
- dev::test::FakeExtVM test;
- test.importState(o["post"].get_obj());
- test.importCallCreates(o["callcreates"].get_array());
+ BOOST_REQUIRE(o.count("post") > 0);
+ BOOST_REQUIRE(o.count("callcreates") > 0);
+ BOOST_REQUIRE(o.count("out") > 0);
+ BOOST_REQUIRE(o.count("gas") > 0);
- checkOutput(output, o);
+ dev::test::FakeExtVM test;
+ test.importState(o["post"].get_obj());
+ test.importCallCreates(o["callcreates"].get_array());
- BOOST_CHECK_EQUAL(toInt(o["gas"]), gas);
+ checkOutput(output, o);
- auto& expectedAddrs = test.addresses;
- auto& resultAddrs = fev.addresses;
- for (auto&& expectedPair : expectedAddrs)
- {
- auto& expectedAddr = expectedPair.first;
- auto resultAddrIt = resultAddrs.find(expectedAddr);
- if (resultAddrIt == resultAddrs.end())
- BOOST_ERROR("Missing expected address " << expectedAddr);
- else
- {
- auto& expectedState = expectedPair.second;
- auto& resultState = resultAddrIt->second;
- BOOST_CHECK_MESSAGE(std::get<0>(expectedState) == std::get<0>(resultState), expectedAddr << ": incorrect balance " << std::get<0>(resultState) << ", expected " << std::get<0>(expectedState));
- BOOST_CHECK_MESSAGE(std::get<1>(expectedState) == std::get<1>(resultState), expectedAddr << ": incorrect txCount " << std::get<1>(resultState) << ", expected " << std::get<1>(expectedState));
- BOOST_CHECK_MESSAGE(std::get<3>(expectedState) == std::get<3>(resultState), expectedAddr << ": incorrect code");
+ BOOST_CHECK_EQUAL(toInt(o["gas"]), gas);
- checkStorage(std::get<2>(expectedState), std::get<2>(resultState), expectedAddr);
+ auto& expectedAddrs = test.addresses;
+ auto& resultAddrs = fev.addresses;
+ for (auto&& expectedPair : expectedAddrs)
+ {
+ auto& expectedAddr = expectedPair.first;
+ auto resultAddrIt = resultAddrs.find(expectedAddr);
+ if (resultAddrIt == resultAddrs.end())
+ BOOST_ERROR("Missing expected address " << expectedAddr);
+ else
+ {
+ auto& expectedState = expectedPair.second;
+ auto& resultState = resultAddrIt->second;
+ BOOST_CHECK_MESSAGE(std::get<0>(expectedState) == std::get<0>(resultState), expectedAddr << ": incorrect balance " << std::get<0>(resultState) << ", expected " << std::get<0>(expectedState));
+ BOOST_CHECK_MESSAGE(std::get<1>(expectedState) == std::get<1>(resultState), expectedAddr << ": incorrect txCount " << std::get<1>(resultState) << ", expected " << std::get<1>(expectedState));
+ BOOST_CHECK_MESSAGE(std::get<3>(expectedState) == std::get<3>(resultState), expectedAddr << ": incorrect code");
+
+ checkStorage(std::get<2>(expectedState), std::get<2>(resultState), expectedAddr);
+ }
}
- }
- checkAddresses<std::map<Address, std::tuple<u256, u256, std::map<u256, u256>, bytes> > >(test.addresses, fev.addresses);
- BOOST_CHECK(test.callcreates == fev.callcreates);
+ checkAddresses<std::map<Address, std::tuple<u256, u256, std::map<u256, u256>, bytes> > >(test.addresses, fev.addresses);
+ BOOST_CHECK(test.callcreates == fev.callcreates);
+ }
+ else // Exception expected
+ BOOST_CHECK(vmExceptionOccured);
}
}
}