From 65ca63e037b06dc7625dfd8b336e63f2da7b6974 Mon Sep 17 00:00:00 2001 From: nicksavers Date: Thu, 9 Oct 2014 17:49:34 +0200 Subject: [PATCH] Extract GitHub tests into separate class and add tests --- .../GitHubJSONTestSuiteTest.java | 377 +++--------------- 1 file changed, 55 insertions(+), 322 deletions(-) diff --git a/ethereumj-core/src/test/java/org/ethereum/jsontestsuite/GitHubJSONTestSuiteTest.java b/ethereumj-core/src/test/java/org/ethereum/jsontestsuite/GitHubJSONTestSuiteTest.java index 8111a4bd..915d9664 100644 --- a/ethereumj-core/src/test/java/org/ethereum/jsontestsuite/GitHubJSONTestSuiteTest.java +++ b/ethereumj-core/src/test/java/org/ethereum/jsontestsuite/GitHubJSONTestSuiteTest.java @@ -1,348 +1,81 @@ package org.ethereum.jsontestsuite; -import org.ethereum.db.ByteArrayWrapper; +import java.util.Iterator; +import java.util.List; + import org.ethereum.util.Utils; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; import org.junit.Assert; import org.junit.Assume; -import org.junit.Ignore; import org.junit.Test; -import org.spongycastle.util.encoders.Hex; - -import java.io.File; -import java.io.IOException; -import java.math.BigInteger; -import java.net.URISyntaxException; -import java.net.URL; -import java.nio.file.Files; -import java.util.Iterator; -import java.util.List; /** - * www.ethereumJ.com - * - * @author: Roman Mandeleil - * Created on: 29/06/2014 10:46 + * Test file specific for tests maintained in the GitHub repository + * by the Ethereum DEV team.
+ * + * @see https://github.com/ethereum/tests/ */ - -public class JSONTestSuiteTest { - - - - @Test // AccountState parsing // - public void test1() throws ParseException { - - String expectedNonce = "01"; - String expectedBalance = "0de0b6b3a763ff6c"; - String expectedCode = "6000600060006000604a3360c85c03f1"; - - ByteArrayWrapper expectedKey1 = new ByteArrayWrapper(Hex.decode("ffaa")); - ByteArrayWrapper expectedKey2 = new ByteArrayWrapper(Hex.decode("ffab")); - - ByteArrayWrapper expectedVal1 = new ByteArrayWrapper(Hex.decode("c8")); - ByteArrayWrapper expectedVal2 = new ByteArrayWrapper(Hex.decode("b2b2b2")); - - JSONParser parser = new JSONParser(); - String accountString = "{'balance':999999999999999852,'nonce':1," + - "'code':'0x6000600060006000604a3360c85c03f1'," + - "'storage':{'0xffaa' : '0xc8', '0xffab' : '0xb2b2b2'}}"; - accountString = accountString.replace("'", "\""); - - JSONObject accountJSONObj = (JSONObject)parser.parse(accountString); - - AccountState state = - new AccountState(Hex.decode("0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6"), - accountJSONObj); - - Assert.assertEquals(expectedNonce, Hex.toHexString(state.nonce)); - Assert.assertEquals(expectedBalance, Hex.toHexString(state.balance)); - Assert.assertEquals(expectedCode, Hex.toHexString(state.code)); - - Assert.assertTrue(state.storage.keySet().contains(expectedKey1)); - Assert.assertTrue(state.storage.keySet().contains(expectedKey2)); - - Assert.assertTrue(state.storage.values().contains(expectedVal1)); - Assert.assertTrue(state.storage.values().contains(expectedVal2)); - } - - - - @Test // Exec parsing // - public void test2() throws ParseException { - - String expectedAddress = "0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6"; - String expectedCaller = "cd1722f3947def4cf144679da39c4c32bdc35681"; - String expectedData = "ffaabb"; - String expectedCode = "6000600060006000604a3360c85c03f1"; - String expectedGas = "2710"; - String expectedGasPrice = "5af3107a4000"; - String expectedOrigin = "cd1722f3947def4cf144679da39c4c32bdc35681"; - String expectedValue = "0de0b6b3a7640000"; - - JSONParser parser = new JSONParser(); - String execString = "{'address' : '0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6'," + - " 'caller' : 'cd1722f3947def4cf144679da39c4c32bdc35681'," + - " 'data' : '0xffaabb'," + - " 'code' : '0x6000600060006000604a3360c85c03f1'," + - " 'gas' : 10000," + - " 'gasPrice' : 100000000000000," + - " 'origin' : 'cd1722f3947def4cf144679da39c4c32bdc35681'," + - " 'value' : 1000000000000000000}"; - execString = execString.replace("'", "\""); - - JSONObject execJSONObj = (JSONObject)parser.parse(execString); - Exec exec = new Exec(execJSONObj); - - Assert.assertEquals(expectedAddress, Hex.toHexString(exec.getAddress())); - Assert.assertEquals(expectedCaller, Hex.toHexString(exec.getCaller())); - Assert.assertEquals(expectedData, Hex.toHexString(exec.getData())); - Assert.assertEquals(expectedCode, Hex.toHexString(exec.getCode())); - Assert.assertEquals(expectedGas, Hex.toHexString(exec.getGas())); - Assert.assertEquals(expectedGasPrice, Hex.toHexString(exec.getGasPrice())); - Assert.assertEquals(expectedOrigin, Hex.toHexString(exec.getOrigin())); - Assert.assertEquals(expectedValue, Hex.toHexString(exec.getValue())); - } - - - - @Test // Env parsing // - public void test3() throws ParseException { - - String expectedCurrentCoinbase = "2adc25665018aa1fe0e6bc666dac8fc2697ff9ba"; - String expectedCurrentDifficulty = "256"; - String expectedCurrentGasLimit = "1000000"; - String expectedCurrentNumber = "0"; - String expectedCurrentTimestamp = "1"; - String expectedPreviousHash = "5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6"; - - JSONParser parser = new JSONParser(); - String envString = "{'currentCoinbase' : '2adc25665018aa1fe0e6bc666dac8fc2697ff9ba'," + - "'currentDifficulty' : '256'," + - "'currentGasLimit' : '1000000'," + - "'currentNumber' : '0'," + - "'currentTimestamp' : 1," + - "'previousHash' : '5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6'}"; - envString = envString.replace("'", "\""); - - JSONObject envJSONObj = (JSONObject)parser.parse(envString); - - Env env = new Env(envJSONObj); - - Assert.assertEquals(expectedCurrentCoinbase, Hex.toHexString(env.getCurrentCoinbase())); - Assert.assertEquals(expectedCurrentDifficulty, new BigInteger(env.getCurrentDifficlty()).toString()); - Assert.assertEquals(expectedCurrentGasLimit, new BigInteger(env.getCurrentGasLimit()).toString()); - Assert.assertEquals(expectedCurrentNumber, new BigInteger(env.getCurrentNumber()).toString()); - Assert.assertEquals(expectedCurrentTimestamp, new BigInteger(env.getCurrentTimestamp()).toString()); - Assert.assertEquals(expectedPreviousHash, Hex.toHexString(env.getPreviousHash())); - - } - - - @Test // CallCreate parsing // - public void test4() throws ParseException { - - String expectedData = ""; - String expectedDestination = "cd1722f3947def4cf144679da39c4c32bdc35681"; - String expectedGasLimit = "9792"; - String expectedValue = "74"; - - JSONParser parser = new JSONParser(); - String callCreateString = "{'data' : '','destination' : 'cd1722f3947def4cf144679da39c4c32bdc35681','gasLimit' : 9792,'value' : 74}"; - callCreateString = callCreateString.replace("'", "\""); - - JSONObject callCreateJSONObj = (JSONObject)parser.parse(callCreateString); - - CallCreate callCreate = new CallCreate(callCreateJSONObj); - - Assert.assertEquals(expectedData, Hex.toHexString(callCreate.getData())); - Assert.assertEquals(expectedDestination, Hex.toHexString(callCreate.getDestination())); - Assert.assertEquals(expectedGasLimit, new BigInteger( callCreate.getGasLimit()).toString()); - Assert.assertEquals(expectedValue, new BigInteger( callCreate.getValue()).toString()); - } - - @Test // TestCase parsing // - public void test5() throws ParseException { - - JSONParser parser = new JSONParser(); -// String testCaseString = "{'callcreates':[{'data':[],'destination':'cd1722f3947def4cf144679da39c4c32bdc35681','gasLimit':9786,'value':2},{'data':[],'destination':'cd1722f3947def4cf144679da39c4c32bdc35681','gasLimit':9732,'value':12},{'data':[],'destination':'cd1722f3947def4cf144679da39c4c32bdc35681','gasLimit':9696,'value':13},{'data':[],'destination':'cd1722f3947def4cf144679da39c4c32bdc35681','gasLimit':9660,'value':14}],'env':{'currentCoinbase':'2adc25665018aa1fe0e6bc666dac8fc2697ff9ba','currentDifficulty':'256','currentGasLimit':'1000000','currentNumber':'0','currentTimestamp':1,'previousHash':'5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6'},'exec':{'address':'0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6','caller':'cd1722f3947def4cf144679da39c4c32bdc35681','code':['0x60006001100f603459600060006000600060033360c85c03f150', '0x60016000100f604e59600060006000600060043360c85c03f150','0x60006000100f606859600060006000600060053360c85c03f150', '0x60016001110f6082596000600060006000600c3360c85c03f150','0x60006001110f609c596000600060006000600d3360c85c03f150','0x60016000110f60b6596000600060006000600e3360c85c03f150','0x60006000110f60d0596000600060006000600f3360c85c03f150'],'data':[],'gas':10000,'gasPrice':100000000000000,'origin':'cd1722f3947def4cf144679da39c4c32bdc35681','value':1000000000000000000},'gas':9832,'out':[]}"; - String testCaseString = "{'callcreates':[{'data':'','destination':'cd1722f3947def4cf144679da39c4c32bdc35681','gasLimit':200,'value':74}],'env':{'currentCoinbase':'2adc25665018aa1fe0e6bc666dac8fc2697ff9ba','currentDifficulty':'256','currentGasLimit':'1000000','currentNumber':'0','currentTimestamp':1,'previousHash':'5e20a0453cecd065ea59c37ac63e079ee08998b6045136a8ce6635c7912ec0b6'},'exec':{'address':'0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6','caller':'cd1722f3947def4cf144679da39c4c32bdc35681','code':'0x6000600060006000604a3360c8f1','data':'','gas':10000,'gasPrice':100000000000000,'origin':'cd1722f3947def4cf144679da39c4c32bdc35681','value':1000000000000000000},'gas':9973,'out':[],'post':{'0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6':{'balance':999999999999999926,'code':'','nonce':0,'storage':{}}},'pre':{'0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6':{'balance':1000000000000000000,'code':'','nonce':0,'storage':{}}}}"; - testCaseString = testCaseString.replace("'", "\""); - - JSONObject testCaseJSONObj = (JSONObject)parser.parse(testCaseString); - - TestCase testCase = new TestCase(testCaseJSONObj); - int ccList = testCase.getCallCreateList().size(); - - Assert.assertEquals(1, ccList); - - TestRunner runner = new TestRunner(); - List result = runner.runTestCase(testCase); - - Assert.assertTrue(result.size() == 0); - - } - - @Test // TestCase file: vmtest-1.json // - public void test6() throws ParseException, IOException, URISyntaxException { - - URL vmtest = ClassLoader - .getSystemResource("jsontestsuite/vmtest-1.json"); - - File vmTestFile = new File(vmtest.toURI()); - byte[] testData = Files.readAllBytes(vmTestFile.toPath()); - String testSrc = new String(testData); - - JSONParser parser = new JSONParser(); - JSONObject testCaseJSONObj = (JSONObject)parser.parse(testSrc); - - TestSuite testSuite = new TestSuite(testCaseJSONObj); - - TestRunner runner = new TestRunner(); - List result = runner.runTestSuite(testSuite); - - Assert.assertTrue(result.size() == 0); - } - - - @Test // TestCase file: vmtest-2.json // - public void test7() throws ParseException, IOException, URISyntaxException { - - URL vmtest = ClassLoader - .getSystemResource("jsontestsuite/vmtest-2.json"); - - File vmTestFile = new File(vmtest.toURI()); - byte[] testData = Files.readAllBytes(vmTestFile.toPath()); - String testSrc = new String(testData); - - JSONParser parser = new JSONParser(); - JSONObject testCaseJSONObj = (JSONObject)parser.parse(testSrc); - - TestSuite testSuite = new TestSuite(testCaseJSONObj); - - TestRunner runner = new TestRunner(); - List result = runner.runTestSuite(testSuite); - - Assert.assertTrue(result.size() == 0); - } - - @Test // TestCase file: vmtest-3.json // - public void test8() throws ParseException, IOException, URISyntaxException { - - URL vmtest = ClassLoader - .getSystemResource("jsontestsuite/vmtest-3.json"); - - File vmTestFile = new File(vmtest.toURI()); - byte[] testData = Files.readAllBytes(vmTestFile.toPath()); - String testSrc = new String(testData); - - JSONParser parser = new JSONParser(); - JSONObject testCaseJSONObj = (JSONObject)parser.parse(testSrc); - - TestSuite testSuite = new TestSuite(testCaseJSONObj); - - TestRunner runner = new TestRunner(); - List result = runner.runTestSuite(testSuite); - - Assert.assertTrue(result.size() == 0); - } - - - @Test // TestCase file: vmtest-4.json // - public void test9() throws ParseException, IOException, URISyntaxException { - - URL vmtest = ClassLoader - .getSystemResource("jsontestsuite/vmtest-4.json"); - - File vmTestFile = new File(vmtest.toURI()); - byte[] testData = Files.readAllBytes(vmTestFile.toPath()); - String testSrc = new String(testData); - - JSONParser parser = new JSONParser(); - JSONObject testCaseJSONObj = (JSONObject)parser.parse(testSrc); - - TestSuite testSuite = new TestSuite(testCaseJSONObj); - - TestRunner runner = new TestRunner(); - List result = runner.runTestSuite(testSuite); - - Assert.assertTrue(result.size() == 0); - } - - @Ignore - @Test // TestCase file: vmtest-4.json // - public void test10() throws ParseException, IOException, URISyntaxException { - - URL vmtest = ClassLoader - .getSystemResource("jsontestsuite/vmtest-5.json"); - - File vmTestFile = new File(vmtest.toURI()); - byte[] testData = Files.readAllBytes(vmTestFile.toPath()); - String testSrc = new String(testData); - - JSONParser parser = new JSONParser(); - JSONObject testCaseJSONObj = (JSONObject)parser.parse(testSrc); - - TestSuite testSuite = new TestSuite(testCaseJSONObj); - - TestRunner runner = new TestRunner(); - List result = runner.runTestSuite(testSuite); - - Assert.assertTrue(result.size() == 0); - } - +public class GitHubJSONTestSuiteTest { @Test // testing full suite - public void testDirectFromGitHub() throws ParseException { + public void testArithmeticFromGitHub() throws ParseException { - String json = Utils.getFromUrl("https://raw.githubusercontent.com/ethereum/tests/develop/vmtests.json"); - Assume.assumeFalse("Online test suite is no available", json.equals("")); - - JSONParser parser = new JSONParser(); - JSONObject testSuiteObj = (JSONObject)parser.parse(json); - - TestSuite testSuite = new TestSuite(testSuiteObj); - Iterator testIterator = testSuite.iterator(); - - while (testIterator.hasNext()){ - - TestCase testCase = testIterator.next(); - - System.out.println("Running: " + testCase.getName()); - TestRunner runner = new TestRunner(); - List result = runner.runTestCase(testCase); - Assert.assertTrue(result.isEmpty()); - } + String json = Utils.getFromUrl("https://raw.githubusercontent.com/ethereum/tests/master/vmtests/vmArithmeticTest.json"); + runGitHubJsonTest(json); } @Test // testing full suite - public void testNameCoinFromGitHub() throws ParseException { + public void testBitwiseLogicOperationFromGitHub() throws ParseException { - String json = Utils.getFromUrl("https://raw.githubusercontent.com/ethereum/tests/develop/namecoin.json"); - Assume.assumeFalse("Online test suite is no available", json.equals("")); - - JSONParser parser = new JSONParser(); - JSONObject testSuiteObj = (JSONObject)parser.parse(json); - - TestSuite testSuite = new TestSuite(testSuiteObj); - Iterator testIterator = testSuite.iterator(); - - while (testIterator.hasNext()){ - - TestCase testCase = testIterator.next(); - - System.out.println("Running: " + testCase.getName()); - TestRunner runner = new TestRunner(); - List result = runner.runTestCase(testCase); - Assert.assertTrue(result.isEmpty()); - } + String json = Utils.getFromUrl("https://raw.githubusercontent.com/ethereum/tests/master/vmtests/vmBitwiseLogicOperationTest.json"); + runGitHubJsonTest(json); } @Test // testing full suite - public void testRandomFromGitHub() throws ParseException { + public void testBlockInfoFromGitHub() throws ParseException { - String json = Utils.getFromUrl("https://raw.githubusercontent.com/ethereum/tests/develop/random.json"); + String json = Utils.getFromUrl("https://raw.githubusercontent.com/ethereum/tests/master/vmtests/vmBlockInfoTest.json"); + runGitHubJsonTest(json); + } + + @Test // testing full suite + public void testEnvironmentalInfoFromGitHub() throws ParseException { + + String json = Utils.getFromUrl("https://raw.githubusercontent.com/ethereum/tests/master/vmtests/vmEnvironmentalInfoTest.json"); + runGitHubJsonTest(json); + } + + @Test // testing full suite + public void testIOandFlowOperationsFromGitHub() throws ParseException { + + String json = Utils.getFromUrl("https://raw.githubusercontent.com/ethereum/tests/master/vmtests/vmIOandFlowOperationsTest.json"); + runGitHubJsonTest(json); + } + + @Test // testing full suite + public void testPushDupSwapFromGitHub() throws ParseException { + + String json = Utils.getFromUrl("https://raw.githubusercontent.com/ethereum/tests/master/vmtests/vmPushDupSwapTest.json"); + runGitHubJsonTest(json); + } + + @Test // testing full suite + public void testShaFromGitHub() throws ParseException { + + String json = Utils.getFromUrl("https://raw.githubusercontent.com/ethereum/tests/master/vmtests/vmSha3Test.json"); + runGitHubJsonTest(json); + } + + @Test // testing full suite + public void testSystemOperationsFromGitHub() throws ParseException { + + String json = Utils.getFromUrl("https://raw.githubusercontent.com/ethereum/tests/master/vmtests/vmSystemOperationsTest.json"); + runGitHubJsonTest(json); + } + + private void runGitHubJsonTest(String json) throws ParseException { Assume.assumeFalse("Online test suite is no available", json.equals("")); JSONParser parser = new JSONParser();