summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndre Heinecke <aheinecke@intevation.de>2018-11-14 15:15:21 +0100
committerAndre Heinecke <aheinecke@intevation.de>2018-11-14 15:15:21 +0100
commitdd4b80a5f640232bb44eb825ff5a74ec295fad10 (patch)
treebc0be5ea4e6064aecea3070841b3d1345bb42814
parent9a31fdcb11d04d47dfcc38a8409b84436c549108 (diff)
downloadgpgme-dd4b80a5f640232bb44eb825ff5a74ec295fad10.tar.gz
tests,json: Add the bulk of tests
* t-json.c (tests): Register new tests. * t-createkey.in.json, t-createkey.out.json, t-decrypt-verify.in.json, t-decrypt-verify.out.json, t-decrypt.in.json, t-decrypt.out.json, t-delete.in.json, t-delete.out.json, t-encrypt-sign.in.json, t-encrypt-sign.out.json, t-encrypt.in.json, t-encrypt.out.json, t-export-secret-info.in.json, t-export-secret-info.out.json, t-export.in.json, t-export.out.json, t-json.c, t-keylist-secret.in.json, t-keylist-secret.out.json, t-keylist.in.json, t-keylist.out.json, t-verify.in.json, t-verify.out.json, t-version.in.json, t-version.out.json: New. -- Except for help and getmore there is now a test for each command.
-rw-r--r--tests/json/t-createkey.in.json5
-rw-r--r--tests/json/t-createkey.out.json3
-rw-r--r--tests/json/t-decrypt-verify.in.json5
-rw-r--r--tests/json/t-decrypt-verify.out.json56
-rw-r--r--tests/json/t-decrypt.in.json5
-rw-r--r--tests/json/t-decrypt.out.json16
-rw-r--r--tests/json/t-delete.in.json4
-rw-r--r--tests/json/t-delete.out.json3
-rw-r--r--tests/json/t-encrypt-sign.in.json8
-rw-r--r--tests/json/t-encrypt-sign.out.json4
-rw-r--r--tests/json/t-encrypt.in.json8
-rw-r--r--tests/json/t-encrypt.out.json4
-rw-r--r--tests/json/t-export-secret-info.in.json6
-rw-r--r--tests/json/t-export-secret-info.out.json6
-rw-r--r--tests/json/t-export.in.json5
-rw-r--r--tests/json/t-export.out.json5
-rw-r--r--tests/json/t-json.c10
-rw-r--r--tests/json/t-keylist-secret.in.json5
-rw-r--r--tests/json/t-keylist-secret.out.json163
-rw-r--r--tests/json/t-keylist.in.json5
-rw-r--r--tests/json/t-keylist.out.json65
-rw-r--r--tests/json/t-verify.in.json5
-rw-r--r--tests/json/t-verify.out.json35
-rw-r--r--tests/json/t-version.in.json3
-rw-r--r--tests/json/t-version.out.json10
25 files changed, 443 insertions, 1 deletions
diff --git a/tests/json/t-createkey.in.json b/tests/json/t-createkey.in.json
new file mode 100644
index 00000000..95dc92ab
--- /dev/null
+++ b/tests/json/t-createkey.in.json
@@ -0,0 +1,5 @@
+{
+ "op": "createkey",
+ "userid": "foo@bar.baz",
+ "algo": "rsa1024"
+}
diff --git a/tests/json/t-createkey.out.json b/tests/json/t-createkey.out.json
new file mode 100644
index 00000000..eb88671c
--- /dev/null
+++ b/tests/json/t-createkey.out.json
@@ -0,0 +1,3 @@
+{
+ "fingerprint": "*"
+}
diff --git a/tests/json/t-decrypt-verify.in.json b/tests/json/t-decrypt-verify.in.json
new file mode 100644
index 00000000..c9071067
--- /dev/null
+++ b/tests/json/t-decrypt-verify.in.json
@@ -0,0 +1,5 @@
+{
+ "op": "decrypt",
+ "base64": true,
+ "data": "hQEOA2rm1+5GqHH4EAP+NCYW3vVuCLDTUYhBaKHNgp4fMq9TNACH2NiZyVSaYLe0VE+2LLurHN/XLwlP7xhl2XijBUe6Q7M+KyoPd9iNIgX9q914dPUN0Q3sJinSbujnFzsy0L2x6kgUJCK/XA7rp0VpmJGUWIQYAET8Xx6SaWd2XxIdIITUz2MqrTzWrgED/iOuRxuT4loNJ/DM2YrOZr0He25SxJskg0t1bik2nM+wHAbJrSa6BqPJYU4scnG6AH0RRxFV177ADjOcBLeutXw7DE+6YOExWZD2Fb0oax/ppDulMudrJnj6Wg5/EHbBLDF96Xd6vQX1rcHmrxImvaQNbavEKswlDZgoYwaV7PYPhQEOAwQHH7gHKHE0EAP/So0a3deCbXVSPkABRO3yZa6kHcVuO5+lTsunfxav1TwaMkBOiK6usRz2zt3rjozNrh3vXn3o2WpFKebwhIUF0q2qPw3OKIGq9jFT63t+DPjpbSorAevmVqXWdmaqDPJZ/QIY6NkBhprTdIGPSTFh66eggQLz+BBUVx2myM7AqgcD/3PnOGIiqINQzFkfa6lHiV/TZ8AaMNfvyx4FFG4Zi45ZnDwLCJZ+J7ATXzECauEDLzhjk8M9OP0PwFT1WsnWefKDSLzbO5hEnf8NYdY6i8f2MJKYcnpeI4PZA3OK9ovmAoJl31K+/vBJRP4kiJ4Weu7fzMi6Zz87tfHDEpbRR7N80qoBTlT7I044LG5OJKgQukb7HOv+c668i56UzZVgz+LCsFpjYEFTlrPVR5Me3PjSSb8M+tt9NUjenNnghJEcxeD902YJcqgRWPotouzx5fKDTay/LofFqckEWGlP5pnkeNfYIBIaSSrG/KcdQ0rPOAxKrZzIifYVwnJm/ISxU6uMpNfDJGOJppf4xqXgTKBdIsCljg5LlgNvGhNMYaXQkGQInzXvLSUbxLerWw=="
+}
diff --git a/tests/json/t-decrypt-verify.out.json b/tests/json/t-decrypt-verify.out.json
new file mode 100644
index 00000000..fc60327b
--- /dev/null
+++ b/tests/json/t-decrypt-verify.out.json
@@ -0,0 +1,56 @@
+{
+ "dec_info": {
+ "symkey_algo": "TWOFISH.CFB",
+ "wrong_key_usage": false,
+ "is_de_vs": false,
+ "is_mime": false,
+ "legacy_cipher_nomdc": false,
+ "recipients": [{
+ "keyid": "6AE6D7EE46A871F8",
+ "pubkey_algo_name": "ELG-E",
+ "status_string": "Success",
+ "status_code": 0
+ }, {
+ "keyid": "04071FB807287134",
+ "pubkey_algo_name": "ELG-E",
+ "status_string": "No secret key",
+ "status_code": 117440529
+ }]
+ },
+ "info": {
+ "is_mime": false,
+ "signatures": [{
+ "summary": {
+ "sigsum": [],
+ "valid": false,
+ "green": false,
+ "red": false,
+ "revoked": false,
+ "key-expired": false,
+ "sig-expired": false,
+ "key-missing": false,
+ "crl-missing": false,
+ "crl-too-old": false,
+ "bad-policy": false,
+ "sys-error": false
+ },
+ "wrong_key_usage": false,
+ "chain_model": false,
+ "is_de_vs": false,
+ "status_string": "Success",
+ "fingerprint": "A0FF4590BB6122EDEF6E3C542D727CC768697734",
+ "validity_string": "unknown",
+ "pubkey_algo_name": "DSA",
+ "hash_algo_name": "RIPEMD160",
+ "status_code": 0,
+ "timestamp": 1542200353,
+ "exp_timestamp": 0,
+ "pka_trust": 0,
+ "validity": 0,
+ "validity_reason": 0
+ }]
+ },
+ "type": "plaintext",
+ "base64": false,
+ "data": "Hello world"
+}
diff --git a/tests/json/t-decrypt.in.json b/tests/json/t-decrypt.in.json
new file mode 100644
index 00000000..52987d7f
--- /dev/null
+++ b/tests/json/t-decrypt.in.json
@@ -0,0 +1,5 @@
+{
+ "op": "decrypt",
+ "data": "hQEOA2rm1+5GqHH4EAQAhzzu7VYpE9vFVdqkAALRHSyz8698b8MES7j5ldzXGVnGSWmN0+YXGyWyeB5tnAXAvUiV10tzoiNaPXoNeOFrHQOWrDsQ1vYukdtblDc3FW/Ywf7aelcFIGh9qydmkPX/EPeULsbgdZp6sybGoPpEuxzb4CYeRjogB9VvPCRAPb4D/1hRdpoVgWI78JvaeI+xwrP71RuHggZEsM8FSYFBD8c5dY+iAHbPSBI6QSZMvMHCu8YVlV40rHFjjoKQ1ox9DHHyvaZkwAZbI/U7+CYZoPoXMAARjCCCW4TIB3VrM70QLjnLSVfWaCtTnYp2KWaRae0Ze7yPt/h1dYe4ofn/O3UH0kEBqJ99Srtrmr9UWdgikgrWCz5TAV27g2vsZubfMe8vC1QnqASazyBy74ibvrXrIvHnhHQvPCkZFRdbgYhV/+KQIQ==",
+ "base64": true
+}
diff --git a/tests/json/t-decrypt.out.json b/tests/json/t-decrypt.out.json
new file mode 100644
index 00000000..eb52dc8f
--- /dev/null
+++ b/tests/json/t-decrypt.out.json
@@ -0,0 +1,16 @@
+{
+ "dec_info": {
+ "wrong_key_usage": false,
+ "is_de_vs": false,
+ "is_mime": false,
+ "legacy_cipher_nomdc": false,
+ "recipients": [{
+ "pubkey_algo_name": "ELG-E",
+ "status_string": "Success",
+ "status_code": 0
+ }]
+ },
+ "type": "plaintext",
+ "base64": false,
+ "data": "Hello\n"
+}
diff --git a/tests/json/t-delete.in.json b/tests/json/t-delete.in.json
new file mode 100644
index 00000000..a1e7d3d7
--- /dev/null
+++ b/tests/json/t-delete.in.json
@@ -0,0 +1,4 @@
+{
+ "op": "delete",
+ "key": "E8143C489C8D41124DC40D0B47AF4B6961F04784"
+}
diff --git a/tests/json/t-delete.out.json b/tests/json/t-delete.out.json
new file mode 100644
index 00000000..3041e494
--- /dev/null
+++ b/tests/json/t-delete.out.json
@@ -0,0 +1,3 @@
+{
+ "success": true
+}
diff --git a/tests/json/t-encrypt-sign.in.json b/tests/json/t-encrypt-sign.in.json
new file mode 100644
index 00000000..45e1d0b4
--- /dev/null
+++ b/tests/json/t-encrypt-sign.in.json
@@ -0,0 +1,8 @@
+{
+ "op": "encrypt",
+ "keys": ["alpha@example.net", "victor@example.org"],
+ "signing_keys": ["A0FF4590BB6122EDEF6E3C542D727CC768697734"],
+ "data": "Hello world",
+ "armor": true,
+ "always-trust": true
+}
diff --git a/tests/json/t-encrypt-sign.out.json b/tests/json/t-encrypt-sign.out.json
new file mode 100644
index 00000000..875ad08b
--- /dev/null
+++ b/tests/json/t-encrypt-sign.out.json
@@ -0,0 +1,4 @@
+{
+ "type": "ciphertext",
+ "base64": false
+}
diff --git a/tests/json/t-encrypt.in.json b/tests/json/t-encrypt.in.json
new file mode 100644
index 00000000..35dc2c9a
--- /dev/null
+++ b/tests/json/t-encrypt.in.json
@@ -0,0 +1,8 @@
+{
+ "op": "encrypt",
+ "keys": ["bravo@example.net", "alpha@example.net"],
+ "data": "Hello world",
+ "file_name": "test.txt",
+ "armor": false,
+ "always-trust": true
+}
diff --git a/tests/json/t-encrypt.out.json b/tests/json/t-encrypt.out.json
new file mode 100644
index 00000000..6fc4158c
--- /dev/null
+++ b/tests/json/t-encrypt.out.json
@@ -0,0 +1,4 @@
+{
+ "type": "ciphertext",
+ "base64": true
+}
diff --git a/tests/json/t-export-secret-info.in.json b/tests/json/t-export-secret-info.in.json
new file mode 100644
index 00000000..d5c37f54
--- /dev/null
+++ b/tests/json/t-export-secret-info.in.json
@@ -0,0 +1,6 @@
+{
+ "op": "export",
+ "keys": "alpha@example.net",
+ "armor": true,
+ "with-sec-fprs":true
+}
diff --git a/tests/json/t-export-secret-info.out.json b/tests/json/t-export-secret-info.out.json
new file mode 100644
index 00000000..32ee6509
--- /dev/null
+++ b/tests/json/t-export-secret-info.out.json
@@ -0,0 +1,6 @@
+{
+ "type": "keys",
+ "base64": false,
+ "data": "-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nmQGiBDbjjp4RBAC2ZbFDX0wmJI8yLDYQdIiZeAuHLmfyHsqXaLGUMZtWiAvn/hNp\nctwahmzKm5oXinHUvUkLOQ0s8rOlu15nhw4azc30rTP1LsIkn5zORNnFdgYC6RKy\nhOeim/63+/yGtdnTm49lVfaCqwsEmBCEkXaeWDGq+ie1b89J89T6n/JquwCgoQkj\nVeVGG+B/SzJ6+yifdHWQVkcD/RXDyLXX4+WHGP2aet51XlKojWGwsZmc9LPPYhwU\n/RcUO7ce1QQb0XFlUVFBhY0JQpM/ty/kNi+aGWFzigbQ+HAWZkUvA8+VIAVneN+p\n+SHhGIyLTXKpAYTq46AwvllZ5Cpvf02Cp/+W1aVyA0qnBWMyeIxXmR9HOi6lxxn5\ncjajA/9VZufOXWqCXkBvz4Oy3Q5FbjQQ0/+ty8rDn8OTaiPi41FyUnEi6LO+qyBS\n09FjnZj++PkcRcXW99SNxmEJRY7MuNHt5wIvEH2jNEOJ9lszzZFBDbuwsjXHK35+\nlPbGEy69xCP26iEafysKKbRXJhE1C+tk8SnK+Gm62sivmK/5arQpQWxwaGEgVGVz\ndCAoZGVtbyBrZXkpIDxhbHBoYUBleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOOngML\nCgMDFQMCAxYCAQIXgAAKCRAtcnzHaGl3NDl4AKCBLmRplv/8ZfSqep5IjqEAuaXv\nWwCgl6NEzT+/WewPTGcwZY+pLkycLv2IVQQTEQIAFQUCNuOOngMLCgMDFQMCAxYC\nAQIXgAAKCRAtcnzHaGl3NDl4AJ4rouHB+LpCkNi5C59jHEa1kbANzACgmddtrNSj\n1yPyTCwUwRghPUomECS0EEFsaWNlIChkZW1vIGtleSmIVQQTEQIAFQUCNuO2qwML\nCgMDFQMCAxYCAQIXgAAKCRAtcnzHaGl3NCeMAJ9MeUVrago5Jc6PdwdeN5OMwby3\n7QCghW65cZTQlD1bBlIq/QM8bz9AN4G0J0FsZmEgVGVzdCAoZGVtbyBrZXkpIDxh\nbGZhQGV4YW1wbGUubmV0PohVBBMRAgAVBQI247hYAwsKAwMVAwIDFgIBAheAAAoJ\nEC1yfMdoaXc0t8IAoJPwa6j+Vm5Vi3Nvuo8JZri4PJ/DAJ9dqbmaJdB8FdJnHfGh\n1rXK3y/JcrkBDQQ2448PEAQAnI3XH1f0uyN9fZnw72zsHMw706g7EW29nD4UDQG4\nOzRZViSrUa5n39eI7QrfTO+1meVvs0y8F/PvFst5jH68rPLnGSrXz4sTl1T4cop1\nFBkquvCAKwPLy0lE7jjtCyItOSwIOo8xoTfY4JEEXmcqsbm+KHv9yYSF/YK4Cf7b\nIzcAAwcD/Rnl5jKxoucDA96pD2829TKsLFQSau+Xiy8bvOSSDdlyABsOkNBSaeKO\n3eAQEKgDM7dzjVNTnAlpQ0EQ8Y9Z8pxOWYEQYlaMrnRBC4DZ2IadzEhLlIOz5BVp\n/jfhrr8oVVBwKZXsrz9PZLz+e4Yn+siUUvlei9boD9L2ZgSOHakPiEYEGBECAAYF\nAjbjjw8ACgkQLXJ8x2hpdzQgqQCfcDXmD8uNVdKg/C9vqI3JSndqknsAnRxzVeHi\n/iJ73OCKtvFrHbV9Gogq\n=6f6v\n-----END PGP PUBLIC KEY BLOCK-----\n",
+ "sec-fprs": ["A0FF4590BB6122EDEF6E3C542D727CC768697734"]
+}
diff --git a/tests/json/t-export.in.json b/tests/json/t-export.in.json
new file mode 100644
index 00000000..831369e4
--- /dev/null
+++ b/tests/json/t-export.in.json
@@ -0,0 +1,5 @@
+{
+ "op": "export",
+ "keys": "victor@example.org",
+ "armor": true
+}
diff --git a/tests/json/t-export.out.json b/tests/json/t-export.out.json
new file mode 100644
index 00000000..104fa435
--- /dev/null
+++ b/tests/json/t-export.out.json
@@ -0,0 +1,5 @@
+{
+ "type": "keys",
+ "base64": false,
+ "data": "-----BEGIN PGP PUBLIC KEY BLOCK-----\n\nmQGiBDbjs5oRBACjAxqGzA6j190iiN/1vJvS5jYLQ1H3xxhzXdZ6ZxjPJkslX1ox\nFqBINhjzBJnV9/7b1FFe5089NiCcGUVZa2xD3Vu+niLTAGNTQeNy6Y0E6wEfvplQ\nLJbpVGOmuVeZyShHNCKjrsZFtS1mr7o19SUb5QWS3gZHabFTbmhibcFBXwCg36qG\nVAnGcZzvnUTGpRy3xjp+zuED/2qTJNpnPhicKSksVwb6EJFXH7mQSZlyblAnOAVF\nMx19GUijW4MWP5FUdcTd5KzIDgkenRLBrpCLIFVkQ4/baP/hOiCLOmCoRu3xnFyo\nRPM/Jn94Qy3Jo2wigwkhQU+zyOU5C85QBD9ctkbYp/0mu9bpxmYTchHwD1v3dXUX\nEVajA/9lnEz1GiI0bwKpm8VKXp0YYP5hea8Jh5fNVb1QW2QqGd+XNHnRGSqX5smG\nyrs+xoYxD8+jv1FhmGaSv+6+n+JBVK4TuWrQpZ0cgZL5jZnX27TOYXeY4d5YKgE+\n7ZO57TwCIfF/P6puflGm+t5GcFwj4kkfohMEaeNhm1S+xf29q7QrVmljdG9yIFRl\nc3QgKGRlbW8ga2V5KSA8dmljdG9yQGV4YW1wbGUub3JnPohVBBMRAgAVBQI247Oa\nAwsKAwMVAwIDFgIBAheAAAoJEEevS2lh8EeEzEkAoMA+KfY9bA8EdfvWwa8zUM1S\nMs5rAKDS+6X3HVuCaLtVxzXOob+DKbB7b7kBDQQ247O+EAQAh5FAgdvaTJL3jBGc\njYiiJosxeTWf3L/dUY99fZN8R39DSVoUKf9Rt/EsS5DywXVnKAeJiUTYw8lbMRVF\n70VhSDHpMC9KtbB0lk3CcAqULPiyirT5g9ywN24W7k0naWIJisttUh+Hqbm6gc5P\nz9Nfd5ll8x4Ehi3lKE6Nze3gUNMAAwUD/AtUN1hqwWTTphVZctHq3JaUEb9agmu/\nOcsf24/bq9i8R8FaMwBF4fI5qIimcqAM+2BZ6dvZEdqrVaZR9aHjzchcHmaiI7Zm\nW4gmk+LHFFWf9y7mG8YDKFBXkaBuJpxFb1FIfJpmaLzJmRa76dLqI3A7H2E8dFQa\n/MGsYCa4NmILiEUEGBECAAYFAjbjs74ACgkQR69LaWHwR4RT3QCgnMlRAiGtvL5l\nD4Gdo5F0KEP5zZEAlA6Ri9WmZ9Xiqw5R3Bsg+As8sJ4=\n=FRd4\n-----END PGP PUBLIC KEY BLOCK-----\n"
+}
diff --git a/tests/json/t-json.c b/tests/json/t-json.c
index f5b27939..1f45febd 100644
--- a/tests/json/t-json.c
+++ b/tests/json/t-json.c
@@ -36,7 +36,15 @@
#include "../../src/cJSON.h"
/* Register tests here */
-static const char*tests[] = { "t-keylist", "t-config", "t-keylist", NULL };
+static const char*tests[] = { "t-config", "t-version",
+ "t-keylist", "t-keylist-secret", "t-decrypt", "t-config-opt",
+ "t-encrypt", "t-encrypt-sign", "t-sign", "t-verify",
+ "t-decrypt-verify", "t-export", "t-createkey",
+ "t-export-secret-info",
+ /* For these two the order is important
+ * as t-import imports the deleted key from t-delete */
+ "t-delete", "t-import",
+ NULL };
static int verbose = 0;
diff --git a/tests/json/t-keylist-secret.in.json b/tests/json/t-keylist-secret.in.json
new file mode 100644
index 00000000..22292a78
--- /dev/null
+++ b/tests/json/t-keylist-secret.in.json
@@ -0,0 +1,5 @@
+{
+ "op": "keylist",
+ "keys": [ "bravo@example.net", "alpha@example.net" ],
+ "with-secret": true
+}
diff --git a/tests/json/t-keylist-secret.out.json b/tests/json/t-keylist-secret.out.json
new file mode 100644
index 00000000..5da20dbe
--- /dev/null
+++ b/tests/json/t-keylist-secret.out.json
@@ -0,0 +1,163 @@
+{
+ "keys": [{
+ "revoked": false,
+ "expired": false,
+ "disabled": false,
+ "invalid": false,
+ "can_encrypt": true,
+ "can_sign": true,
+ "can_certify": true,
+ "can_authenticate": true,
+ "secret": true,
+ "is_qualified": false,
+ "protocol": "OpenPGP",
+ "fingerprint": "A0FF4590BB6122EDEF6E3C542D727CC768697734",
+ "subkeys": [{
+ "revoked": false,
+ "expired": false,
+ "disabled": false,
+ "invalid": false,
+ "can_encrypt": false,
+ "can_sign": true,
+ "can_certify": true,
+ "can_authenticate": true,
+ "is_qualified": false,
+ "is_cardkey": false,
+ "is_de_vs": false,
+ "pubkey_algo_name": "DSA",
+ "pubkey_algo_string": "dsa1024",
+ "keyid": "2D727CC768697734",
+ "keygrip": "76F7E2B35832976B50A27A282D9B87E44577EB66",
+ "pubkey_algo": 17,
+ "length": 1024,
+ "timestamp": 920882846,
+ "expires": 0
+ }, {
+ "revoked": false,
+ "expired": false,
+ "disabled": false,
+ "invalid": false,
+ "can_encrypt": true,
+ "can_sign": false,
+ "can_certify": false,
+ "can_authenticate": false,
+ "is_qualified": false,
+ "is_cardkey": false,
+ "is_de_vs": false,
+ "pubkey_algo_name": "ELG-E",
+ "pubkey_algo_string": "elg1024",
+ "keyid": "6AE6D7EE46A871F8",
+ "keygrip": "A0747D5F9425E6664F4FFBEED20FBCA79FDED2BD",
+ "pubkey_algo": 16,
+ "length": 1024,
+ "timestamp": 920882959,
+ "expires": 0
+ }],
+ "userids": [{
+ "revoked": false,
+ "invalid": false,
+ "validity": "unknown",
+ "uid": "Alfa Test (demo key) <alfa@example.net>",
+ "name": "Alfa Test",
+ "email": "alfa@example.net",
+ "comment": "demo key",
+ "address": "alfa@example.net"
+ }, {
+ "revoked": false,
+ "invalid": false,
+ "validity": "unknown",
+ "uid": "Alpha Test (demo key) <alpha@example.net>",
+ "name": "Alpha Test",
+ "email": "alpha@example.net",
+ "comment": "demo key",
+ "address": "alpha@example.net"
+ }, {
+ "revoked": false,
+ "invalid": false,
+ "validity": "unknown",
+ "uid": "Alice (demo key)",
+ "name": "Alice",
+ "email": "",
+ "comment": "demo key",
+ "origin": 0,
+ "last_update": 0
+ }]
+ }, {
+ "revoked": false,
+ "expired": false,
+ "disabled": false,
+ "invalid": false,
+ "can_encrypt": true,
+ "can_sign": true,
+ "can_certify": true,
+ "can_authenticate": true,
+ "secret": true,
+ "is_qualified": false,
+ "protocol": "OpenPGP",
+ "fingerprint": "D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2",
+ "owner_trust": "unknown",
+ "origin": 0,
+ "last_update": 0,
+ "subkeys": [{
+ "revoked": false,
+ "expired": false,
+ "disabled": false,
+ "invalid": false,
+ "can_encrypt": false,
+ "can_sign": true,
+ "can_certify": true,
+ "can_authenticate": true,
+ "secret": false,
+ "is_qualified": false,
+ "is_cardkey": false,
+ "is_de_vs": false,
+ "pubkey_algo_name": "DSA",
+ "pubkey_algo_string": "dsa1024",
+ "keyid": "FE180B1DA9E3B0B2",
+ "keygrip": "6D62909991D2331E5F4F605BC4DD738F30E6D26B",
+ "pubkey_algo": 17,
+ "length": 1024,
+ "timestamp": 920888034,
+ "expires": 0
+ }, {
+ "revoked": false,
+ "expired": false,
+ "disabled": false,
+ "invalid": false,
+ "can_encrypt": true,
+ "can_sign": false,
+ "can_certify": false,
+ "can_authenticate": false,
+ "secret": false,
+ "is_qualified": false,
+ "is_cardkey": false,
+ "is_de_vs": false,
+ "pubkey_algo_name": "ELG-E",
+ "pubkey_algo_string": "elg1024",
+ "keyid": "5381EA4EE29BA37F",
+ "keygrip": "6BBF325FADDC1109AE36CD535CA77AB9CFADD1F2",
+ "pubkey_algo": 16,
+ "length": 1024,
+ "timestamp": 920888071,
+ "expires": 0
+ }],
+ "userids": [{
+ "revoked": false,
+ "invalid": false,
+ "validity": "unknown",
+ "uid": "Bob (demo key)",
+ "name": "Bob",
+ "email": "",
+ "comment": "demo key"
+ }, {
+ "revoked": false,
+ "invalid": false,
+ "validity": "unknown",
+ "uid": "Bravo Test (demo key) <bravo@example.net>",
+ "name": "Bravo Test",
+ "email": "bravo@example.net",
+ "comment": "demo key",
+ "address": "bravo@example.net"
+ }]
+ }]
+}
diff --git a/tests/json/t-keylist.in.json b/tests/json/t-keylist.in.json
new file mode 100644
index 00000000..65377090
--- /dev/null
+++ b/tests/json/t-keylist.in.json
@@ -0,0 +1,5 @@
+{
+ "op": "keylist",
+ "keys": [ "zulu@example.net" ],
+ "with-secret": false
+}
diff --git a/tests/json/t-keylist.out.json b/tests/json/t-keylist.out.json
new file mode 100644
index 00000000..eb858671
--- /dev/null
+++ b/tests/json/t-keylist.out.json
@@ -0,0 +1,65 @@
+{
+ "keys": [{
+ "revoked": false,
+ "expired": false,
+ "disabled": false,
+ "invalid": false,
+ "can_encrypt": true,
+ "can_sign": true,
+ "can_certify": true,
+ "can_authenticate": true,
+ "secret": false,
+ "is_qualified": false,
+ "protocol": "OpenPGP",
+ "fingerprint": "23FD347A419429BACCD5E72D6BC4778054ACD246",
+ "subkeys": [{
+ "revoked": false,
+ "expired": false,
+ "disabled": false,
+ "invalid": false,
+ "can_encrypt": false,
+ "can_sign": true,
+ "can_certify": true,
+ "can_authenticate": true,
+ "secret": false,
+ "is_qualified": false,
+ "is_cardkey": false,
+ "is_de_vs": false,
+ "pubkey_algo_name": "DSA",
+ "pubkey_algo_string": "dsa1024",
+ "pubkey_algo": 17,
+ "length": 1024,
+ "timestamp": 920892875,
+ "expires": 0
+ }, {
+ "revoked": false,
+ "expired": false,
+ "disabled": false,
+ "invalid": false,
+ "can_encrypt": true,
+ "can_sign": false,
+ "can_certify": false,
+ "can_authenticate": false,
+ "secret": false,
+ "is_qualified": false,
+ "is_cardkey": false,
+ "is_de_vs": false,
+ "pubkey_algo_name": "ELG-E",
+ "pubkey_algo_string": "elg1024",
+ "pubkey_algo": 16,
+ "length": 1024,
+ "timestamp": 920892914,
+ "expires": 0
+ }],
+ "userids": [{
+ "revoked": false,
+ "invalid": false,
+ "validity": "unknown",
+ "uid": "Zulu Test (demo key) <zulu@example.net>",
+ "name": "Zulu Test",
+ "email": "zulu@example.net",
+ "comment": "demo key",
+ "address": "zulu@example.net"
+ }]
+ }]
+}
diff --git a/tests/json/t-verify.in.json b/tests/json/t-verify.in.json
new file mode 100644
index 00000000..1aa16399
--- /dev/null
+++ b/tests/json/t-verify.in.json
@@ -0,0 +1,5 @@
+{
+ "op": "verify",
+ "data": "Hello world",
+ "signature": "-----BEGIN PGP SIGNATURE-----\n\niHAEABECADAWIQSg/0WQu2Ei7e9uPFQtcnzHaGl3NAUCW+we3RIcYWxwaGFAZXhh\nbXBsZS5uZXQACgkQLXJ8x2hpdzSwIgCfdfk+n6SsYwa9SYfBwr/o4FmWsa8Anj3V\n8p3ahr3rxNbK7cDbSk/p1zD0\n=oS5d\n-----END PGP SIGNATURE-----"
+}
diff --git a/tests/json/t-verify.out.json b/tests/json/t-verify.out.json
new file mode 100644
index 00000000..e7d7c52d
--- /dev/null
+++ b/tests/json/t-verify.out.json
@@ -0,0 +1,35 @@
+{
+ "info": {
+ "is_mime": false,
+ "signatures": [{
+ "summary": {
+ "sigsum": [],
+ "valid": false,
+ "green": false,
+ "red": false,
+ "revoked": false,
+ "key-expired": false,
+ "sig-expired": false,
+ "key-missing": false,
+ "crl-missing": false,
+ "crl-too-old": false,
+ "bad-policy": false,
+ "sys-error": false
+ },
+ "wrong_key_usage": false,
+ "chain_model": false,
+ "is_de_vs": false,
+ "status_string": "Success",
+ "fingerprint": "A0FF4590BB6122EDEF6E3C542D727CC768697734",
+ "validity_string": "unknown",
+ "pubkey_algo_name": "DSA",
+ "hash_algo_name": "SHA1",
+ "status_code": 0,
+ "timestamp": 1542201053,
+ "exp_timestamp": 0,
+ "pka_trust": 0,
+ "validity": 0,
+ "validity_reason": 0
+ }]
+ }
+}
diff --git a/tests/json/t-version.in.json b/tests/json/t-version.in.json
new file mode 100644
index 00000000..08c96e5f
--- /dev/null
+++ b/tests/json/t-version.in.json
@@ -0,0 +1,3 @@
+{
+ "op": "version"
+}
diff --git a/tests/json/t-version.out.json b/tests/json/t-version.out.json
new file mode 100644
index 00000000..1e418f35
--- /dev/null
+++ b/tests/json/t-version.out.json
@@ -0,0 +1,10 @@
+{
+ "info": [{
+ "protocol": "OpenPGP"
+ }, {
+ "protocol": "spawn",
+ "fname": "/nonexistent",
+ "version": "1.0.0",
+ "req_version": "1.0.0"
+ }]
+}