aboutsummaryrefslogtreecommitdiff
path: root/standalone/src/main/java/cz/crcs
diff options
context:
space:
mode:
authorJán Jančár2024-05-07 18:07:36 +0200
committerGitHub2024-05-07 18:07:36 +0200
commit6e78ead41007fef66c39fbd9469484cdac7c7ee6 (patch)
tree2a1a0a0fd6006fb99935310600a6c9e07ea91838 /standalone/src/main/java/cz/crcs
parent1b2386dbdb9fc7eb0863bdad15d3e6eca51946b2 (diff)
parent219fb8d3385604070dc2ee9cac5ee7c74bd34749 (diff)
downloadECTester-6e78ead41007fef66c39fbd9469484cdac7c7ee6.tar.gz
ECTester-6e78ead41007fef66c39fbd9469484cdac7c7ee6.tar.zst
ECTester-6e78ead41007fef66c39fbd9469484cdac7c7ee6.zip
Merge pull request #26 from crocs-muni/feat/signal-handlers
Handle signals and timeout
Diffstat (limited to 'standalone/src/main/java/cz/crcs')
-rw-r--r--standalone/src/main/java/cz/crcs/ectester/standalone/ECTesterStandalone.java18
-rw-r--r--standalone/src/main/java/cz/crcs/ectester/standalone/libs/ProviderECLibrary.java4
-rw-r--r--standalone/src/main/java/cz/crcs/ectester/standalone/libs/jni/SigInfo.java80
-rw-r--r--standalone/src/main/java/cz/crcs/ectester/standalone/libs/jni/SignalException.java18
-rw-r--r--standalone/src/main/java/cz/crcs/ectester/standalone/libs/jni/TimeoutException.java11
-rw-r--r--standalone/src/main/java/cz/crcs/ectester/standalone/output/TextTestWriter.java2
-rw-r--r--standalone/src/main/java/cz/crcs/ectester/standalone/output/XMLTestWriter.java2
-rw-r--r--standalone/src/main/java/cz/crcs/ectester/standalone/output/YAMLTestWriter.java2
8 files changed, 133 insertions, 4 deletions
diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/ECTesterStandalone.java b/standalone/src/main/java/cz/crcs/ectester/standalone/ECTesterStandalone.java
index ab7e45b..6ef1be7 100644
--- a/standalone/src/main/java/cz/crcs/ectester/standalone/ECTesterStandalone.java
+++ b/standalone/src/main/java/cz/crcs/ectester/standalone/ECTesterStandalone.java
@@ -36,6 +36,8 @@ import cz.crcs.ectester.standalone.consts.KeyAgreementIdent;
import cz.crcs.ectester.standalone.consts.KeyPairGeneratorIdent;
import cz.crcs.ectester.standalone.consts.SignatureIdent;
import cz.crcs.ectester.standalone.libs.*;
+import cz.crcs.ectester.standalone.libs.jni.SignalException;
+import cz.crcs.ectester.standalone.libs.jni.TimeoutException;
import cz.crcs.ectester.standalone.output.FileTestWriter;
import cz.crcs.ectester.standalone.test.suites.*;
import org.apache.commons.cli.*;
@@ -103,6 +105,11 @@ public class ECTesterStandalone {
if (!System.getProperty("os.name").startsWith("Windows")) {
FileUtil.writeNewer(LIB_RESOURCE_DIR + "lib_timing.so", reqs.resolve("lib_timing.so"));
System.load(reqs.resolve("lib_timing.so").toString());
+
+ FileUtil.writeNewer(LIB_RESOURCE_DIR + "lib_csignals.so", reqs.resolve("lib_csignals.so"));
+ System.load(reqs.resolve("lib_csignals.so").toString());
+ FileUtil.writeNewer(LIB_RESOURCE_DIR + "lib_cppsignals.so", reqs.resolve("lib_cppsignals.so"));
+ System.load(reqs.resolve("lib_cppsignals.so").toString());
}
List<ProviderECLibrary> libObjects = new LinkedList<>();
@@ -739,7 +746,16 @@ public class ECTesterStandalone {
int amount = Integer.parseInt(cli.getOptionValue("generate.amount", "1"));
for (int i = 0; i < amount || amount == 0; ++i) {
long elapsed = -System.nanoTime();
- KeyPair kp = kpg.genKeyPair();
+ KeyPair kp;
+ try {
+ kp = kpg.genKeyPair();
+ } catch (SignalException exc) {
+ System.err.println(exc.getSigInfo());
+ continue;
+ } catch (TimeoutException exc) {
+ System.err.println(exc);
+ continue;
+ }
elapsed += System.nanoTime();
if (!lib.getNativeTimingSupport().isEmpty()) {
elapsed = lib.getLastNativeTiming();
diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/ProviderECLibrary.java b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/ProviderECLibrary.java
index a9a49e9..d9d6749 100644
--- a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/ProviderECLibrary.java
+++ b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/ProviderECLibrary.java
@@ -104,6 +104,10 @@ public abstract class ProviderECLibrary implements ECLibrary {
return name;
}
+ public String fullName() {
+ return name() + " (" + provider.getName() + ")";
+ }
+
public Provider getProvider() {
return provider;
}
diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/jni/SigInfo.java b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/jni/SigInfo.java
new file mode 100644
index 0000000..3cb7bad
--- /dev/null
+++ b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/jni/SigInfo.java
@@ -0,0 +1,80 @@
+package cz.crcs.ectester.standalone.libs.jni;
+
+/**
+ * @author Jan Jancar johny@neuromancer.sk
+ */
+public class SigInfo {
+
+ private final int signo;
+ private final int code;
+ private final int errno;
+ private final int pid;
+ private final int uid;
+ private final long addr;
+ private final int status;
+ private final long band;
+ private final long sigval;
+
+ public SigInfo(int signo, int code, int errno, int pid, int uid, long addr, int status, long band, long sigval) {
+ this.signo = signo;
+ this.code = code;
+ this.errno = errno;
+ this.pid = pid;
+ this.uid = uid;
+ this.addr = addr;
+ this.status = status;
+ this.band = band;
+ this.sigval = sigval;
+ }
+
+ public int getSigno() {
+ return signo;
+ }
+
+ public int getCode() {
+ return code;
+ }
+
+ public int getErrno() {
+ return errno;
+ }
+
+ public int getPid() {
+ return pid;
+ }
+
+ public int getUid() {
+ return uid;
+ }
+
+ public long getAddr() {
+ return addr;
+ }
+
+ public int getStatus() {
+ return status;
+ }
+
+ public long getBand() {
+ return band;
+ }
+
+ public long getSigval() {
+ return sigval;
+ }
+
+ @Override
+ public String toString() {
+ return "SigInfo{" +
+ "signo=" + signo +
+ ", code=" + code +
+ ", errno=" + errno +
+ ", pid=" + pid +
+ ", uid=" + uid +
+ ", addr=" + addr +
+ ", status=" + status +
+ ", band=" + band +
+ ", sigval=" + sigval +
+ '}';
+ }
+}
diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/jni/SignalException.java b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/jni/SignalException.java
new file mode 100644
index 0000000..726286e
--- /dev/null
+++ b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/jni/SignalException.java
@@ -0,0 +1,18 @@
+package cz.crcs.ectester.standalone.libs.jni;
+
+/**
+ * @author Jan Jancar johny@neuromancer.sk
+ */
+public class SignalException extends RuntimeException {
+
+ private final SigInfo sigInfo;
+
+ public SignalException(SigInfo sigInfo) {
+ super("Signal caught.");
+ this.sigInfo = sigInfo;
+ }
+
+ public SigInfo getSigInfo() {
+ return sigInfo;
+ }
+}
diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/libs/jni/TimeoutException.java b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/jni/TimeoutException.java
new file mode 100644
index 0000000..c4084b9
--- /dev/null
+++ b/standalone/src/main/java/cz/crcs/ectester/standalone/libs/jni/TimeoutException.java
@@ -0,0 +1,11 @@
+package cz.crcs.ectester.standalone.libs.jni;
+
+/**
+ * @author Jan Jancar johny@neuromancer.sk
+ */
+public class TimeoutException extends RuntimeException {
+
+ public TimeoutException(String message) {
+ super(message);
+ }
+}
diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/output/TextTestWriter.java b/standalone/src/main/java/cz/crcs/ectester/standalone/output/TextTestWriter.java
index ba345e7..c53adb2 100644
--- a/standalone/src/main/java/cz/crcs/ectester/standalone/output/TextTestWriter.java
+++ b/standalone/src/main/java/cz/crcs/ectester/standalone/output/TextTestWriter.java
@@ -48,7 +48,7 @@ public class TextTestWriter extends BaseTextTestWriter {
StandaloneTestSuite standaloneSuite = (StandaloneTestSuite) suite;
StringBuilder sb = new StringBuilder();
sb.append("═══ ").append(Colors.underline("ECTester version:")).append(" ").append(ECTesterStandalone.VERSION).append(System.lineSeparator());
- sb.append("═══ ").append(Colors.underline("Library:")).append(" ").append(standaloneSuite.getLibrary().name()).append(System.lineSeparator());
+ sb.append("═══ ").append(Colors.underline("Library:")).append(" ").append(standaloneSuite.getLibrary().fullName()).append(System.lineSeparator());
return sb.toString();
}
return "";
diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/output/XMLTestWriter.java b/standalone/src/main/java/cz/crcs/ectester/standalone/output/XMLTestWriter.java
index 60751f5..2341fc7 100644
--- a/standalone/src/main/java/cz/crcs/ectester/standalone/output/XMLTestWriter.java
+++ b/standalone/src/main/java/cz/crcs/ectester/standalone/output/XMLTestWriter.java
@@ -147,7 +147,7 @@ public class XMLTestWriter extends BaseXMLTestWriter {
result.setAttribute("ectester", ECTesterStandalone.VERSION);
Element name = doc.createElement("name");
- name.setTextContent(standaloneSuite.getLibrary().name());
+ name.setTextContent(standaloneSuite.getLibrary().fullName());
result.appendChild(name);
return result;
}
diff --git a/standalone/src/main/java/cz/crcs/ectester/standalone/output/YAMLTestWriter.java b/standalone/src/main/java/cz/crcs/ectester/standalone/output/YAMLTestWriter.java
index 664fa18..66c5e38 100644
--- a/standalone/src/main/java/cz/crcs/ectester/standalone/output/YAMLTestWriter.java
+++ b/standalone/src/main/java/cz/crcs/ectester/standalone/output/YAMLTestWriter.java
@@ -116,7 +116,7 @@ public class YAMLTestWriter extends BaseYAMLTestWriter {
Map<String, Object> result = new LinkedHashMap<>();
result.put("type", "library");
result.put("ectester", ECTesterStandalone.VERSION);
- result.put("name", standaloneSuite.getLibrary().name());
+ result.put("name", standaloneSuite.getLibrary().fullName());
return result;
}
return null;