diff options
author | Omar Tarabai <tarabai@devegypt.com> | 2014-06-05 12:05:13 +0000 |
---|---|---|
committer | Omar Tarabai <tarabai@devegypt.com> | 2014-06-05 12:05:13 +0000 |
commit | d33c98924608b9aa01fe5e77330a7d7f11849acb (patch) | |
tree | 4dea172fdc5fcec35db6d71d4457d4f811313d11 /src/peerstore | |
parent | ed152ee424088c09368b865afaa1117f0a207963 (diff) |
peerstore: stress test + minor fix
Diffstat (limited to 'src/peerstore')
-rw-r--r-- | src/peerstore/Makefile.am | 10 | ||||
-rw-r--r-- | src/peerstore/gnunet-service-peerstore.c | 1 | ||||
-rw-r--r-- | src/peerstore/peerstore_api.c | 6 | ||||
-rw-r--r-- | src/peerstore/peerstore_common.c | 2 | ||||
-rw-r--r-- | src/peerstore/test_peerstore_stress_store.c | 120 |
5 files changed, 132 insertions, 7 deletions
diff --git a/src/peerstore/Makefile.am b/src/peerstore/Makefile.am index 5b3c918db0..1defd0c72f 100644 --- a/src/peerstore/Makefile.am +++ b/src/peerstore/Makefile.am @@ -67,7 +67,8 @@ libgnunet_plugin_peerstore_sqlite_la_DEPENDENCIES = \ check_PROGRAMS = \ test_peerstore_api_store \ test_peerstore_api_iterate \ - test_peerstore_api_watch + test_peerstore_api_watch \ + test_peerstore_stress_store if ENABLE_TEST_RUN AM_TESTS_ENVIRONMENT=export GNUNET_PREFIX=$${GNUNET_PREFIX:-@libdir@};export PATH=$${GNUNET_PREFIX:-@prefix@}/bin:$$PATH; @@ -94,3 +95,10 @@ test_peerstore_api_watch_LDADD = \ $(top_builddir)/src/peerstore/libgnunetpeerstore.la \ $(top_builddir)/src/testing/libgnunettesting.la \ $(top_builddir)/src/util/libgnunetutil.la + +test_peerstore_stress_store_SOURCES = \ + test_peerstore_stress_store.c +test_peerstore_stress_store_LDADD = \ + $(top_builddir)/src/peerstore/libgnunetpeerstore.la \ + $(top_builddir)/src/testing/libgnunettesting.la \ + $(top_builddir)/src/util/libgnunetutil.la diff --git a/src/peerstore/gnunet-service-peerstore.c b/src/peerstore/gnunet-service-peerstore.c index 082ab38ac3..c620bd57ba 100644 --- a/src/peerstore/gnunet-service-peerstore.c +++ b/src/peerstore/gnunet-service-peerstore.c @@ -202,7 +202,6 @@ void watch_notifier (struct GNUNET_PEERSTORE_Record *record) { struct GNUNET_HashCode keyhash; - GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Sending update to any watchers.\n"); PEERSTORE_hash_key(record->sub_system, record->peer, record->key, diff --git a/src/peerstore/peerstore_api.c b/src/peerstore/peerstore_api.c index 0143c58cc8..ea8579517d 100644 --- a/src/peerstore/peerstore_api.c +++ b/src/peerstore/peerstore_api.c @@ -387,8 +387,6 @@ void store_request_sent (void *cls) void GNUNET_PEERSTORE_store_cancel (struct GNUNET_PEERSTORE_StoreContext *sc) { - LOG(GNUNET_ERROR_TYPE_DEBUG, - "Canceling store request.\n"); if(NULL != sc->ev) { GNUNET_MQ_send_cancel(sc->ev); @@ -548,7 +546,6 @@ void iterate_timeout (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) void GNUNET_PEERSTORE_iterate_cancel (struct GNUNET_PEERSTORE_IterateContext *ic) { - LOG(GNUNET_ERROR_TYPE_DEBUG, "Canceling iterate request.\n"); if(GNUNET_SCHEDULER_NO_TASK != ic->timeout_task) { GNUNET_SCHEDULER_cancel(ic->timeout_task); @@ -728,7 +725,8 @@ GNUNET_PEERSTORE_watch (struct GNUNET_PEERSTORE_Handle *h, GNUNET_CONTAINER_multihashmap_put(h->watches, &wc->keyhash, wc, GNUNET_CONTAINER_MULTIHASHMAPOPTION_REPLACE); LOG(GNUNET_ERROR_TYPE_DEBUG, - "Sending a watch request for sub system `%s'.\n", sub_system); + "Sending a watch request for ss `%s', peer `%s', key `%s'.\n", + sub_system, GNUNET_i2s(peer), key); GNUNET_MQ_notify_sent(ev, &watch_request_sent, wc); GNUNET_MQ_send(h->mq, ev); return wc; diff --git a/src/peerstore/peerstore_common.c b/src/peerstore/peerstore_common.c index 48c04010a8..384a68f394 100644 --- a/src/peerstore/peerstore_common.c +++ b/src/peerstore/peerstore_common.c @@ -44,7 +44,7 @@ PEERSTORE_hash_key(const char *sub_system, sssize = strlen(sub_system) + 1; psize = sizeof(struct GNUNET_PeerIdentity); - ksize = strlen(sub_system) + 1; + ksize = strlen(key) + 1; totalsize = sssize + psize + ksize; block = GNUNET_malloc(totalsize); blockptr = block; diff --git a/src/peerstore/test_peerstore_stress_store.c b/src/peerstore/test_peerstore_stress_store.c new file mode 100644 index 0000000000..523274c163 --- /dev/null +++ b/src/peerstore/test_peerstore_stress_store.c @@ -0,0 +1,120 @@ +/* + This file is part of GNUnet. + (C) + + 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., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ +/** + * @file peerstore/test_peerstore_stress_store.c + * @brief stress test for peerstore store operation + */ +#include "platform.h" +#include "gnunet_util_lib.h" +#include "gnunet_testing_lib.h" +#include "gnunet_peerstore_service.h" + +#define STORES 100 + +static int ok = 1; + +struct GNUNET_PEERSTORE_Handle *h; + +char *ss = "test_peerstore_stress"; +struct GNUNET_PeerIdentity p; +char *k = "test_peerstore_stress_key"; +char *v = "test_peerstore_stress_val"; + +int count = 0; + +void +disconnect() +{ + if(NULL != h) + GNUNET_PEERSTORE_disconnect(h); + GNUNET_SCHEDULER_shutdown(); +} + +void +store() +{ + GNUNET_PEERSTORE_store(h, + ss, + &p, + k, + v, + strlen(v) + 1, + GNUNET_TIME_UNIT_FOREVER_ABS, + (count == 0) ? GNUNET_PEERSTORE_STOREOPTION_REPLACE : GNUNET_PEERSTORE_STOREOPTION_MULTIPLE, + NULL, + NULL); + count++; +} + +static int +watch_cb(void *cls, + struct GNUNET_PEERSTORE_Record *record, + char *emsg) +{ + GNUNET_assert(NULL == emsg); + if(STORES == count) + { + ok = 0; + disconnect(); + } + else + store(); + return GNUNET_YES; +} + +static void +run (void *cls, + const struct GNUNET_CONFIGURATION_Handle *cfg, + struct GNUNET_TESTING_Peer *peer) +{ + memset (&p, 5, sizeof (p)); + h = GNUNET_PEERSTORE_connect(cfg); + GNUNET_assert(NULL != h); + GNUNET_PEERSTORE_watch(h, + ss, + &p, + k, + &watch_cb, + NULL); + store(); +} + +int +main (int argc, char *argv[]) +{ + struct GNUNET_TIME_Absolute start; + struct GNUNET_TIME_Absolute end; + struct GNUNET_TIME_Relative diff; + + start = GNUNET_TIME_absolute_get(); + if (0 != GNUNET_TESTING_service_run ("test-gnunet-peerstore", + "peerstore", + "test_peerstore_api_data.conf", + &run, NULL)) + return 1; + end = GNUNET_TIME_absolute_get(); + diff = GNUNET_TIME_absolute_get_difference(start, end); + printf("Stored and retrieved %d records in %s (%s).\n", + STORES, GNUNET_STRINGS_relative_time_to_string(diff, GNUNET_YES), + GNUNET_STRINGS_relative_time_to_string(diff, GNUNET_NO)); + return ok; +} + +/* end of test_peerstore_stress.c */ |