Browse Source

Merge pull request #527 from imapp-pl/pr-changes

Check only if an exception occurred if an exception expected
cl-refactor
Gav Wood 10 years ago
parent
commit
c55f92e5b3
  1. 1
      test/TestHelper.cpp
  2. 77
      test/vm.cpp

1
test/TestHelper.cpp

@ -374,6 +374,7 @@ void executeTests(const string& _name, const string& _testPathAppendix, std::fun
{ {
BOOST_ERROR("Failed test with Exception: " << _e.what()); BOOST_ERROR("Failed test with Exception: " << _e.what());
} }
break;
} }
} }

77
test/vm.cpp

@ -300,6 +300,7 @@ void doVMTests(json_spirit::mValue& v, bool _fillin)
VM vm(fev.gas); VM vm(fev.gas);
u256 gas; u256 gas;
bool vmExceptionOccured = false;
try try
{ {
output = vm.go(fev, fev.simpleTrace()).toVector(); output = vm.go(fev, fev.simpleTrace()).toVector();
@ -308,7 +309,7 @@ void doVMTests(json_spirit::mValue& v, bool _fillin)
catch (VMException const& _e) catch (VMException const& _e)
{ {
cnote << "VM did throw an exception: " << diagnostic_information(_e); cnote << "VM did throw an exception: " << diagnostic_information(_e);
gas = 0; vmExceptionOccured = true;
} }
catch (Exception const& _e) catch (Exception const& _e)
{ {
@ -342,48 +343,58 @@ void doVMTests(json_spirit::mValue& v, bool _fillin)
{ {
o["env"] = mValue(fev.exportEnv()); o["env"] = mValue(fev.exportEnv());
o["exec"] = mValue(fev.exportExec()); o["exec"] = mValue(fev.exportExec());
o["post"] = mValue(fev.exportState()); if (!vmExceptionOccured)
o["callcreates"] = fev.exportCallCreates(); {
o["out"] = "0x" + toHex(output); o["post"] = mValue(fev.exportState());
fev.push(o, "gas", gas); o["callcreates"] = fev.exportCallCreates();
o["out"] = "0x" + toHex(output);
fev.push(o, "gas", gas);
}
} }
else else
{ {
BOOST_REQUIRE(o.count("post") > 0); if (o.count("post") > 0) // No exceptions expected
BOOST_REQUIRE(o.count("callcreates") > 0); {
BOOST_REQUIRE(o.count("out") > 0); BOOST_CHECK(!vmExceptionOccured);
BOOST_REQUIRE(o.count("gas") > 0);
dev::test::FakeExtVM test; BOOST_REQUIRE(o.count("post") > 0);
test.importState(o["post"].get_obj()); BOOST_REQUIRE(o.count("callcreates") > 0);
test.importCallCreates(o["callcreates"].get_array()); 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; BOOST_CHECK_EQUAL(toInt(o["gas"]), gas);
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); 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); checkAddresses<std::map<Address, std::tuple<u256, u256, std::map<u256, u256>, bytes> > >(test.addresses, fev.addresses);
BOOST_CHECK(test.callcreates == fev.callcreates); BOOST_CHECK(test.callcreates == fev.callcreates);
}
else // Exception expected
BOOST_CHECK(vmExceptionOccured);
} }
} }
} }

Loading…
Cancel
Save