State.cpp 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599
  1. /*
  2. This file is part of cpp-ethereum.
  3. cpp-ethereum is free software: you can redistribute it and/or modify
  4. it under the terms of the GNU General Public License as published by
  5. the Free Software Foundation, either version 3 of the License, or
  6. (at your option) any later version.
  7. cpp-ethereum is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU General Public License for more details.
  11. You should have received a copy of the GNU General Public License
  12. along with cpp-ethereum. If not, see <http://www.gnu.org/licenses/>.
  13. */
  14. /** @file state.cpp
  15. * @author Christoph Jentzsch <cj@ethdev.com>
  16. * @date 2014
  17. * State test functions.
  18. */
  19. #include <boost/filesystem/operations.hpp>
  20. #include <boost/test/unit_test.hpp>
  21. #include <json_spirit/JsonSpiritHeaders.h>
  22. #include <libdevcore/CommonIO.h>
  23. #include <libethereum/BlockChain.h>
  24. #include <libethereum/State.h>
  25. #include <libethereum/ExtVM.h>
  26. #include <libethereum/Defaults.h>
  27. #include <libevm/VM.h>
  28. #include <test/TestHelper.h>
  29. using namespace std;
  30. using namespace json_spirit;
  31. using namespace dev;
  32. using namespace dev::eth;
  33. namespace dev { namespace test {
  34. void doStateTests(json_spirit::mValue& _v, bool _fillin)
  35. {
  36. if (string(boost::unit_test::framework::current_test_case().p_name) != "stRandom")
  37. TestOutputHelper::initTest(_v);
  38. for (auto& i: _v.get_obj())
  39. {
  40. string testname = i.first;
  41. json_spirit::mObject& o = i.second.get_obj();
  42. if (!TestOutputHelper::passTest(o, testname))
  43. continue;
  44. BOOST_REQUIRE_MESSAGE(o.count("env") > 0, testname + "env not set!");
  45. BOOST_REQUIRE_MESSAGE(o.count("pre") > 0, testname + "pre not set!");
  46. BOOST_REQUIRE_MESSAGE(o.count("transaction") > 0, testname + "transaction not set!");
  47. ImportTest importer(o, _fillin, testType::StateTests);
  48. const State importedStatePost = importer.m_statePost;
  49. bytes output;
  50. Listener::ExecTimeGuard guard{i.first};
  51. output = importer.executeTest();
  52. if (_fillin)
  53. {
  54. #if ETH_FATDB
  55. if (importer.exportTest(output))
  56. cerr << testname << endl;
  57. #else
  58. BOOST_THROW_EXCEPTION(Exception() << errinfo_comment(testname + "You can not fill tests when FATDB is switched off"));
  59. #endif
  60. }
  61. else
  62. {
  63. BOOST_REQUIRE(o.count("post") > 0);
  64. BOOST_REQUIRE(o.count("out") > 0);
  65. // check output
  66. checkOutput(output, o);
  67. // check logs
  68. checkLog(importer.m_logs, importer.m_logsExpected);
  69. // check addresses
  70. #if ETH_FATDB
  71. ImportTest::compareStates(importedStatePost, importer.m_statePost);
  72. #endif
  73. BOOST_CHECK_MESSAGE(importer.m_statePost.rootHash() == h256(o["postStateRoot"].get_str()), testname + "wrong post state root");
  74. }
  75. }
  76. }
  77. } }// Namespace Close
  78. BOOST_AUTO_TEST_SUITE(StateTestsEIP158)
  79. BOOST_AUTO_TEST_CASE(stZeroCallsRevertTestEIP158)
  80. {
  81. dev::test::executeTests("stZeroCallsRevertTest", "/StateTests/EIP158", "/StateTestsFiller/EIP158", dev::test::doStateTests);
  82. }
  83. BOOST_AUTO_TEST_CASE(stCodeSizeLimitEIP158)
  84. {
  85. dev::test::executeTests("stCodeSizeLimit", "/StateTests/EIP158", "/StateTestsFiller/EIP158", dev::test::doStateTests);
  86. }
  87. BOOST_AUTO_TEST_CASE(stCreateTestEIP158)
  88. {
  89. dev::test::executeTests("stCreateTest", "/StateTests/EIP158", "/StateTestsFiller/EIP158", dev::test::doStateTests);
  90. }
  91. BOOST_AUTO_TEST_CASE(stEIP158SpecificTest)
  92. {
  93. dev::test::executeTests("stEIP158SpecificTest", "/StateTests/EIP158", "/StateTestsFiller/EIP158", dev::test::doStateTests);
  94. }
  95. BOOST_AUTO_TEST_CASE(stNonZeroCallsTest)
  96. {
  97. dev::test::executeTests("stNonZeroCallsTest", "/StateTests/EIP158", "/StateTestsFiller/EIP158", dev::test::doStateTests);
  98. }
  99. BOOST_AUTO_TEST_CASE(stZeroCallsTest)
  100. {
  101. dev::test::executeTests("stZeroCallsTest", "/StateTests/EIP158", "/StateTestsFiller/EIP158", dev::test::doStateTests);
  102. }
  103. BOOST_AUTO_TEST_CASE(stChangedTestsEIP150)
  104. {
  105. dev::test::executeTests("stChangedTests", "/StateTests/EIP158/EIP150", "/StateTestsFiller/EIP158/EIP150", dev::test::doStateTests);
  106. }
  107. BOOST_AUTO_TEST_CASE(stEIPsingleCodeGasPricesEIP150)
  108. {
  109. dev::test::executeTests("stEIPsingleCodeGasPrices", "/StateTests/EIP158/EIP150", "/StateTestsFiller/EIP158/EIP150", dev::test::doStateTests);
  110. }
  111. BOOST_AUTO_TEST_CASE(stEIPSpecificTestEIP150)
  112. {
  113. dev::test::executeTests("stEIPSpecificTest", "/StateTests/EIP158/EIP150", "/StateTestsFiller/EIP158/EIP150", dev::test::doStateTests);
  114. }
  115. BOOST_AUTO_TEST_CASE(stMemExpandingEIPCallsEIP150)
  116. {
  117. dev::test::executeTests("stMemExpandingEIPCalls", "/StateTests/EIP158/EIP150", "/StateTestsFiller/EIP158/EIP150", dev::test::doStateTests);
  118. }
  119. BOOST_AUTO_TEST_CASE(stBoundsTestEIP)
  120. {
  121. dev::test::executeTests("stBoundsTest", "/StateTests/EIP158/Homestead", "/StateTestsFiller/EIP158/Homestead", dev::test::doStateTests);
  122. }
  123. BOOST_AUTO_TEST_CASE(stHomeSteadSpecificEIP)
  124. {
  125. dev::test::executeTests("stHomeSteadSpecific", "/StateTests/EIP158/Homestead", "/StateTestsFiller/EIP158/Homestead", dev::test::doStateTests);
  126. }
  127. BOOST_AUTO_TEST_CASE(stCallDelegateCodesCallCodeEIP)
  128. {
  129. dev::test::executeTests("stCallDelegateCodesCallCode", "/StateTests/EIP158/Homestead", "/StateTestsFiller/EIP158/Homestead", dev::test::doStateTests);
  130. }
  131. BOOST_AUTO_TEST_CASE(stCallDelegateCodesEIP)
  132. {
  133. dev::test::executeTests("stCallDelegateCodes", "/StateTests/EIP158/Homestead", "/StateTestsFiller/EIP158/Homestead", dev::test::doStateTests);
  134. }
  135. BOOST_AUTO_TEST_CASE(stDelegatecallTestEIP)
  136. {
  137. dev::test::executeTests("stDelegatecallTest", "/StateTests/EIP158/Homestead", "/StateTestsFiller/EIP158/Homestead", dev::test::doStateTests);
  138. }
  139. BOOST_AUTO_TEST_CASE(stCallCodesEIP)
  140. {
  141. dev::test::executeTests("stCallCodes", "/StateTests/EIP158/Homestead", "/StateTestsFiller/EIP158/Homestead", dev::test::doStateTests);
  142. }
  143. BOOST_AUTO_TEST_CASE(stSystemOperationsTestEIP)
  144. {
  145. dev::test::executeTests("stSystemOperationsTest", "/StateTests/EIP158/Homestead", "/StateTestsFiller/EIP158/Homestead", dev::test::doStateTests);
  146. }
  147. BOOST_AUTO_TEST_CASE(stCallCreateCallCodeTestEIP)
  148. {
  149. dev::test::executeTests("stCallCreateCallCodeTest", "/StateTests/EIP158/Homestead", "/StateTestsFiller/EIP158/Homestead", dev::test::doStateTests);
  150. }
  151. BOOST_AUTO_TEST_CASE(stPreCompiledContractsEIP)
  152. {
  153. dev::test::executeTests("stPreCompiledContracts", "/StateTests/EIP158/Homestead", "/StateTestsFiller/EIP158/Homestead", dev::test::doStateTests);
  154. }
  155. BOOST_AUTO_TEST_CASE(stLogTestsEIP)
  156. {
  157. dev::test::executeTests("stLogTests", "/StateTests/EIP158/Homestead", "/StateTestsFiller/EIP158/Homestead", dev::test::doStateTests);
  158. }
  159. BOOST_AUTO_TEST_CASE(stRecursiveCreateEIP)
  160. {
  161. dev::test::executeTests("stRecursiveCreate", "/StateTests/EIP158/Homestead", "/StateTestsFiller/EIP158/Homestead", dev::test::doStateTests);
  162. }
  163. BOOST_AUTO_TEST_CASE(stInitCodeTestEIP)
  164. {
  165. dev::test::executeTests("stInitCodeTest", "/StateTests/EIP158/Homestead", "/StateTestsFiller/EIP158/Homestead", dev::test::doStateTests);
  166. }
  167. BOOST_AUTO_TEST_CASE(stTransactionTestEIP)
  168. {
  169. dev::test::executeTests("stTransactionTest", "/StateTests/EIP158/Homestead", "/StateTestsFiller/EIP158/Homestead", dev::test::doStateTests);
  170. }
  171. BOOST_AUTO_TEST_CASE(stSpecialTestEIP)
  172. {
  173. dev::test::executeTests("stSpecialTest", "/StateTests/EIP158/Homestead", "/StateTestsFiller/EIP158/Homestead", dev::test::doStateTests);
  174. }
  175. BOOST_AUTO_TEST_CASE(stRefundTestEIP)
  176. {
  177. dev::test::executeTests("stRefundTest", "/StateTests/EIP158/Homestead", "/StateTestsFiller/EIP158/Homestead", dev::test::doStateTests);
  178. }
  179. BOOST_AUTO_TEST_CASE(stQuadraticComplexityTestEIP)
  180. {
  181. if (test::Options::get().quadratic)
  182. dev::test::executeTests("stQuadraticComplexityTest", "/StateTests/EIP158/Homestead", "/StateTestsFiller/EIP158/Homestead", dev::test::doStateTests);
  183. }
  184. BOOST_AUTO_TEST_CASE(stMemoryStressTestEIP)
  185. {
  186. if (test::Options::get().memory)
  187. dev::test::executeTests("stMemoryStressTest", "/StateTests/EIP158/Homestead", "/StateTestsFiller/EIP158/Homestead", dev::test::doStateTests);
  188. }
  189. BOOST_AUTO_TEST_CASE(stMemoryTestEIP)
  190. {
  191. dev::test::executeTests("stMemoryTest", "/StateTests/EIP158/Homestead", "/StateTestsFiller/EIP158/Homestead", dev::test::doStateTests);
  192. }
  193. BOOST_AUTO_TEST_CASE(stWalletTestEIP)
  194. {
  195. dev::test::executeTests("stWalletTest", "/StateTests/EIP158/Homestead", "/StateTestsFiller/EIP158/Homestead", dev::test::doStateTests);
  196. }
  197. BOOST_AUTO_TEST_SUITE_END()
  198. BOOST_AUTO_TEST_SUITE(StateTestsEIP)
  199. BOOST_AUTO_TEST_CASE(stChangedOnEIPTest)
  200. {
  201. dev::test::executeTests("stChangedTests", "/StateTests/EIP150", "/StateTestsFiller/EIP150", dev::test::doStateTests);
  202. }
  203. BOOST_AUTO_TEST_CASE(stEIPSpecificTest)
  204. {
  205. dev::test::executeTests("stEIPSpecificTest", "/StateTests/EIP150", "/StateTestsFiller/EIP150", dev::test::doStateTests);
  206. }
  207. BOOST_AUTO_TEST_CASE(stEIPsingleCodeGasPrices)
  208. {
  209. dev::test::executeTests("stEIPsingleCodeGasPrices", "/StateTests/EIP150", "/StateTestsFiller/EIP150", dev::test::doStateTests);
  210. }
  211. BOOST_AUTO_TEST_CASE(stMemExpandingEIPCalls)
  212. {
  213. dev::test::executeTests("stMemExpandingEIPCalls", "/StateTests/EIP150", "/StateTestsFiller/EIP150", dev::test::doStateTests);
  214. }
  215. BOOST_AUTO_TEST_CASE(stBoundsTestEIP)
  216. {
  217. dev::test::executeTests("stBoundsTest", "/StateTests/EIP150/Homestead", "/StateTestsFiller/EIP150/Homestead", dev::test::doStateTests);
  218. }
  219. BOOST_AUTO_TEST_CASE(stHomeSteadSpecificEIP)
  220. {
  221. dev::test::executeTests("stHomeSteadSpecific", "/StateTests/EIP150/Homestead", "/StateTestsFiller/EIP150/Homestead", dev::test::doStateTests);
  222. }
  223. BOOST_AUTO_TEST_CASE(stCallDelegateCodesCallCodeEIP)
  224. {
  225. dev::test::executeTests("stCallDelegateCodesCallCode", "/StateTests/EIP150/Homestead", "/StateTestsFiller/EIP150/Homestead", dev::test::doStateTests);
  226. }
  227. BOOST_AUTO_TEST_CASE(stCallDelegateCodesEIP)
  228. {
  229. dev::test::executeTests("stCallDelegateCodes", "/StateTests/EIP150/Homestead", "/StateTestsFiller/EIP150/Homestead", dev::test::doStateTests);
  230. }
  231. BOOST_AUTO_TEST_CASE(stDelegatecallTestEIP)
  232. {
  233. dev::test::executeTests("stDelegatecallTest", "/StateTests/EIP150/Homestead", "/StateTestsFiller/EIP150/Homestead", dev::test::doStateTests);
  234. }
  235. BOOST_AUTO_TEST_CASE(stCallCodesEIP)
  236. {
  237. dev::test::executeTests("stCallCodes", "/StateTests/EIP150/Homestead", "/StateTestsFiller/EIP150/Homestead", dev::test::doStateTests);
  238. }
  239. BOOST_AUTO_TEST_CASE(stSystemOperationsTestEIP)
  240. {
  241. dev::test::executeTests("stSystemOperationsTest", "/StateTests/EIP150/Homestead", "/StateTestsFiller/EIP150/Homestead", dev::test::doStateTests);
  242. }
  243. BOOST_AUTO_TEST_CASE(stCallCreateCallCodeTestEIP)
  244. {
  245. dev::test::executeTests("stCallCreateCallCodeTest", "/StateTests/EIP150/Homestead", "/StateTestsFiller/EIP150/Homestead", dev::test::doStateTests);
  246. }
  247. BOOST_AUTO_TEST_CASE(stPreCompiledContractsEIP)
  248. {
  249. dev::test::executeTests("stPreCompiledContracts", "/StateTests/EIP150/Homestead", "/StateTestsFiller/EIP150/Homestead", dev::test::doStateTests);
  250. }
  251. BOOST_AUTO_TEST_CASE(stLogTestsEIP)
  252. {
  253. dev::test::executeTests("stLogTests", "/StateTests/EIP150/Homestead", "/StateTestsFiller/EIP150/Homestead", dev::test::doStateTests);
  254. }
  255. BOOST_AUTO_TEST_CASE(stRecursiveCreateEIP)
  256. {
  257. dev::test::executeTests("stRecursiveCreate", "/StateTests/EIP150/Homestead", "/StateTestsFiller/EIP150/Homestead", dev::test::doStateTests);
  258. }
  259. BOOST_AUTO_TEST_CASE(stInitCodeTestEIP)
  260. {
  261. dev::test::executeTests("stInitCodeTest", "/StateTests/EIP150/Homestead", "/StateTestsFiller/EIP150/Homestead", dev::test::doStateTests);
  262. }
  263. BOOST_AUTO_TEST_CASE(stTransactionTestEIP)
  264. {
  265. dev::test::executeTests("stTransactionTest", "/StateTests/EIP150/Homestead", "/StateTestsFiller/EIP150/Homestead", dev::test::doStateTests);
  266. }
  267. BOOST_AUTO_TEST_CASE(stSpecialTestEIP)
  268. {
  269. dev::test::executeTests("stSpecialTest", "/StateTests/EIP150/Homestead", "/StateTestsFiller/EIP150/Homestead", dev::test::doStateTests);
  270. }
  271. BOOST_AUTO_TEST_CASE(stRefundTestEIP)
  272. {
  273. dev::test::executeTests("stRefundTest", "/StateTests/EIP150/Homestead", "/StateTestsFiller/EIP150/Homestead", dev::test::doStateTests);
  274. }
  275. BOOST_AUTO_TEST_CASE(stQuadraticComplexityTestEIP)
  276. {
  277. if (test::Options::get().quadratic)
  278. dev::test::executeTests("stQuadraticComplexityTest", "/StateTests/EIP150/Homestead", "/StateTestsFiller/EIP150/Homestead", dev::test::doStateTests);
  279. }
  280. BOOST_AUTO_TEST_CASE(stMemoryStressTestEIP)
  281. {
  282. if (test::Options::get().memory)
  283. dev::test::executeTests("stMemoryStressTest", "/StateTests/EIP150/Homestead", "/StateTestsFiller/EIP150/Homestead", dev::test::doStateTests);
  284. }
  285. BOOST_AUTO_TEST_CASE(stMemoryTestEIP)
  286. {
  287. dev::test::executeTests("stMemoryTest", "/StateTests/EIP150/Homestead", "/StateTestsFiller/EIP150/Homestead", dev::test::doStateTests);
  288. }
  289. BOOST_AUTO_TEST_CASE(stWalletTestEIP)
  290. {
  291. dev::test::executeTests("stWalletTest", "/StateTests/EIP150/Homestead", "/StateTestsFiller/EIP150/Homestead", dev::test::doStateTests);
  292. }
  293. BOOST_AUTO_TEST_SUITE_END()
  294. BOOST_AUTO_TEST_SUITE(StateTestsHomestead)
  295. BOOST_AUTO_TEST_CASE(stZeroCallsRevertTest)
  296. {
  297. dev::test::executeTests("stZeroCallsRevertTest", "/StateTests/Homestead", "/StateTestsFiller/Homestead", dev::test::doStateTests);
  298. }
  299. BOOST_AUTO_TEST_CASE(stBoundsTestHomestead)
  300. {
  301. dev::test::executeTests("stBoundsTest", "/StateTests/Homestead", "/StateTestsFiller/Homestead", dev::test::doStateTests);
  302. }
  303. BOOST_AUTO_TEST_CASE(stHomeSteadSpecific)
  304. {
  305. dev::test::executeTests("stHomeSteadSpecific", "/StateTests/Homestead", "/StateTestsFiller/Homestead", dev::test::doStateTests);
  306. }
  307. BOOST_AUTO_TEST_CASE(stCallDelegateCodesCallCodeHomestead)
  308. {
  309. dev::test::executeTests("stCallDelegateCodesCallCode", "/StateTests/Homestead", "/StateTestsFiller/Homestead", dev::test::doStateTests);
  310. }
  311. BOOST_AUTO_TEST_CASE(stCallDelegateCodesHomestead)
  312. {
  313. dev::test::executeTests("stCallDelegateCodes", "/StateTests/Homestead", "/StateTestsFiller/Homestead", dev::test::doStateTests);
  314. }
  315. BOOST_AUTO_TEST_CASE(stDelegatecallTestHomestead)
  316. {
  317. dev::test::executeTests("stDelegatecallTest", "/StateTests/Homestead", "/StateTestsFiller/Homestead", dev::test::doStateTests);
  318. }
  319. BOOST_AUTO_TEST_CASE(stCallCodesHomestead)
  320. {
  321. dev::test::executeTests("stCallCodes", "/StateTests/Homestead", "/StateTestsFiller/Homestead", dev::test::doStateTests);
  322. }
  323. BOOST_AUTO_TEST_CASE(stSystemOperationsTestHomestead)
  324. {
  325. dev::test::executeTests("stSystemOperationsTest", "/StateTests/Homestead", "/StateTestsFiller/Homestead", dev::test::doStateTests);
  326. }
  327. BOOST_AUTO_TEST_CASE(stCallCreateCallCodeTestHomestead)
  328. {
  329. dev::test::executeTests("stCallCreateCallCodeTest", "/StateTests/Homestead", "/StateTestsFiller/Homestead", dev::test::doStateTests);
  330. }
  331. BOOST_AUTO_TEST_CASE(stPreCompiledContractsHomestead)
  332. {
  333. dev::test::executeTests("stPreCompiledContracts", "/StateTests/Homestead", "/StateTestsFiller/Homestead", dev::test::doStateTests);
  334. }
  335. BOOST_AUTO_TEST_CASE(stLogTestsHomestead)
  336. {
  337. dev::test::executeTests("stLogTests", "/StateTests/Homestead", "/StateTestsFiller/Homestead", dev::test::doStateTests);
  338. }
  339. BOOST_AUTO_TEST_CASE(stRecursiveCreateHomestead)
  340. {
  341. dev::test::executeTests("stRecursiveCreate", "/StateTests/Homestead", "/StateTestsFiller/Homestead", dev::test::doStateTests);
  342. }
  343. BOOST_AUTO_TEST_CASE(stInitCodeTestHomestead)
  344. {
  345. dev::test::executeTests("stInitCodeTest", "/StateTests/Homestead", "/StateTestsFiller/Homestead", dev::test::doStateTests);
  346. }
  347. BOOST_AUTO_TEST_CASE(stTransactionTestHomestead)
  348. {
  349. dev::test::executeTests("stTransactionTest", "/StateTests/Homestead", "/StateTestsFiller/Homestead", dev::test::doStateTests);
  350. }
  351. BOOST_AUTO_TEST_CASE(stSpecialTestHomestead)
  352. {
  353. dev::test::executeTests("stSpecialTest", "/StateTests/Homestead", "/StateTestsFiller/Homestead", dev::test::doStateTests);
  354. }
  355. BOOST_AUTO_TEST_CASE(stRefundTestHomestead)
  356. {
  357. dev::test::executeTests("stRefundTest", "/StateTests/Homestead", "/StateTestsFiller/Homestead", dev::test::doStateTests);
  358. }
  359. BOOST_AUTO_TEST_CASE(stQuadraticComplexityTestHomestead)
  360. {
  361. if (test::Options::get().quadratic)
  362. dev::test::executeTests("stQuadraticComplexityTest", "/StateTests/Homestead", "/StateTestsFiller/Homestead", dev::test::doStateTests);
  363. }
  364. BOOST_AUTO_TEST_CASE(stMemoryStressTestHomestead)
  365. {
  366. if (test::Options::get().memory)
  367. dev::test::executeTests("stMemoryStressTest", "/StateTests/Homestead", "/StateTestsFiller/Homestead", dev::test::doStateTests);
  368. }
  369. BOOST_AUTO_TEST_CASE(stMemoryTestHomestead)
  370. {
  371. dev::test::executeTests("stMemoryTest", "/StateTests/Homestead", "/StateTestsFiller/Homestead", dev::test::doStateTests);
  372. }
  373. BOOST_AUTO_TEST_CASE(stWalletTestHomestead)
  374. {
  375. dev::test::executeTests("stWalletTest", "/StateTests/Homestead", "/StateTestsFiller/Homestead", dev::test::doStateTests);
  376. }
  377. BOOST_AUTO_TEST_SUITE_END()
  378. BOOST_AUTO_TEST_SUITE(StateTests)
  379. BOOST_AUTO_TEST_CASE(stCallCodes)
  380. {
  381. dev::test::executeTests("stCallCodes", "/StateTests", "/StateTestsFiller", dev::test::doStateTests);
  382. }
  383. BOOST_AUTO_TEST_CASE(stExample)
  384. {
  385. dev::test::executeTests("stExample", "/StateTests", "/StateTestsFiller", dev::test::doStateTests);
  386. }
  387. BOOST_AUTO_TEST_CASE(stSystemOperationsTest)
  388. {
  389. dev::test::executeTests("stSystemOperationsTest", "/StateTests", "/StateTestsFiller", dev::test::doStateTests);
  390. }
  391. BOOST_AUTO_TEST_CASE(stCallCreateCallCodeTest)
  392. {
  393. dev::test::executeTests("stCallCreateCallCodeTest", "/StateTests", "/StateTestsFiller", dev::test::doStateTests);
  394. }
  395. BOOST_AUTO_TEST_CASE(stPreCompiledContracts)
  396. {
  397. dev::test::executeTests("stPreCompiledContracts", "/StateTests", "/StateTestsFiller", dev::test::doStateTests);
  398. }
  399. BOOST_AUTO_TEST_CASE(stLogTests)
  400. {
  401. dev::test::executeTests("stLogTests", "/StateTests", "/StateTestsFiller", dev::test::doStateTests);
  402. }
  403. BOOST_AUTO_TEST_CASE(stRecursiveCreate)
  404. {
  405. dev::test::executeTests("stRecursiveCreate", "/StateTests", "/StateTestsFiller", dev::test::doStateTests);
  406. }
  407. BOOST_AUTO_TEST_CASE(stInitCodeTest)
  408. {
  409. dev::test::executeTests("stInitCodeTest", "/StateTests", "/StateTestsFiller", dev::test::doStateTests);
  410. }
  411. BOOST_AUTO_TEST_CASE(stTransactionTest)
  412. {
  413. dev::test::executeTests("stTransactionTest", "/StateTests", "/StateTestsFiller", dev::test::doStateTests);
  414. }
  415. BOOST_AUTO_TEST_CASE(stSpecialTest)
  416. {
  417. dev::test::executeTests("stSpecialTest", "/StateTests", "/StateTestsFiller", dev::test::doStateTests);
  418. }
  419. BOOST_AUTO_TEST_CASE(stRefundTest)
  420. {
  421. dev::test::executeTests("stRefundTest", "/StateTests", "/StateTestsFiller", dev::test::doStateTests);
  422. }
  423. BOOST_AUTO_TEST_CASE(stBlockHashTest)
  424. {
  425. dev::test::executeTests("stBlockHashTest", "/StateTests", "/StateTestsFiller", dev::test::doStateTests);
  426. }
  427. BOOST_AUTO_TEST_CASE(stQuadraticComplexityTest)
  428. {
  429. if (test::Options::get().quadratic)
  430. dev::test::executeTests("stQuadraticComplexityTest", "/StateTests", "/StateTestsFiller", dev::test::doStateTests);
  431. }
  432. BOOST_AUTO_TEST_CASE(stMemoryStressTest)
  433. {
  434. if (test::Options::get().memory)
  435. dev::test::executeTests("stMemoryStressTest", "/StateTests", "/StateTestsFiller", dev::test::doStateTests);
  436. }
  437. BOOST_AUTO_TEST_CASE(stSolidityTest)
  438. {
  439. dev::test::executeTests("stSolidityTest", "/StateTests", "/StateTestsFiller", dev::test::doStateTests);
  440. }
  441. BOOST_AUTO_TEST_CASE(stMemoryTest)
  442. {
  443. dev::test::executeTests("stMemoryTest", "/StateTests", "/StateTestsFiller", dev::test::doStateTests);
  444. }
  445. BOOST_AUTO_TEST_CASE(stWalletTest)
  446. {
  447. dev::test::executeTests("stWalletTest", "/StateTests", "/StateTestsFiller", dev::test::doStateTests);
  448. }
  449. BOOST_AUTO_TEST_CASE(stTransitionTest)
  450. {
  451. dev::test::executeTests("stTransitionTest", "/StateTests", "/StateTestsFiller", dev::test::doStateTests);
  452. }
  453. //todo: Force stRandom to be tested on Homestead Seal Engine ?
  454. BOOST_AUTO_TEST_CASE(stRandom)
  455. {
  456. test::Options::get(); // parse command line options, e.g. to enable JIT
  457. string testPath = dev::test::getTestPath() + "/StateTests/RandomTests";
  458. string fillersPath = dev::test::getTestPath() + "/src/StateTestsFiller/RandomTests";
  459. if (dev::test::Options::get().fillTests)
  460. {
  461. test::TestOutputHelper::initTest();
  462. vector<boost::filesystem::path> testFiles;
  463. boost::filesystem::directory_iterator iterator(fillersPath);
  464. for(; iterator != boost::filesystem::directory_iterator(); ++iterator)
  465. if (boost::filesystem::is_regular_file(iterator->path()) && iterator->path().extension() == ".json")
  466. {
  467. if (test::Options::get().singleTest)
  468. {
  469. string fileboost = iterator->path().filename().string();
  470. string filesingletest = test::Options::get().singleTestName; //parse singletest as a filename of random test
  471. if (fileboost == filesingletest || fileboost.substr(0, fileboost.length()-5) == filesingletest)
  472. testFiles.push_back(iterator->path());
  473. }
  474. else
  475. testFiles.push_back(iterator->path());
  476. }
  477. test::TestOutputHelper::setMaxTests(testFiles.size() * 2);
  478. for (auto& path: testFiles)
  479. {
  480. std::string filename = path.filename().string();
  481. test::TestOutputHelper::setCurrentTestFileName(filename);
  482. filename = filename.substr(0, filename.length() - 5); //without .json
  483. dev::test::executeTests(filename, "/StateTests/RandomTests", "/StateTestsFiller/RandomTests", dev::test::doStateTests, false);
  484. }
  485. return; //executeTests has already run test after filling
  486. }
  487. vector<boost::filesystem::path> testFiles;
  488. boost::filesystem::directory_iterator iterator(testPath);
  489. for(; iterator != boost::filesystem::directory_iterator(); ++iterator)
  490. if (boost::filesystem::is_regular_file(iterator->path()) && iterator->path().extension() == ".json")
  491. {
  492. if (test::Options::get().singleTest)
  493. {
  494. string fileboost = iterator->path().filename().string();
  495. string filesingletest = test::Options::get().singleTestName; //parse singletest as a filename of random test
  496. if (fileboost == filesingletest || fileboost.substr(0, fileboost.length()-5) == filesingletest)
  497. testFiles.push_back(iterator->path());
  498. }
  499. else
  500. testFiles.push_back(iterator->path());
  501. }
  502. test::TestOutputHelper::initTest();
  503. test::TestOutputHelper::setMaxTests(testFiles.size());
  504. for (auto& path: testFiles)
  505. {
  506. try
  507. {
  508. cnote << "Testing ..." << path.filename();
  509. test::TestOutputHelper::setCurrentTestFileName(path.filename().string());
  510. json_spirit::mValue v;
  511. string s = asString(dev::contents(path.string()));
  512. BOOST_REQUIRE_MESSAGE(s.length() > 0, "Content of " + path.string() + " is empty. Have you cloned the 'tests' repo branch develop and set ETHEREUM_TEST_PATH to its path?");
  513. json_spirit::read_string(s, v);
  514. test::Listener::notifySuiteStarted(path.filename().string());
  515. dev::test::doStateTests(v, false);
  516. }
  517. catch (Exception const& _e)
  518. {
  519. BOOST_ERROR(path.filename().string() + "Failed test with Exception: " << diagnostic_information(_e));
  520. }
  521. catch (std::exception const& _e)
  522. {
  523. BOOST_ERROR(path.filename().string() + "Failed test with Exception: " << _e.what());
  524. }
  525. }
  526. }
  527. BOOST_AUTO_TEST_CASE(userDefinedFileState)
  528. {
  529. dev::test::userDefinedTest(dev::test::doStateTests);
  530. }
  531. BOOST_AUTO_TEST_SUITE_END()