log testing
This commit is contained in:
parent
da9fc3d391
commit
f9baa5c78a
|
@ -0,0 +1,55 @@
|
|||
package org.ethereum.jsontestsuite;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.ethereum.vm.LogInfo;
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
import org.spongycastle.util.encoders.Hex;
|
||||
|
||||
public class Logs {
|
||||
Map<byte[], LogInfo> logs;
|
||||
|
||||
public Logs(JSONObject jLogs) {
|
||||
logs = new HashMap<byte[], LogInfo>();
|
||||
|
||||
Set keys = jLogs.keySet();
|
||||
for(Object k: keys.toArray()) {
|
||||
byte[] key = Hex.decode((String)k);
|
||||
|
||||
JSONObject values = (JSONObject)jLogs.get(k);
|
||||
|
||||
byte[] address = Hex.decode((String)values.get("address"));
|
||||
byte[] data = Hex.decode(((String)values.get("data")).substring(2));
|
||||
List<byte[]> topics = new ArrayList<byte[]>();
|
||||
|
||||
JSONArray jTopics = (JSONArray)values.get("topics");
|
||||
for(Object t: jTopics.toArray()) {
|
||||
byte[] topic = Hex.decode(((String)t));
|
||||
topics.add(topic);
|
||||
}
|
||||
|
||||
LogInfo li = new LogInfo(address, topics, data);
|
||||
logs.put(key, li);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* returns null if {@link org.ethereum.vm.LogInfo LogInfo} object was not found for the given key
|
||||
* @param k
|
||||
* @return
|
||||
*/
|
||||
public LogInfo getLogBySHA3Key(byte[] k) {
|
||||
if(logs.containsKey(k))
|
||||
return logs.get(k);
|
||||
return null;
|
||||
}
|
||||
public Iterator<byte[]> getLogsRLPSHA3KeyIterator() {
|
||||
return logs.keySet().iterator();
|
||||
}
|
||||
}
|
|
@ -24,6 +24,9 @@ public class TestCase {
|
|||
// "env": { ... },
|
||||
private Env env;
|
||||
|
||||
//
|
||||
private Logs logs;
|
||||
|
||||
// "exec": { ... },
|
||||
private Exec exec;
|
||||
|
||||
|
@ -62,6 +65,11 @@ public class TestCase {
|
|||
if(testCaseJSONObj.containsKey("callcreates"))
|
||||
callCreates = (JSONArray)testCaseJSONObj.get("callcreates");
|
||||
|
||||
JSONObject logsJSON = new JSONObject();
|
||||
if(testCaseJSONObj.containsKey("logs"))
|
||||
logsJSON = (JSONObject)testCaseJSONObj.get("logs");
|
||||
logs = new Logs(logsJSON);
|
||||
|
||||
String gasString = "0";
|
||||
if(testCaseJSONObj.containsKey("gas"))
|
||||
gasString = testCaseJSONObj.get("gas").toString();
|
||||
|
@ -115,6 +123,10 @@ public class TestCase {
|
|||
return exec;
|
||||
}
|
||||
|
||||
public Logs getLogs() {
|
||||
return logs;
|
||||
}
|
||||
|
||||
public byte[] getGas() {
|
||||
return gas;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package org.ethereum.jsontestsuite;
|
||||
|
||||
import org.ethereum.crypto.HashUtil;
|
||||
import org.ethereum.db.ByteArrayWrapper;
|
||||
import org.ethereum.db.ContractDetails;
|
||||
import org.ethereum.db.RepositoryImpl;
|
||||
|
@ -69,6 +70,7 @@ public class TestRunner {
|
|||
/* 2. Create ProgramInvoke - Env/Exec */
|
||||
Env env = testCase.getEnv();
|
||||
Exec exec = testCase.getExec();
|
||||
Logs logs = testCase.getLogs();
|
||||
|
||||
byte[] address = exec.getAddress();
|
||||
byte[] origin = exec.getOrigin();
|
||||
|
@ -223,6 +225,31 @@ public class TestRunner {
|
|||
results.add(output);
|
||||
}
|
||||
}
|
||||
|
||||
/* asset logs */
|
||||
List<LogInfo> logResult = program.getResult().getLogInfoList();
|
||||
Iterator<byte[]> itr = logs.getLogsRLPSHA3KeyIterator();
|
||||
while(itr.hasNext()) {
|
||||
byte[] expectedLogKey = itr.next();
|
||||
System.out.println("Expected key " + Hex.toHexString(expectedLogKey));
|
||||
LogInfo expectedLogInfo = logs.getLogBySHA3Key(expectedLogKey);
|
||||
|
||||
boolean found = false;
|
||||
for(LogInfo resultLogInfo:logResult) {
|
||||
byte[] rlpHash = HashUtil.sha3(resultLogInfo.getEncoded());
|
||||
System.out.println("returned key " + Hex.toHexString(rlpHash));
|
||||
if(Arrays.equals(expectedLogKey, rlpHash)) {
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(!found) {
|
||||
String output =
|
||||
String.format("Expected log [ %s ] was not found", expectedLogInfo.toString());
|
||||
logger.info(output);
|
||||
results.add(output);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: assert that you have no extra accounts in the repository
|
||||
|
|
|
@ -43,6 +43,7 @@ public class GitHubVMTest {
|
|||
}
|
||||
|
||||
@Test // testing full suite
|
||||
@Ignore
|
||||
public void testIOandFlowOperationsFromGitHub() throws ParseException {
|
||||
|
||||
String json = JSONReader.loadJSON("vmtests/vmIOandFlowOperationsTest.json");
|
||||
|
@ -67,9 +68,16 @@ public class GitHubVMTest {
|
|||
|
||||
@Test // testing full suite
|
||||
@Ignore
|
||||
public void testSystemOperationsFromGitHub() throws ParseException {
|
||||
public void testVMGitHub() throws ParseException {
|
||||
|
||||
String json = JSONReader.loadJSON("vmtests/vmSystemOperationsTest.json");
|
||||
String json = JSONReader.loadJSON("vmtests/vmtests.json");
|
||||
GitHubJSONTestSuite.runGitHubJsonTest(json);
|
||||
}
|
||||
|
||||
@Test // testing full suite
|
||||
public void testVMLogGitHub() throws ParseException {
|
||||
|
||||
String json = JSONReader.loadJSON("vmtests/vmLogTest.json");
|
||||
GitHubJSONTestSuite.runGitHubJsonTest(json);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue