use NULL value in load_path_suffix to NOT load any files
[oweals/gnunet.git] / src / peerstore / test_peerstore_api_iterate.c
1 /*
2      This file is part of GNUnet.
3      Copyright (C) 2013-2017 GNUnet e.V.
4
5      GNUnet is free software: you can redistribute it and/or modify it
6      under the terms of the GNU Affero General Public License as published
7      by the Free Software Foundation, either version 3 of the License,
8      or (at your option) any later version.
9
10      GNUnet is distributed in the hope that it will be useful, but
11      WITHOUT ANY WARRANTY; without even the implied warranty of
12      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13      Affero General Public License for more details.
14
15      You should have received a copy of the GNU Affero General Public License
16      along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
18      SPDX-License-Identifier: AGPL3.0-or-later
19  */
20 /**
21  * @file peerstore/test_peerstore_api_iterate.c
22  * @brief testcase for peerstore iteration operation
23  */
24 #include "platform.h"
25 #include "gnunet_util_lib.h"
26 #include "gnunet_testing_lib.h"
27 #include "gnunet_peerstore_service.h"
28
29 static int ok = 1;
30
31 static struct GNUNET_PEERSTORE_Handle *h;
32 static struct GNUNET_PEERSTORE_IterateContext *ic;
33
34 static char *ss = "test_peerstore_api_iterate";
35 static struct GNUNET_PeerIdentity p1;
36 static struct GNUNET_PeerIdentity p2;
37 static char *k1 = "test_peerstore_api_iterate_key1";
38 static char *k2 = "test_peerstore_api_iterate_key2";
39 static char *k3 = "test_peerstore_api_iterate_key3";
40 static char *val = "test_peerstore_api_iterate_val";
41 static int count = 0;
42
43
44 static void
45 iter3_cb (void *cls,
46           const struct GNUNET_PEERSTORE_Record *record,
47           const char *emsg)
48 {
49   if (NULL != emsg)
50   {
51     GNUNET_PEERSTORE_iterate_cancel (ic);
52     return;
53   }
54   if (NULL != record)
55   {
56     count++;
57     return;
58   }
59   GNUNET_assert (count == 3);
60   ok = 0;
61   GNUNET_PEERSTORE_disconnect (h, GNUNET_NO);
62   GNUNET_SCHEDULER_shutdown ();
63 }
64
65
66 static void
67 iter2_cb (void *cls,
68           const struct GNUNET_PEERSTORE_Record *record,
69           const char *emsg)
70 {
71   if (NULL != emsg)
72   {
73     GNUNET_PEERSTORE_iterate_cancel (ic);
74     return;
75   }
76   if (NULL != record)
77   {
78     count++;
79     return;
80   }
81   GNUNET_assert (count == 2);
82   count = 0;
83   ic = GNUNET_PEERSTORE_iterate (h,
84                                  ss,
85                                  NULL,
86                                  NULL,
87                                  &iter3_cb,
88                                  NULL);
89 }
90
91
92 static void
93 iter1_cb (void *cls,
94           const struct GNUNET_PEERSTORE_Record *record,
95           const char *emsg)
96 {
97   if (NULL != emsg)
98   {
99     GNUNET_PEERSTORE_iterate_cancel (ic);
100     return;
101   }
102   if (NULL != record)
103   {
104     count++;
105     return;
106   }
107   GNUNET_assert (count == 1);
108   count = 0;
109   ic = GNUNET_PEERSTORE_iterate (h,
110                                  ss,
111                                  &p1,
112                                  NULL,
113                                  &iter2_cb,
114                                  NULL);
115 }
116
117
118 static void
119 run (void *cls,
120      const struct GNUNET_CONFIGURATION_Handle *cfg,
121      struct GNUNET_TESTING_Peer *peer)
122 {
123   h = GNUNET_PEERSTORE_connect (cfg);
124   GNUNET_assert (NULL != h);
125   memset (&p1, 1, sizeof(p1));
126   memset (&p2, 2, sizeof(p2));
127   GNUNET_PEERSTORE_store (h,
128                           ss,
129                           &p1,
130                           k1,
131                           val,
132                           strlen (val) + 1,
133                           GNUNET_TIME_UNIT_FOREVER_ABS,
134                           GNUNET_PEERSTORE_STOREOPTION_REPLACE,
135                           NULL,
136                           NULL);
137   GNUNET_PEERSTORE_store (h,
138                           ss,
139                           &p1,
140                           k2,
141                           val,
142                           strlen (val) + 1,
143                           GNUNET_TIME_UNIT_FOREVER_ABS,
144                           GNUNET_PEERSTORE_STOREOPTION_REPLACE,
145                           NULL,
146                           NULL);
147   GNUNET_PEERSTORE_store (h,
148                           ss,
149                           &p2,
150                           k3,
151                           val,
152                           strlen (val) + 1,
153                           GNUNET_TIME_UNIT_FOREVER_ABS,
154                           GNUNET_PEERSTORE_STOREOPTION_REPLACE,
155                           NULL,
156                           NULL);
157   ic = GNUNET_PEERSTORE_iterate (h,
158                                  ss,
159                                  &p1,
160                                  k1,
161                                  &iter1_cb, NULL);
162 }
163
164
165 int
166 main (int argc, char *argv[])
167 {
168   if (0 !=
169       GNUNET_TESTING_service_run ("test-gnunet-peerstore", "peerstore",
170                                   "test_peerstore_api_data.conf", &run, NULL))
171     return 1;
172   return ok;
173 }
174
175
176 /* end of test_peerstore_api_iterate.c */