diff options
Diffstat (limited to 'src/util/test_json.c')
-rw-r--r-- | src/util/test_json.c | 146 |
1 files changed, 145 insertions, 1 deletions
diff --git a/src/util/test_json.c b/src/util/test_json.c index 9eb72fb8c..6d887f489 100644 --- a/src/util/test_json.c +++ b/src/util/test_json.c @@ -24,6 +24,142 @@ #include "taler_json_lib.h" +/** + * Test amount conversion from/to JSON. + * + * @return 0 on success + */ +static int +test_amount () +{ + json_t *j; + struct TALER_Amount a1; + struct TALER_Amount a2; + + GNUNET_assert (GNUNET_OK == + TALER_string_to_amount ("EUR:4.3", + &a1)); + j = TALER_json_from_amount (&a1); + GNUNET_assert (NULL != j); + GNUNET_assert (GNUNET_OK == + TALER_json_to_amount (j, + &a2)); + GNUNET_assert (0 == + TALER_amount_cmp (&a1, + &a2)); + json_decref (j); + return 0; +} + + +/** + * Test time conversion from/to JSON. + * + * @return 0 on success + */ +static int +test_time () +{ + json_t *j; + struct GNUNET_TIME_Absolute a1; + struct GNUNET_TIME_Absolute a2; + + a1 = GNUNET_TIME_absolute_get (); + a1.abs_value_us -= a1.abs_value_us % 1000000; /* round! */ + j = TALER_json_from_abs (a1); + GNUNET_assert (NULL != j); + GNUNET_assert (GNUNET_OK == + TALER_json_to_abs (j, + &a2)); + GNUNET_assert (a1.abs_value_us == + a2.abs_value_us); + json_decref (j); + + a1 = GNUNET_TIME_UNIT_FOREVER_ABS; + j = TALER_json_from_abs (a1); + GNUNET_assert (NULL != j); + GNUNET_assert (GNUNET_OK == + TALER_json_to_abs (j, + &a2)); + GNUNET_assert (a1.abs_value_us == + a2.abs_value_us); + json_decref (j); + return 0; +} + + +/** + * Test raw (binary) conversion from/to JSON. + * + * @return 0 on success + */ +static int +test_raw () +{ + char blob[256]; + char blob2[256]; + unsigned int i; + json_t *j; + + for (i=0;i<=256;i++) + { + memset (blob, i, i); + j = TALER_json_from_data (blob, i); + GNUNET_assert (NULL != j); + GNUNET_assert (GNUNET_OK == + TALER_json_to_data (j, + blob2, + i)); + GNUNET_assert (0 == + memcmp (blob, + blob2, + i)); + } + return 0; +} + + +/** + * Test rsa conversions from/to JSON. + * + * @return 0 on success + */ +static int +test_rsa () +{ + struct GNUNET_CRYPTO_rsa_PublicKey *pub; + struct GNUNET_CRYPTO_rsa_PublicKey *pub2; + struct GNUNET_CRYPTO_rsa_Signature *sig; + struct GNUNET_CRYPTO_rsa_Signature *sig2; + struct GNUNET_CRYPTO_rsa_PrivateKey *priv; + char msg[] = "Hello"; + json_t *jp; + json_t *js; + + priv = GNUNET_CRYPTO_rsa_private_key_create (1024); + pub = GNUNET_CRYPTO_rsa_private_key_get_public (priv); + sig = GNUNET_CRYPTO_rsa_sign (priv, + msg, + sizeof (msg)); + GNUNET_assert (NULL != (jp = TALER_json_from_rsa_public_key (pub))); + GNUNET_assert (NULL != (js = TALER_json_from_rsa_signature (sig))); + GNUNET_assert (NULL != (pub2 = TALER_json_to_rsa_public_key (jp))); + GNUNET_assert (NULL != (sig2 = TALER_json_to_rsa_signature (js))); + GNUNET_break (0 == + GNUNET_CRYPTO_rsa_signature_cmp (sig, + sig2)); + GNUNET_break (0 == + GNUNET_CRYPTO_rsa_public_key_cmp (pub, + pub2)); + GNUNET_CRYPTO_rsa_signature_free (sig); + GNUNET_CRYPTO_rsa_signature_free (sig2); + GNUNET_CRYPTO_rsa_private_key_free (priv); + GNUNET_CRYPTO_rsa_public_key_free (pub); + GNUNET_CRYPTO_rsa_public_key_free (pub2); + return 0; +} + + int main(int argc, const char *const argv[]) @@ -31,7 +167,15 @@ main(int argc, GNUNET_log_setup ("test-json", "WARNING", NULL); - /* FIXME: implement test... */ + if (0 != test_amount ()) + return 1; + if (0 != test_time ()) + return 1; + if (0 != test_raw ()) + return 1; + if (0 != test_rsa ()) + return 1; + /* FIXME: test EdDSA signature conversion... */ return 0; } |