From f8a8dad6b6ff2d1dd28098372f203264b2caa060 Mon Sep 17 00:00:00 2001 From: Omar Tarabai Date: Thu, 5 Jun 2014 09:08:28 +0000 Subject: peerstore: additional test cases --- src/peerstore/Makefile.am | 19 +++- src/peerstore/gnunet-service-peerstore.c | 6 +- src/peerstore/test_peerstore_api_iterate.c | 168 +++++++++++++++++++++++++++++ src/peerstore/test_peerstore_api_store.c | 6 +- src/peerstore/test_peerstore_api_watch.c | 88 +++++++++++++++ 5 files changed, 281 insertions(+), 6 deletions(-) create mode 100644 src/peerstore/test_peerstore_api_iterate.c create mode 100644 src/peerstore/test_peerstore_api_watch.c diff --git a/src/peerstore/Makefile.am b/src/peerstore/Makefile.am index e65817569..5b3c918db 100644 --- a/src/peerstore/Makefile.am +++ b/src/peerstore/Makefile.am @@ -65,7 +65,9 @@ libgnunet_plugin_peerstore_sqlite_la_DEPENDENCIES = \ libgnunetpeerstore.la check_PROGRAMS = \ - test_peerstore_api_store + test_peerstore_api_store \ + test_peerstore_api_iterate \ + test_peerstore_api_watch if ENABLE_TEST_RUN AM_TESTS_ENVIRONMENT=export GNUNET_PREFIX=$${GNUNET_PREFIX:-@libdir@};export PATH=$${GNUNET_PREFIX:-@prefix@}/bin:$$PATH; @@ -77,5 +79,18 @@ test_peerstore_api_store_SOURCES = \ test_peerstore_api_store_LDADD = \ $(top_builddir)/src/peerstore/libgnunetpeerstore.la \ $(top_builddir)/src/testing/libgnunettesting.la \ - $(top_builddir)/src/util/libgnunetutil.la + $(top_builddir)/src/util/libgnunetutil.la + +test_peerstore_api_iterate_SOURCES = \ + test_peerstore_api_iterate.c +test_peerstore_api_iterate_LDADD = \ + $(top_builddir)/src/peerstore/libgnunetpeerstore.la \ + $(top_builddir)/src/testing/libgnunettesting.la \ + $(top_builddir)/src/util/libgnunetutil.la +test_peerstore_api_watch_SOURCES = \ + test_peerstore_api_watch.c +test_peerstore_api_watch_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 418204850..082ab38ac 100644 --- a/src/peerstore/gnunet-service-peerstore.c +++ b/src/peerstore/gnunet-service-peerstore.c @@ -202,7 +202,7 @@ void watch_notifier (struct GNUNET_PEERSTORE_Record *record) { struct GNUNET_HashCode keyhash; - GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Sending update to any watchers.\n"); + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Sending update to any watchers.\n"); PEERSTORE_hash_key(record->sub_system, record->peer, record->key, @@ -279,6 +279,10 @@ void handle_iterate (void *cls, GNUNET_SERVER_receive_done(client, GNUNET_SYSERR); return; } + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Iterate request: ss `%s', peer `%s', key `%s'\n", + record->sub_system, + (NULL == record->peer) ? "NULL" : GNUNET_i2s(record->peer), + (NULL == record->key) ? "NULL" : record->key); GNUNET_SERVER_notification_context_add(nc, client); if(GNUNET_OK == db->iterate_records(db->cls, record->sub_system, diff --git a/src/peerstore/test_peerstore_api_iterate.c b/src/peerstore/test_peerstore_api_iterate.c new file mode 100644 index 000000000..0655be25f --- /dev/null +++ b/src/peerstore/test_peerstore_api_iterate.c @@ -0,0 +1,168 @@ +/* + 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_api_iterate.c + * @brief testcase for peerstore iteration operation + */ +#include "platform.h" +#include "gnunet_util_lib.h" +#include "gnunet_testing_lib.h" +#include "gnunet_peerstore_service.h" + +static int ok = 1; + +struct GNUNET_PEERSTORE_Handle *h; + +char *ss = "test_peerstore_api_iterate"; +struct GNUNET_PeerIdentity p1; +struct GNUNET_PeerIdentity p2; +char *k1 = "test_peerstore_api_iterate_key1"; +char *k2 = "test_peerstore_api_iterate_key2"; +char *k3 = "test_peerstore_api_iterate_key3"; +char *val = "test_peerstore_api_iterate_val"; +int count = 0; + +static int +iter3_cb(void *cls, + struct GNUNET_PEERSTORE_Record *record, + char *emsg) +{ + if(NULL != emsg) + return GNUNET_NO; + if(NULL != record) + { + count++; + return GNUNET_YES; + } + GNUNET_assert(count == 3); + ok = 0; + GNUNET_PEERSTORE_disconnect(h); + GNUNET_SCHEDULER_shutdown(); + return GNUNET_YES; +} + +static int +iter2_cb(void *cls, + struct GNUNET_PEERSTORE_Record *record, + char *emsg) +{ + if(NULL != emsg) + return GNUNET_NO; + if(NULL != record) + { + count++; + return GNUNET_YES; + } + GNUNET_assert(count == 2); + count = 0; + GNUNET_PEERSTORE_iterate(h, + ss, + NULL, + NULL, + GNUNET_TIME_UNIT_FOREVER_REL, + iter3_cb, + NULL); + return GNUNET_YES; +} + +static int +iter1_cb(void *cls, + struct GNUNET_PEERSTORE_Record *record, + char *emsg) +{ + if(NULL != emsg) + return GNUNET_NO; + if(NULL != record) + { + count++; + return GNUNET_YES; + } + GNUNET_assert(count == 1); + count = 0; + GNUNET_PEERSTORE_iterate(h, + ss, + &p1, + NULL, + GNUNET_TIME_UNIT_FOREVER_REL, + iter2_cb, + NULL); + return GNUNET_YES; +} + +static void +run (void *cls, + const struct GNUNET_CONFIGURATION_Handle *cfg, + struct GNUNET_TESTING_Peer *peer) +{ + h = GNUNET_PEERSTORE_connect(cfg); + GNUNET_assert(NULL != h); + memset (&p1, 1, sizeof (p1)); + memset (&p2, 2, sizeof (p2)); + GNUNET_PEERSTORE_store(h, + ss, + &p1, + k1, + val, + strlen(val) + 1, + GNUNET_TIME_UNIT_FOREVER_ABS, + GNUNET_PEERSTORE_STOREOPTION_REPLACE, + NULL, + NULL); + GNUNET_PEERSTORE_store(h, + ss, + &p1, + k2, + val, + strlen(val) + 1, + GNUNET_TIME_UNIT_FOREVER_ABS, + GNUNET_PEERSTORE_STOREOPTION_REPLACE, + NULL, + NULL); + GNUNET_PEERSTORE_store(h, + ss, + &p2, + k3, + val, + strlen(val) + 1, + GNUNET_TIME_UNIT_FOREVER_ABS, + GNUNET_PEERSTORE_STOREOPTION_REPLACE, + NULL, + NULL); + GNUNET_PEERSTORE_iterate(h, + ss, + &p1, + k1, + GNUNET_TIME_UNIT_FOREVER_REL, + iter1_cb, + NULL); +} + +int +main (int argc, char *argv[]) +{ + if (0 != GNUNET_TESTING_service_run ("test-gnunet-peerstore", + "peerstore", + "test_peerstore_api_data.conf", + &run, NULL)) + return 1; + return ok; +} + +/* end of test_peerstore_api_iterate.c */ diff --git a/src/peerstore/test_peerstore_api_store.c b/src/peerstore/test_peerstore_api_store.c index d3579947b..8b3391d83 100644 --- a/src/peerstore/test_peerstore_api_store.c +++ b/src/peerstore/test_peerstore_api_store.c @@ -18,8 +18,8 @@ Boston, MA 02111-1307, USA. */ /** - * @file peerstore/test_peerstore_api.c - * @brief testcase for peerstore_api.c + * @file peerstore/test_peerstore_api_store.c + * @brief testcase for peerstore store operation */ #include "platform.h" #include "gnunet_util_lib.h" @@ -219,4 +219,4 @@ main (int argc, char *argv[]) return ok; } -/* end of test_peerstore_api.c */ +/* end of test_peerstore_api_store.c */ diff --git a/src/peerstore/test_peerstore_api_watch.c b/src/peerstore/test_peerstore_api_watch.c new file mode 100644 index 000000000..b8d0a0cce --- /dev/null +++ b/src/peerstore/test_peerstore_api_watch.c @@ -0,0 +1,88 @@ +/* + 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_api_watch.c + * @brief testcase for peerstore watch functionality + */ +#include "platform.h" +#include "gnunet_util_lib.h" +#include "gnunet_testing_lib.h" +#include "gnunet_peerstore_service.h" + +static int ok = 1; + +struct GNUNET_PEERSTORE_Handle *h; + +char *ss = "test_peerstore_api_watch"; +struct GNUNET_PeerIdentity p; +char *k = "test_peerstore_api_watch_key"; +char *val = "test_peerstore_api_watch_val"; + +static int +watch_cb(void *cls, + struct GNUNET_PEERSTORE_Record *record, + char *emsg) +{ + GNUNET_assert(NULL == emsg); + GNUNET_assert(0 == strcmp(val, (char *)record->value)); + ok = 0; + GNUNET_PEERSTORE_disconnect(h); + GNUNET_SCHEDULER_shutdown(); + return GNUNET_YES; +} + +static void +run (void *cls, + const struct GNUNET_CONFIGURATION_Handle *cfg, + struct GNUNET_TESTING_Peer *peer) +{ + h = GNUNET_PEERSTORE_connect(cfg); + GNUNET_assert(NULL != h); + memset (&p, 4, sizeof (p)); + GNUNET_PEERSTORE_watch(h, + ss, + &p, + k, + &watch_cb, + NULL); + GNUNET_PEERSTORE_store(h, + ss, + &p, + k, + val, + strlen(val) + 1, + GNUNET_TIME_UNIT_FOREVER_ABS, + GNUNET_PEERSTORE_STOREOPTION_REPLACE, + NULL, + NULL); +} + +int +main (int argc, char *argv[]) +{ + if (0 != GNUNET_TESTING_service_run ("test-gnunet-peerstore", + "peerstore", + "test_peerstore_api_data.conf", + &run, NULL)) + return 1; + return ok; +} + +/* end of test_peerstore_api_watch.c */ -- cgit v1.2.3