From a4e52b21b1dad5f96df409c44e5b4d611bba01b9 Mon Sep 17 00:00:00 2001 From: J08nY Date: Mon, 28 May 2018 20:06:18 +0200 Subject: Implement tracking of stage of execution of standalone testables. - Output this stage in all the formats. --- .../standalone/test/base/KeyGeneratorTestable.java | 71 ++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 src/cz/crcs/ectester/standalone/test/base/KeyGeneratorTestable.java (limited to 'src/cz/crcs/ectester/standalone/test/base/KeyGeneratorTestable.java') diff --git a/src/cz/crcs/ectester/standalone/test/base/KeyGeneratorTestable.java b/src/cz/crcs/ectester/standalone/test/base/KeyGeneratorTestable.java new file mode 100644 index 0000000..b561b8b --- /dev/null +++ b/src/cz/crcs/ectester/standalone/test/base/KeyGeneratorTestable.java @@ -0,0 +1,71 @@ +package cz.crcs.ectester.standalone.test.base; + +import java.security.InvalidAlgorithmParameterException; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.spec.ECParameterSpec; + +/** + * @author Jan Jancar johny@neuromancer.sk + */ +public class KeyGeneratorTestable extends StandaloneTestable { + private KeyPair kp; + private KeyPairGenerator kpg; + private int keysize = 0; + private ECParameterSpec spec = null; + + public KeyGeneratorTestable(KeyPairGenerator kpg) { + this.kpg = kpg; + } + + public KeyGeneratorTestable(KeyPairGenerator kpg, int keysize) { + this.kpg = kpg; + this.keysize = keysize; + } + + public KeyGeneratorTestable(KeyPairGenerator kpg, ECParameterSpec spec) { + this.kpg = kpg; + this.spec = spec; + } + + public KeyPairGenerator getKpg() { + return kpg; + } + + public KeyPair getKeyPair() { + return kp; + } + + @Override + public void run() { + try { + stage = KeyGeneratorStage.Init; + try { + if (spec != null) { + kpg.initialize(spec); + } else if (keysize != 0) { + kpg.initialize(keysize); + } + } catch (InvalidAlgorithmParameterException e) { + ok = false; + hasRun = true; + return; + } + + stage = KeyGeneratorStage.GenKeyPair; + kp = kpg.genKeyPair(); + + ok = true; + } catch (Exception ex) { + ok = false; + error = true; + errorCause = ex; + } + hasRun = true; + } + + public enum KeyGeneratorStage { + Init, + GenKeyPair + } +} -- cgit v1.2.3-70-g09d2 From 298ffc18e590d07eb04d2c5c2b1d553f8fba71bd Mon Sep 17 00:00:00 2001 From: J08nY Date: Mon, 28 May 2018 21:45:19 +0200 Subject: Implement tracking and writing of exceptions in standalone tests. --- .../ectester/common/output/BaseYAMLTestWriter.java | 8 +++--- .../ectester/reader/output/YAMLTestWriter.java | 15 +++++------ .../ectester/standalone/output/TextTestWriter.java | 20 ++++++++++++--- .../ectester/standalone/output/XMLTestWriter.java | 17 +++++++++++- .../ectester/standalone/output/YAMLTestWriter.java | 30 ++++++++++++++++------ .../standalone/test/base/KeyAgreementTestable.java | 11 +++----- .../standalone/test/base/KeyGeneratorTestable.java | 3 +-- .../standalone/test/base/SignatureTestable.java | 21 ++++++--------- .../standalone/test/base/StandaloneTestable.java | 11 ++++++++ 9 files changed, 89 insertions(+), 47 deletions(-) (limited to 'src/cz/crcs/ectester/standalone/test/base/KeyGeneratorTestable.java') diff --git a/src/cz/crcs/ectester/common/output/BaseYAMLTestWriter.java b/src/cz/crcs/ectester/common/output/BaseYAMLTestWriter.java index c274cf2..609e46d 100644 --- a/src/cz/crcs/ectester/common/output/BaseYAMLTestWriter.java +++ b/src/cz/crcs/ectester/common/output/BaseYAMLTestWriter.java @@ -25,8 +25,8 @@ public abstract class BaseYAMLTestWriter implements TestWriter { @Override public void begin(TestSuite suite) { output.println("---"); - testRun = new HashMap<>(); - testSuite = new HashMap<>(); + testRun = new LinkedHashMap<>(); + testSuite = new LinkedHashMap<>(); tests = new LinkedList<>(); testSuite.put("name", suite.getName()); testSuite.put("desc", suite.getDescription()); @@ -59,7 +59,7 @@ public abstract class BaseYAMLTestWriter implements TestWriter { } private Map resultObject(Result result) { - Map resultObject = new HashMap<>(); + Map resultObject = new LinkedHashMap<>(); resultObject.put("ok", result.ok()); resultObject.put("value", result.getValue().name()); resultObject.put("cause", causeObject(result.getCause())); @@ -107,7 +107,7 @@ public abstract class BaseYAMLTestWriter implements TestWriter { options.setPrettyFlow(true); Yaml yaml = new Yaml(options); - Map result = new HashMap<>(); + Map result = new LinkedHashMap<>(); result.put("testRun", testRun); String out = yaml.dump(result); diff --git a/src/cz/crcs/ectester/reader/output/YAMLTestWriter.java b/src/cz/crcs/ectester/reader/output/YAMLTestWriter.java index 4c908cc..820521d 100644 --- a/src/cz/crcs/ectester/reader/output/YAMLTestWriter.java +++ b/src/cz/crcs/ectester/reader/output/YAMLTestWriter.java @@ -13,10 +13,7 @@ import cz.crcs.ectester.reader.test.CommandTestable; import javax.smartcardio.CardException; import java.io.PrintStream; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; +import java.util.*; /** * @author Jan Jancar johny@neuromancer.sk @@ -27,7 +24,7 @@ public class YAMLTestWriter extends BaseYAMLTestWriter { } private Map commandObject(Command c) { - Map commandObj = new HashMap<>(); + Map commandObj = new LinkedHashMap<>(); if (c == null) { return commandObj; } @@ -37,7 +34,7 @@ public class YAMLTestWriter extends BaseYAMLTestWriter { } private Map responseObject(Response r) { - Map responseObj = new HashMap<>(); + Map responseObj = new LinkedHashMap<>(); if (r == null) { return responseObj; } @@ -58,7 +55,7 @@ public class YAMLTestWriter extends BaseYAMLTestWriter { protected Map testableObject(Testable t) { if (t instanceof CommandTestable) { CommandTestable cmd = (CommandTestable) t; - Map result = new HashMap<>(); + Map result = new LinkedHashMap<>(); result.put("type", "command"); result.put("command", commandObject(cmd.getCommand())); result.put("response", responseObject(cmd.getResponse())); @@ -68,7 +65,7 @@ public class YAMLTestWriter extends BaseYAMLTestWriter { } private Map cplcObject(CardMngr card) { - Map result = new HashMap<>(); + Map result = new LinkedHashMap<>(); try { CardMngr.CPLC cplc = card.getCPLC(); if (!cplc.values().isEmpty()) { @@ -87,7 +84,7 @@ public class YAMLTestWriter extends BaseYAMLTestWriter { protected Map deviceObject(TestSuite suite) { if (suite instanceof CardTestSuite) { CardTestSuite cardSuite = (CardTestSuite) suite; - Map result = new HashMap<>(); + Map result = new LinkedHashMap<>(); result.put("type", "card"); result.put("ectester", ECTesterReader.VERSION); result.put("cplc", cplcObject(cardSuite.getCard())); diff --git a/src/cz/crcs/ectester/standalone/output/TextTestWriter.java b/src/cz/crcs/ectester/standalone/output/TextTestWriter.java index 691bea8..2e29b07 100644 --- a/src/cz/crcs/ectester/standalone/output/TextTestWriter.java +++ b/src/cz/crcs/ectester/standalone/output/TextTestWriter.java @@ -4,10 +4,9 @@ import cz.crcs.ectester.common.output.BaseTextTestWriter; import cz.crcs.ectester.common.test.TestSuite; import cz.crcs.ectester.common.test.Testable; import cz.crcs.ectester.standalone.ECTesterStandalone; -import cz.crcs.ectester.standalone.test.base.*; +import cz.crcs.ectester.standalone.test.base.StandaloneTestable; import cz.crcs.ectester.standalone.test.suites.StandaloneTestSuite; -import javax.crypto.KeyAgreement; import java.io.PrintStream; /** @@ -18,10 +17,25 @@ public class TextTestWriter extends BaseTextTestWriter { super(output); } + private String causeString(Object cause) { + if (cause == null) { + return ""; + } else if (cause instanceof Exception) { + Exception ex = ((Exception) cause); + return " -> " + ex.getClass().getCanonicalName() + " : " + ex.getMessage(); + } else { + return cause.toString(); + } + } + @Override protected String testableString(Testable t) { if (t instanceof StandaloneTestable) { - return ((StandaloneTestable)t).getStage().name(); + StandaloneTestable testable = (StandaloneTestable) t; + String stage = testable.getStage().name(); + String exception = causeString(testable.getException()); + String errorCause = causeString(testable.errorCause()); + return stage + exception + errorCause; } return ""; } diff --git a/src/cz/crcs/ectester/standalone/output/XMLTestWriter.java b/src/cz/crcs/ectester/standalone/output/XMLTestWriter.java index 9332759..1458a12 100644 --- a/src/cz/crcs/ectester/standalone/output/XMLTestWriter.java +++ b/src/cz/crcs/ectester/standalone/output/XMLTestWriter.java @@ -104,10 +104,22 @@ public class XMLTestWriter extends BaseXMLTestWriter { return result; } + private String causeObject(Object cause) { + if (cause == null) { + return ""; + } else if (cause instanceof Exception) { + Exception ex = ((Exception) cause); + return ex.getClass().getCanonicalName() + " : " + ex.getMessage(); + } else { + return cause.toString(); + } + } + @Override protected Element testableElement(Testable t) { Element result = doc.createElement("test"); if (t instanceof StandaloneTestable) { + StandaloneTestable testable = (StandaloneTestable) t; if (t instanceof KeyGeneratorTestable) { result.setAttribute("type", "key-pair-generator"); result.appendChild(kgtElement((KeyGeneratorTestable) t)); @@ -118,7 +130,10 @@ public class XMLTestWriter extends BaseXMLTestWriter { result.setAttribute("type", "signature"); result.appendChild(sigElement((SignatureTestable) t)); } - result.appendChild(stageElement((StandaloneTestable) t)); + result.appendChild(stageElement(testable)); + Element exception = doc.createElement("exception"); + exception.setTextContent(causeObject(testable.getException()) + causeObject(testable.errorCause())); + result.appendChild(exception); } return result; } diff --git a/src/cz/crcs/ectester/standalone/output/YAMLTestWriter.java b/src/cz/crcs/ectester/standalone/output/YAMLTestWriter.java index 0926b98..433624a 100644 --- a/src/cz/crcs/ectester/standalone/output/YAMLTestWriter.java +++ b/src/cz/crcs/ectester/standalone/output/YAMLTestWriter.java @@ -16,6 +16,7 @@ import java.security.Key; import java.security.PrivateKey; import java.security.PublicKey; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; /** @@ -27,7 +28,7 @@ public class YAMLTestWriter extends BaseYAMLTestWriter { } private Map keyObject(Key key) { - Map kObject = new HashMap<>(); + Map kObject = new LinkedHashMap<>(); if (key == null) { return kObject; } @@ -38,7 +39,7 @@ public class YAMLTestWriter extends BaseYAMLTestWriter { } private Map kaObject(KeyAgreementTestable kat) { - Map katObject = new HashMap<>(); + Map katObject = new LinkedHashMap<>(); katObject.put("algo", kat.getKa().getAlgorithm()); katObject.put("secret", ByteUtil.bytesToHex(kat.getSecret())); @@ -51,10 +52,10 @@ public class YAMLTestWriter extends BaseYAMLTestWriter { } private Map kgtObject(KeyGeneratorTestable kgt) { - Map kgtObject = new HashMap<>(); + Map kgtObject = new LinkedHashMap<>(); kgtObject.put("algo", kgt.getKpg().getAlgorithm()); - Map keypair = new HashMap<>(); + Map keypair = new LinkedHashMap<>(); if (kgt.getKeyPair() != null) { PublicKey pkey = kgt.getKeyPair().getPublic(); Map pubObject = keyObject(pkey); @@ -70,17 +71,29 @@ public class YAMLTestWriter extends BaseYAMLTestWriter { } private Map sigObject(SignatureTestable sig) { - Map sigObject = new HashMap<>(); + Map sigObject = new LinkedHashMap<>(); sigObject.put("algo", sig.getSig().getAlgorithm()); sigObject.put("verified", sig.getVerified()); sigObject.put("raw", ByteUtil.bytesToHex(sig.getSignature())); return sigObject; } + private String causeObject(Object cause) { + if (cause == null) { + return ""; + } else if (cause instanceof Exception) { + Exception ex = ((Exception) cause); + return ex.getClass().getCanonicalName() + " : " + ex.getMessage(); + } else { + return cause.toString(); + } + } + @Override protected Map testableObject(Testable t) { - Map result = new HashMap<>(); + Map result = new LinkedHashMap<>(); if (t instanceof StandaloneTestable) { + StandaloneTestable testable = (StandaloneTestable) t; if (t instanceof KeyGeneratorTestable) { result.put("type", "key-pair-generator"); result.put("key-pair-generator", kgtObject((KeyGeneratorTestable) t)); @@ -91,7 +104,8 @@ public class YAMLTestWriter extends BaseYAMLTestWriter { result.put("type", "signature"); result.put("signature", sigObject((SignatureTestable) t)); } - result.put("stage", ((StandaloneTestable)t).getStage().name()); + result.put("stage", testable.getStage().name()); + result.put("exception", causeObject(testable.getException()) + causeObject(testable.errorCause())); } return result; } @@ -100,7 +114,7 @@ public class YAMLTestWriter extends BaseYAMLTestWriter { protected Map deviceObject(TestSuite suite) { if (suite instanceof StandaloneTestSuite) { StandaloneTestSuite standaloneSuite = (StandaloneTestSuite) suite; - Map result = new HashMap<>(); + Map result = new LinkedHashMap<>(); result.put("type", "library"); result.put("ectester", ECTesterStandalone.VERSION); result.put("name", standaloneSuite.getLibrary().name()); diff --git a/src/cz/crcs/ectester/standalone/test/base/KeyAgreementTestable.java b/src/cz/crcs/ectester/standalone/test/base/KeyAgreementTestable.java index ffcfc67..1447373 100644 --- a/src/cz/crcs/ectester/standalone/test/base/KeyAgreementTestable.java +++ b/src/cz/crcs/ectester/standalone/test/base/KeyAgreementTestable.java @@ -87,8 +87,7 @@ public class KeyAgreementTestable extends StandaloneTestable> extends BaseTestable { protected T stage; + protected Exception exception; public T getStage() { return stage; } + + public Exception getException() { + return exception; + } + + protected void failOnException(Exception ex) { + ok = false; + hasRun = true; + exception = ex; + } } -- cgit v1.2.3-70-g09d2