diff options
-rw-r--r-- | src/gnsrecord/.gitignore | 1 | ||||
-rw-r--r-- | src/gnsrecord/Makefile.am | 10 | ||||
-rw-r--r-- | src/gnsrecord/perf_gnsrecord_crypto.c | 137 | ||||
-rw-r--r-- | src/gnsrecord/test_gnsrecord_crypto.c | 6 |
4 files changed, 150 insertions, 4 deletions
diff --git a/src/gnsrecord/.gitignore b/src/gnsrecord/.gitignore index 374abdb608..53d3bb22d1 100644 --- a/src/gnsrecord/.gitignore +++ b/src/gnsrecord/.gitignore @@ -2,3 +2,4 @@ test_gnsrecord_block_expiration test_gnsrecord_crypto test_gnsrecord_serialization zonefiles +perf_gnsrecord_crypto diff --git a/src/gnsrecord/Makefile.am b/src/gnsrecord/Makefile.am index 2fb427c690..c83aa33079 100644 --- a/src/gnsrecord/Makefile.am +++ b/src/gnsrecord/Makefile.am @@ -19,7 +19,8 @@ endif check_PROGRAMS = \ test_gnsrecord_crypto \ test_gnsrecord_serialization \ - test_gnsrecord_block_expiration + test_gnsrecord_block_expiration \ + perf_gnsrecord_crypto if ENABLE_TEST_RUN AM_TESTS_ENVIRONMENT=export GNUNET_PREFIX=$${GNUNET_PREFIX:-@libdir@};export PATH=$${GNUNET_PREFIX:-@prefix@}/bin:$$PATH;unset XDG_DATA_HOME;unset XDG_CONFIG_HOME; @@ -85,3 +86,10 @@ test_gnsrecord_crypto_LDADD = \ libgnunetgnsrecord.la \ $(top_builddir)/src/util/libgnunetutil.la + +perf_gnsrecord_crypto_SOURCES = \ + perf_gnsrecord_crypto.c +perf_gnsrecord_crypto_LDADD = \ + $(top_builddir)/src/testing/libgnunettesting.la \ + libgnunetgnsrecord.la \ + $(top_builddir)/src/util/libgnunetutil.la diff --git a/src/gnsrecord/perf_gnsrecord_crypto.c b/src/gnsrecord/perf_gnsrecord_crypto.c new file mode 100644 index 0000000000..ff97210062 --- /dev/null +++ b/src/gnsrecord/perf_gnsrecord_crypto.c @@ -0,0 +1,137 @@ +/* + This file is part of GNUnet. + Copyright (C) 2018 GNUnet e.V. + + GNUnet is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNUnet; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ +/** + * @file gnsrecord/test_gnsrecord_crypto.c + * @brief testcase for block creation, verification and decryption + */ +#include "platform.h" +#include "gnunet_util_lib.h" +#include "gnunet_gnsrecord_lib.h" + +#define ROUNDS 1000 + +#define RECORDS 5 + +#define TEST_RECORD_TYPE 1234 + +#define TEST_RECORD_DATALEN 123 + +#define TEST_RECORD_DATA 'a' + +#define TEST_REMOVE_RECORD_TYPE 4321 + +#define TEST_REMOVE_RECORD_DATALEN 255 + +#define TEST_REMOVE_RECORD_DATA 'b' + + +static struct GNUNET_GNSRECORD_Data * +create_record (int count) +{ + struct GNUNET_GNSRECORD_Data *rd; + + rd = GNUNET_new_array (count, + struct GNUNET_GNSRECORD_Data); + for (unsigned int c = 0; c < count; c++) + { + rd[c].expiration_time = GNUNET_TIME_absolute_get().abs_value_us + 1000000000; + rd[c].record_type = TEST_RECORD_TYPE; + rd[c].data_size = TEST_RECORD_DATALEN; + rd[c].data = GNUNET_malloc(TEST_RECORD_DATALEN); + memset ((char *) rd[c].data, TEST_RECORD_DATA, TEST_RECORD_DATALEN); + } + return rd; +} + + +static void +run (void *cls, + char *const *args, + const char *cfgfile, + const struct GNUNET_CONFIGURATION_Handle *cfg) +{ + struct GNUNET_GNSRECORD_Block *block; + struct GNUNET_HashCode query; + struct GNUNET_GNSRECORD_Data *s_rd; + const char *s_name; + struct GNUNET_TIME_Absolute start_time; + struct GNUNET_CRYPTO_EcdsaPrivateKey * privkey; + struct GNUNET_TIME_Absolute expire; + + (void) cls; + (void) args; + (void) cfgfile; + (void) cfg; + expire = GNUNET_TIME_absolute_get(); + privkey = GNUNET_CRYPTO_ecdsa_key_create (); + GNUNET_assert (NULL != privkey); + + /* test block creation */ + s_name = "DUMMY.dummy.gnunet"; + s_rd = create_record (RECORDS); + start_time = GNUNET_TIME_absolute_get (); + for (unsigned int i=0;i<ROUNDS;i++) + { + GNUNET_assert (NULL != (block = + GNUNET_GNSRECORD_block_create2 (privkey, + expire, + s_name, + s_rd, + RECORDS))); + GNUNET_GNSRECORD_query_from_private_key (privkey, + s_name, + &query); + GNUNET_free (block); + } + fprintf (stderr, + "Took %s to produce %u GNS blocks for the DHT\n", + GNUNET_STRINGS_relative_time_to_string (GNUNET_TIME_absolute_get_duration (start_time), + GNUNET_YES), + ROUNDS); + for (unsigned int i=0;i<RECORDS;i++) + GNUNET_free ((void *) s_rd[i].data); + GNUNET_free (s_rd); + GNUNET_free (privkey); +} + + +int +main (int argc, char *argv[]) +{ + static char *const argvx[] = { + "perf-gnsrecord-crypto", + NULL + }; + static struct GNUNET_GETOPT_CommandLineOption options[] = { + GNUNET_GETOPT_OPTION_END + }; + + if (GNUNET_OK != + GNUNET_PROGRAM_run ((sizeof (argvx) / sizeof (char *)) - 1, + argvx, + "perf-gnsrecord-crypto", + "nohelp", options, + &run, + NULL)) + return 1; + return 0; +} + +/* end of test_gnsrecord_crypto.c */ diff --git a/src/gnsrecord/test_gnsrecord_crypto.c b/src/gnsrecord/test_gnsrecord_crypto.c index 1df3f37300..9ba303e662 100644 --- a/src/gnsrecord/test_gnsrecord_crypto.c +++ b/src/gnsrecord/test_gnsrecord_crypto.c @@ -54,7 +54,7 @@ create_record (int count) { struct GNUNET_GNSRECORD_Data *rd; - rd = GNUNET_malloc (count * sizeof (struct GNUNET_GNSRECORD_Data)); + rd = GNUNET_new_array (count, struct GNUNET_GNSRECORD_Data); for (unsigned int c = 0; c < count; c++) { rd[c].expiration_time = GNUNET_TIME_absolute_get().abs_value_us + 1000000000; @@ -103,11 +103,10 @@ run (void *cls, struct GNUNET_CRYPTO_EcdsaPublicKey pubkey; struct GNUNET_HashCode query_pub; struct GNUNET_HashCode query_priv; + struct GNUNET_TIME_Absolute expire = GNUNET_TIME_absolute_get(); privkey = GNUNET_CRYPTO_ecdsa_key_create (); GNUNET_assert (NULL != privkey); - struct GNUNET_TIME_Absolute expire = GNUNET_TIME_absolute_get(); - /* get public key */ GNUNET_CRYPTO_ecdsa_key_get_public (privkey, &pubkey); @@ -142,6 +141,7 @@ run (void *cls, &rd_decrypt_cb, s_name)); GNUNET_free (block); + GNUNET_free (privkey); } |