summaryrefslogtreecommitdiff
path: root/src/cz/crcs/ectester/reader/output/YAMLTestWriter.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/cz/crcs/ectester/reader/output/YAMLTestWriter.java')
-rw-r--r--src/cz/crcs/ectester/reader/output/YAMLTestWriter.java115
1 files changed, 46 insertions, 69 deletions
diff --git a/src/cz/crcs/ectester/reader/output/YAMLTestWriter.java b/src/cz/crcs/ectester/reader/output/YAMLTestWriter.java
index 3b2b72d..199f2c0 100644
--- a/src/cz/crcs/ectester/reader/output/YAMLTestWriter.java
+++ b/src/cz/crcs/ectester/reader/output/YAMLTestWriter.java
@@ -1,13 +1,16 @@
package cz.crcs.ectester.reader.output;
-import cz.crcs.ectester.reader.Util;
+import cz.crcs.ectester.common.output.BaseYAMLTestWriter;
+import cz.crcs.ectester.common.test.TestSuite;
+import cz.crcs.ectester.common.test.Testable;
+import cz.crcs.ectester.common.util.ByteUtil;
+import cz.crcs.ectester.reader.CardMngr;
import cz.crcs.ectester.reader.command.Command;
import cz.crcs.ectester.reader.response.Response;
-import cz.crcs.ectester.reader.test.Test;
-import cz.crcs.ectester.reader.test.TestSuite;
-import org.yaml.snakeyaml.DumperOptions;
-import org.yaml.snakeyaml.Yaml;
+import cz.crcs.ectester.reader.test.CardTestSuite;
+import cz.crcs.ectester.reader.test.CommandTestable;
+import javax.smartcardio.CardException;
import java.io.PrintStream;
import java.util.HashMap;
import java.util.LinkedList;
@@ -17,39 +20,21 @@ import java.util.Map;
/**
* @author Jan Jancar johny@neuromancer.sk
*/
-public class YAMLTestWriter implements TestWriter {
- private PrintStream output;
- private Map<String, Object> testRun;
- private Map<String, String> testSuite;
- private List<Object> tests;
-
+public class YAMLTestWriter extends BaseYAMLTestWriter {
public YAMLTestWriter(PrintStream output) {
- this.output = output;
- }
-
- @Override
- public void begin(TestSuite suite) {
- output.println("---");
- testRun = new HashMap<>();
- testSuite = new HashMap<>();
- tests = new LinkedList<>();
- testSuite.put("name", suite.getName());
- testSuite.put("desc", suite.getDescription());
-
- testRun.put("suite", testSuite);
- testRun.put("tests", tests);
+ super(output);
}
private Map<String, Object> commandObject(Command c) {
Map<String, Object> commandObj = new HashMap<>();
- commandObj.put("apdu", Util.bytesToHex(c.getAPDU().getBytes()));
+ commandObj.put("apdu", ByteUtil.bytesToHex(c.getAPDU().getBytes()));
return commandObj;
}
private Map<String, Object> responseObject(Response r) {
Map<String, Object> responseObj = new HashMap<>();
responseObj.put("successful", r.successful());
- responseObj.put("apdu", Util.bytesToHex(r.getAPDU().getBytes()));
+ responseObj.put("apdu", ByteUtil.bytesToHex(r.getAPDU().getBytes()));
responseObj.put("natural_sw", Short.toUnsignedInt(r.getNaturalSW()));
List<Integer> sws = new LinkedList<>();
for (int i = 0; i < r.getNumSW(); ++i) {
@@ -61,53 +46,45 @@ public class YAMLTestWriter implements TestWriter {
return responseObj;
}
- private Map<String, Object> testObject(Test t) {
- Map<String, Object> testObj = new HashMap<>();
-
- if (t instanceof Test.Simple) {
- Test.Simple test = (Test.Simple) t;
- testObj.put("type", "simple");
- testObj.put("command", commandObject(test.getCommand()));
- testObj.put("response", responseObject(test.getResponse()));
- } else if (t instanceof Test.Compound) {
- Test.Compound test = (Test.Compound) t;
- testObj.put("type", "compound");
- List<Map<String, Object>> tests = new LinkedList<>();
- for (Test innerTest : test.getTests()) {
- tests.add(testObject(innerTest));
- }
- testObj.put("tests", tests);
+ @Override
+ protected Map<String, Object> testableObject(Testable t) {
+ if (t instanceof CommandTestable) {
+ CommandTestable cmd = (CommandTestable) t;
+ Map<String, Object> result = new HashMap<>();
+ result.put("type", "command");
+ result.put("command", commandObject(cmd.getCommand()));
+ result.put("response", responseObject(cmd.getResponse()));
+ return result;
}
-
- testObj.put("desc", t.getDescription());
- Map<String, Object> result = new HashMap<>();
- result.put("ok", t.ok());
- result.put("value", t.getResultValue().name());
- result.put("cause", t.getResultCause());
- testObj.put("result", result);
-
- return testObj;
+ return null;
}
- @Override
- public void outputTest(Test t) {
- if (!t.hasRun())
- return;
- tests.add(testObject(t));
+ private Map<String, Object> cplcObject(CardMngr card) {
+ Map<String, Object> result = new HashMap<>();
+ try {
+ CardMngr.CPLC cplc = card.getCPLC();
+ if (!cplc.values().isEmpty()) {
+ for (Map.Entry<CardMngr.CPLC.Field, byte[]> entry : cplc.values().entrySet()) {
+ CardMngr.CPLC.Field field = entry.getKey();
+ byte[] value = entry.getValue();
+ result.put(field.name(), ByteUtil.bytesToHex(value, false));
+ }
+ }
+ } catch (CardException ignored) {
+ }
+ return result;
}
@Override
- public void end() {
- DumperOptions options = new DumperOptions();
- options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
- options.setPrettyFlow(true);
- Yaml yaml = new Yaml(options);
-
- Map<String, Object> result = new HashMap<>();
- result.put("testRun", testRun);
- String out = yaml.dump(result);
-
- output.println(out);
- output.println("---");
+ protected Map<String, Object> deviceObject(TestSuite suite) {
+ if (suite instanceof CardTestSuite) {
+ CardTestSuite cardSuite = (CardTestSuite) suite;
+ Map<String, Object> result = new HashMap<>();
+ result.put("type", "card");
+ result.put("cplc", cplcObject(cardSuite.getCard()));
+ result.put("ATR", ByteUtil.bytesToHex(cardSuite.getCard().getATR().getBytes(), false));
+ return result;
+ }
+ return null;
}
}