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/test_peerstore_api_iterate.c | 168 +++++++++++++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 src/peerstore/test_peerstore_api_iterate.c (limited to 'src/peerstore/test_peerstore_api_iterate.c') 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 */ -- cgit v1.2.3