Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package net.consensys.pier.impl.ethereum.vm;
- import java.io.File;
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.Stack;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import org.junit.runners.Parameterized;
- import org.junit.runners.Parameterized.Parameters;
- import static org.junit.Assert.assertArrayEquals;
- /**
- * The VM operation testing framework entry point.
- */
- @RunWith(Parameterized.class)
- public class OperationTest {
- /**
- * The JSON test specification files to generate tests for.
- */
- private static String[] TEST_CONFIG_FILES = {
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/add.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/and0.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/and1.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/and2.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/addMod.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/addModZero.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/byte0.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/byte1.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/byte2.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/byte3.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/divide.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/divideZero.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/dup.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/eq0.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/eq1.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/exp0.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/exp1.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/exp2.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/exp3.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/exp4.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/gt0.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/gt1.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/gas.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/isZero0.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/isZero1.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/jump.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/jumpdest.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/jumpiDoJump.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/jumpiDoNotJump.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/lt0.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/lt1.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/mloadAlignedExistent.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/mloadAlignedNonexistent.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/mloadUnalignedExistent.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/mloadUnalignedNonexistent.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/mloadUnalignedPartialExistent.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/mod.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/modZero.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/msize0.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/msize1.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/mstore8LSBExistent.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/mstore8LSBNonexistent.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/mstore8MSBExistent.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/mstore8MSBNonexistent.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/mstoreAlignedExistent.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/mstoreAlignedNonexistent.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/mstoreUnalignedExistent.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/mstoreUnalignedNonexistent.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/mstoreUnalignedPartialExistent.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/mulMod0.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/mulMod1.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/mulMod2.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/multiply.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/not0.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/not1.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/or0.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/or1.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/or2.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/pc0.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/pc1.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/pop.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/pushAllCases.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/sDivide0.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/sDivide1.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/sDivide2.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/signExtend0.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/signExtend1.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/signExtend2.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/signExtend3.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/signExtend4.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/signExtend5.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/signExtend6.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/sgt0.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/sgt1.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/sLt0.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/sLt1.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/sLt2.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/sLt3.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/sLt4.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/sLt5.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/sMod0.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/sMod1.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/sMod2.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/stop.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/subtract.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/swap.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/xor0.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/xor1.json",
- "src/test/resource/net/consensys/pier/impl/ethereum/vm/xor2.json"
- };
- /**
- * The test case name.
- */
- private final String name;
- /**
- * The test case specification.
- */
- private final OperationTestCaseSpec spec;
- /**
- * Returns a collection of parameter sets to execute operation tests.
- *
- * @return a collection of parameter sets to execute operation tests
- */
- @Parameters(name="Name: {0}")
- public static Collection<Object[]> getTestParametersForConfig() throws Exception {
- ObjectMapper mapper = new ObjectMapper();
- Collection<Object[]> testCaseSpecs = new ArrayList<Object[]>();
- for (String testConfigFile : TEST_CONFIG_FILES) {
- OperationTestSuiteSpec testSuiteSpec = mapper.readValue(
- new File(testConfigFile), OperationTestSuiteSpec.class);
- testCaseSpecs.addAll(testSuiteSpec.getTestCaseSpecParameters());
- }
- return testCaseSpecs;
- }
- /**
- * Public constructor.
- *
- * @param name - the test name
- * @param spec - the test specification
- */
- public OperationTest(String name, OperationTestCaseSpec spec) {
- this.name = name;
- this.spec = spec;
- }
- /**
- * Run the test case.
- */
- @Test
- public void testExecution() {
- OperationTraceEntry initExecState = spec.getInitialExecutionState().clone();
- WorldState worldState = new WorldState();
- MachineState machState = new MachineState(initExecState.getGas(),
- initExecState.getPC(),
- initExecState.getMemory(),
- initExecState.getOperandStack());
- TransactionSubstate substate = new TransactionSubstate();
- EnvironmentInformation execEnv = new EnvironmentInformation(
- spec.getCode(), spec.getDepth());
- VM vm = new VM(worldState, machState, substate, execEnv);
- while (!vm.hasHalted()) {
- vm.step();
- }
- // the state must be updated somewhere, somehow between
- // there and here
- assertArrayEquals(spec.getExecutionTrace(), vm.getExecutionTrace());
- }
- }
Add Comment
Please, Sign In to add comment