Guest User

Untitled

a guest
Nov 19th, 2017
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.16 KB | None | 0 0
  1. package net.consensys.pier.impl.ethereum.vm;
  2.  
  3. import java.io.File;
  4. import java.util.ArrayList;
  5. import java.util.Collection;
  6. import java.util.Stack;
  7.  
  8. import com.fasterxml.jackson.databind.ObjectMapper;
  9. import org.junit.Test;
  10. import org.junit.runner.RunWith;
  11. import org.junit.runners.Parameterized;
  12. import org.junit.runners.Parameterized.Parameters;
  13.  
  14. import static org.junit.Assert.assertArrayEquals;
  15.  
  16. /**
  17. * The VM operation testing framework entry point.
  18. */
  19. @RunWith(Parameterized.class)
  20. public class OperationTest {
  21.  
  22. /**
  23. * The JSON test specification files to generate tests for.
  24. */
  25. private static String[] TEST_CONFIG_FILES = {
  26. "src/test/resource/net/consensys/pier/impl/ethereum/vm/add.json",
  27. "src/test/resource/net/consensys/pier/impl/ethereum/vm/and0.json",
  28. "src/test/resource/net/consensys/pier/impl/ethereum/vm/and1.json",
  29. "src/test/resource/net/consensys/pier/impl/ethereum/vm/and2.json",
  30. "src/test/resource/net/consensys/pier/impl/ethereum/vm/addMod.json",
  31. "src/test/resource/net/consensys/pier/impl/ethereum/vm/addModZero.json",
  32. "src/test/resource/net/consensys/pier/impl/ethereum/vm/byte0.json",
  33. "src/test/resource/net/consensys/pier/impl/ethereum/vm/byte1.json",
  34. "src/test/resource/net/consensys/pier/impl/ethereum/vm/byte2.json",
  35. "src/test/resource/net/consensys/pier/impl/ethereum/vm/byte3.json",
  36. "src/test/resource/net/consensys/pier/impl/ethereum/vm/divide.json",
  37. "src/test/resource/net/consensys/pier/impl/ethereum/vm/divideZero.json",
  38. "src/test/resource/net/consensys/pier/impl/ethereum/vm/dup.json",
  39. "src/test/resource/net/consensys/pier/impl/ethereum/vm/eq0.json",
  40. "src/test/resource/net/consensys/pier/impl/ethereum/vm/eq1.json",
  41. "src/test/resource/net/consensys/pier/impl/ethereum/vm/exp0.json",
  42. "src/test/resource/net/consensys/pier/impl/ethereum/vm/exp1.json",
  43. "src/test/resource/net/consensys/pier/impl/ethereum/vm/exp2.json",
  44. "src/test/resource/net/consensys/pier/impl/ethereum/vm/exp3.json",
  45. "src/test/resource/net/consensys/pier/impl/ethereum/vm/exp4.json",
  46. "src/test/resource/net/consensys/pier/impl/ethereum/vm/gt0.json",
  47. "src/test/resource/net/consensys/pier/impl/ethereum/vm/gt1.json",
  48. "src/test/resource/net/consensys/pier/impl/ethereum/vm/gas.json",
  49. "src/test/resource/net/consensys/pier/impl/ethereum/vm/isZero0.json",
  50. "src/test/resource/net/consensys/pier/impl/ethereum/vm/isZero1.json",
  51. "src/test/resource/net/consensys/pier/impl/ethereum/vm/jump.json",
  52. "src/test/resource/net/consensys/pier/impl/ethereum/vm/jumpdest.json",
  53. "src/test/resource/net/consensys/pier/impl/ethereum/vm/jumpiDoJump.json",
  54. "src/test/resource/net/consensys/pier/impl/ethereum/vm/jumpiDoNotJump.json",
  55. "src/test/resource/net/consensys/pier/impl/ethereum/vm/lt0.json",
  56. "src/test/resource/net/consensys/pier/impl/ethereum/vm/lt1.json",
  57. "src/test/resource/net/consensys/pier/impl/ethereum/vm/mloadAlignedExistent.json",
  58. "src/test/resource/net/consensys/pier/impl/ethereum/vm/mloadAlignedNonexistent.json",
  59. "src/test/resource/net/consensys/pier/impl/ethereum/vm/mloadUnalignedExistent.json",
  60. "src/test/resource/net/consensys/pier/impl/ethereum/vm/mloadUnalignedNonexistent.json",
  61. "src/test/resource/net/consensys/pier/impl/ethereum/vm/mloadUnalignedPartialExistent.json",
  62. "src/test/resource/net/consensys/pier/impl/ethereum/vm/mod.json",
  63. "src/test/resource/net/consensys/pier/impl/ethereum/vm/modZero.json",
  64. "src/test/resource/net/consensys/pier/impl/ethereum/vm/msize0.json",
  65. "src/test/resource/net/consensys/pier/impl/ethereum/vm/msize1.json",
  66. "src/test/resource/net/consensys/pier/impl/ethereum/vm/mstore8LSBExistent.json",
  67. "src/test/resource/net/consensys/pier/impl/ethereum/vm/mstore8LSBNonexistent.json",
  68. "src/test/resource/net/consensys/pier/impl/ethereum/vm/mstore8MSBExistent.json",
  69. "src/test/resource/net/consensys/pier/impl/ethereum/vm/mstore8MSBNonexistent.json",
  70. "src/test/resource/net/consensys/pier/impl/ethereum/vm/mstoreAlignedExistent.json",
  71. "src/test/resource/net/consensys/pier/impl/ethereum/vm/mstoreAlignedNonexistent.json",
  72. "src/test/resource/net/consensys/pier/impl/ethereum/vm/mstoreUnalignedExistent.json",
  73. "src/test/resource/net/consensys/pier/impl/ethereum/vm/mstoreUnalignedNonexistent.json",
  74. "src/test/resource/net/consensys/pier/impl/ethereum/vm/mstoreUnalignedPartialExistent.json",
  75. "src/test/resource/net/consensys/pier/impl/ethereum/vm/mulMod0.json",
  76. "src/test/resource/net/consensys/pier/impl/ethereum/vm/mulMod1.json",
  77. "src/test/resource/net/consensys/pier/impl/ethereum/vm/mulMod2.json",
  78. "src/test/resource/net/consensys/pier/impl/ethereum/vm/multiply.json",
  79. "src/test/resource/net/consensys/pier/impl/ethereum/vm/not0.json",
  80. "src/test/resource/net/consensys/pier/impl/ethereum/vm/not1.json",
  81. "src/test/resource/net/consensys/pier/impl/ethereum/vm/or0.json",
  82. "src/test/resource/net/consensys/pier/impl/ethereum/vm/or1.json",
  83. "src/test/resource/net/consensys/pier/impl/ethereum/vm/or2.json",
  84. "src/test/resource/net/consensys/pier/impl/ethereum/vm/pc0.json",
  85. "src/test/resource/net/consensys/pier/impl/ethereum/vm/pc1.json",
  86. "src/test/resource/net/consensys/pier/impl/ethereum/vm/pop.json",
  87. "src/test/resource/net/consensys/pier/impl/ethereum/vm/pushAllCases.json",
  88. "src/test/resource/net/consensys/pier/impl/ethereum/vm/sDivide0.json",
  89. "src/test/resource/net/consensys/pier/impl/ethereum/vm/sDivide1.json",
  90. "src/test/resource/net/consensys/pier/impl/ethereum/vm/sDivide2.json",
  91. "src/test/resource/net/consensys/pier/impl/ethereum/vm/signExtend0.json",
  92. "src/test/resource/net/consensys/pier/impl/ethereum/vm/signExtend1.json",
  93. "src/test/resource/net/consensys/pier/impl/ethereum/vm/signExtend2.json",
  94. "src/test/resource/net/consensys/pier/impl/ethereum/vm/signExtend3.json",
  95. "src/test/resource/net/consensys/pier/impl/ethereum/vm/signExtend4.json",
  96. "src/test/resource/net/consensys/pier/impl/ethereum/vm/signExtend5.json",
  97. "src/test/resource/net/consensys/pier/impl/ethereum/vm/signExtend6.json",
  98. "src/test/resource/net/consensys/pier/impl/ethereum/vm/sgt0.json",
  99. "src/test/resource/net/consensys/pier/impl/ethereum/vm/sgt1.json",
  100. "src/test/resource/net/consensys/pier/impl/ethereum/vm/sLt0.json",
  101. "src/test/resource/net/consensys/pier/impl/ethereum/vm/sLt1.json",
  102. "src/test/resource/net/consensys/pier/impl/ethereum/vm/sLt2.json",
  103. "src/test/resource/net/consensys/pier/impl/ethereum/vm/sLt3.json",
  104. "src/test/resource/net/consensys/pier/impl/ethereum/vm/sLt4.json",
  105. "src/test/resource/net/consensys/pier/impl/ethereum/vm/sLt5.json",
  106. "src/test/resource/net/consensys/pier/impl/ethereum/vm/sMod0.json",
  107. "src/test/resource/net/consensys/pier/impl/ethereum/vm/sMod1.json",
  108. "src/test/resource/net/consensys/pier/impl/ethereum/vm/sMod2.json",
  109. "src/test/resource/net/consensys/pier/impl/ethereum/vm/stop.json",
  110. "src/test/resource/net/consensys/pier/impl/ethereum/vm/subtract.json",
  111. "src/test/resource/net/consensys/pier/impl/ethereum/vm/swap.json",
  112. "src/test/resource/net/consensys/pier/impl/ethereum/vm/xor0.json",
  113. "src/test/resource/net/consensys/pier/impl/ethereum/vm/xor1.json",
  114. "src/test/resource/net/consensys/pier/impl/ethereum/vm/xor2.json"
  115. };
  116.  
  117. /**
  118. * The test case name.
  119. */
  120. private final String name;
  121.  
  122. /**
  123. * The test case specification.
  124. */
  125. private final OperationTestCaseSpec spec;
  126.  
  127. /**
  128. * Returns a collection of parameter sets to execute operation tests.
  129. *
  130. * @return a collection of parameter sets to execute operation tests
  131. */
  132. @Parameters(name="Name: {0}")
  133. public static Collection<Object[]> getTestParametersForConfig() throws Exception {
  134. ObjectMapper mapper = new ObjectMapper();
  135.  
  136. Collection<Object[]> testCaseSpecs = new ArrayList<Object[]>();
  137.  
  138. for (String testConfigFile : TEST_CONFIG_FILES) {
  139. OperationTestSuiteSpec testSuiteSpec = mapper.readValue(
  140. new File(testConfigFile), OperationTestSuiteSpec.class);
  141.  
  142. testCaseSpecs.addAll(testSuiteSpec.getTestCaseSpecParameters());
  143. }
  144.  
  145. return testCaseSpecs;
  146. }
  147.  
  148. /**
  149. * Public constructor.
  150. *
  151. * @param name - the test name
  152. * @param spec - the test specification
  153. */
  154. public OperationTest(String name, OperationTestCaseSpec spec) {
  155. this.name = name;
  156. this.spec = spec;
  157. }
  158.  
  159. /**
  160. * Run the test case.
  161. */
  162. @Test
  163. public void testExecution() {
  164. OperationTraceEntry initExecState = spec.getInitialExecutionState().clone();
  165.  
  166. WorldState worldState = new WorldState();
  167. MachineState machState = new MachineState(initExecState.getGas(),
  168. initExecState.getPC(),
  169. initExecState.getMemory(),
  170. initExecState.getOperandStack());
  171. TransactionSubstate substate = new TransactionSubstate();
  172. EnvironmentInformation execEnv = new EnvironmentInformation(
  173. spec.getCode(), spec.getDepth());
  174.  
  175. VM vm = new VM(worldState, machState, substate, execEnv);
  176.  
  177. while (!vm.hasHalted()) {
  178. vm.step();
  179. }
  180.  
  181. // the state must be updated somewhere, somehow between
  182. // there and here
  183.  
  184. assertArrayEquals(spec.getExecutionTrace(), vm.getExecutionTrace());
  185. }
  186.  
  187. }
Add Comment
Please, Sign In to add comment