summaryrefslogtreecommitdiff
path: root/src/fs/test_fs_search_with_and.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/fs/test_fs_search_with_and.c')
-rw-r--r--src/fs/test_fs_search_with_and.c285
1 files changed, 148 insertions, 137 deletions
diff --git a/src/fs/test_fs_search_with_and.c b/src/fs/test_fs_search_with_and.c
index f1072a4a1..e43b8e25a 100644
--- a/src/fs/test_fs_search_with_and.c
+++ b/src/fs/test_fs_search_with_and.c
@@ -11,12 +11,12 @@
11 WITHOUT ANY WARRANTY; without even the implied warranty of 11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details. 13 Affero General Public License for more details.
14 14
15 You should have received a copy of the GNU Affero General Public License 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/>. 16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17 17
18 SPDX-License-Identifier: AGPL3.0-or-later 18 SPDX-License-Identifier: AGPL3.0-or-later
19*/ 19 */
20/** 20/**
21 * @file fs/test_fs_search_with_and.c 21 * @file fs/test_fs_search_with_and.c
22 * @brief testcase for publishing multiple files and search with a and operator 22 * @brief testcase for publishing multiple files and search with a and operator
@@ -42,12 +42,12 @@
42/** 42/**
43 * How long until we give up on transmitting the message? 43 * How long until we give up on transmitting the message?
44 */ 44 */
45#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 60) 45#define TIMEOUT GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 60)
46 46
47/** 47/**
48 * How long should our test-content live? 48 * How long should our test-content live?
49 */ 49 */
50#define LIFETIME GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MINUTES, 15) 50#define LIFETIME GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_MINUTES, 15)
51 51
52 52
53static struct GNUNET_TIME_Absolute start; 53static struct GNUNET_TIME_Absolute start;
@@ -66,140 +66,150 @@ static int processed_files;
66 66
67 67
68static void 68static void
69abort_publish_task (void *cls) 69abort_publish_task(void *cls)
70{ 70{
71 if (NULL != publish) 71 if (NULL != publish)
72 { 72 {
73 GNUNET_FS_publish_stop (publish); 73 GNUNET_FS_publish_stop(publish);
74 publish = NULL; 74 publish = NULL;
75 } 75 }
76 if (NULL != timeout_task) 76 if (NULL != timeout_task)
77 { 77 {
78 GNUNET_SCHEDULER_cancel (timeout_task); 78 GNUNET_SCHEDULER_cancel(timeout_task);
79 timeout_task = NULL; 79 timeout_task = NULL;
80 } 80 }
81} 81}
82 82
83 83
84static void 84static void
85abort_error (void *cls) 85abort_error(void *cls)
86{ 86{
87 fprintf (stderr, 87 fprintf(stderr,
88 "Timeout\n"); 88 "Timeout\n");
89 timeout_task = NULL; 89 timeout_task = NULL;
90 if (NULL != search) 90 if (NULL != search)
91 { 91 {
92 GNUNET_FS_search_stop (search); 92 GNUNET_FS_search_stop(search);
93 search = NULL; 93 search = NULL;
94 } 94 }
95 if (NULL != publish) 95 if (NULL != publish)
96 { 96 {
97 GNUNET_FS_publish_stop (publish); 97 GNUNET_FS_publish_stop(publish);
98 publish = NULL; 98 publish = NULL;
99 } 99 }
100 err = 1; 100 err = 1;
101} 101}
102 102
103 103
104static void 104static void
105abort_search_task (void *cls) 105abort_search_task(void *cls)
106{ 106{
107 if (NULL != search) 107 if (NULL != search)
108 { 108 {
109 GNUNET_FS_search_stop (search); 109 GNUNET_FS_search_stop(search);
110 search = NULL; 110 search = NULL;
111 } 111 }
112} 112}
113 113
114 114
115static void * 115static void *
116progress_cb (void *cls, const struct GNUNET_FS_ProgressInfo *event) 116progress_cb(void *cls, const struct GNUNET_FS_ProgressInfo *event)
117{ 117{
118
119 struct GNUNET_FS_Uri *kuri; 118 struct GNUNET_FS_Uri *kuri;
120 119
121 switch (event->status) 120 switch (event->status)
122 { 121 {
123 case GNUNET_FS_STATUS_PUBLISH_PROGRESS: 122 case GNUNET_FS_STATUS_PUBLISH_PROGRESS:
124 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 123 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
125 "Publish is progressing (%llu/%llu at level %u off %llu)...\n", 124 "Publish is progressing (%llu/%llu at level %u off %llu)...\n",
126 (unsigned long long) event->value.publish.completed, 125 (unsigned long long)event->value.publish.completed,
127 (unsigned long long) event->value.publish.size, 126 (unsigned long long)event->value.publish.size,
128 event->value.publish.specifics.progress.depth, 127 event->value.publish.specifics.progress.depth,
129 (unsigned long long) event->value.publish.specifics. 128 (unsigned long long)event->value.publish.specifics.
130 progress.offset); 129 progress.offset);
131 break; 130 break;
132 case GNUNET_FS_STATUS_PUBLISH_PROGRESS_DIRECTORY: 131
133 break; 132 case GNUNET_FS_STATUS_PUBLISH_PROGRESS_DIRECTORY:
134 case GNUNET_FS_STATUS_PUBLISH_COMPLETED: 133 break;
135 processed_files++; 134
136 if(processed_files == NUM_FILES) 135 case GNUNET_FS_STATUS_PUBLISH_COMPLETED:
137 { 136 processed_files++;
138 char *emsg = NULL; 137 if (processed_files == NUM_FILES)
139 kuri = GNUNET_FS_uri_ksk_create ("+down_foo +down_bar", &emsg); 138 {
140 GNUNET_assert (kuri != NULL); 139 char *emsg = NULL;
141 140 kuri = GNUNET_FS_uri_ksk_create("+down_foo +down_bar", &emsg);
142 start = GNUNET_TIME_absolute_get (); 141 GNUNET_assert(kuri != NULL);
143 search = 142
144 GNUNET_FS_search_start (fs, kuri, 1, GNUNET_FS_SEARCH_OPTION_NONE, 143 start = GNUNET_TIME_absolute_get();
145 "search"); 144 search =
146 GNUNET_FS_uri_destroy (kuri); 145 GNUNET_FS_search_start(fs, kuri, 1, GNUNET_FS_SEARCH_OPTION_NONE,
147 GNUNET_assert (search != NULL); 146 "search");
148 } 147 GNUNET_FS_uri_destroy(kuri);
149 break; 148 GNUNET_assert(search != NULL);
150 case GNUNET_FS_STATUS_SEARCH_RESULT: 149 }
151 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 150 break;
152 "Search complete.\n"); 151
153 GNUNET_SCHEDULER_add_now (&abort_search_task, NULL); 152 case GNUNET_FS_STATUS_SEARCH_RESULT:
154 break; 153 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
155 case GNUNET_FS_STATUS_PUBLISH_ERROR: 154 "Search complete.\n");
156 fprintf (stderr, "Error publishing file: %s\n", 155 GNUNET_SCHEDULER_add_now(&abort_search_task, NULL);
157 event->value.publish.specifics.error.message); 156 break;
158 GNUNET_break (0); 157
159 GNUNET_SCHEDULER_add_now (&abort_publish_task, NULL); 158 case GNUNET_FS_STATUS_PUBLISH_ERROR:
160 break; 159 fprintf(stderr, "Error publishing file: %s\n",
161 case GNUNET_FS_STATUS_SEARCH_ERROR: 160 event->value.publish.specifics.error.message);
162 fprintf (stderr, "Error searching file: %s\n", 161 GNUNET_break(0);
163 event->value.search.specifics.error.message); 162 GNUNET_SCHEDULER_add_now(&abort_publish_task, NULL);
164 GNUNET_SCHEDULER_add_now (&abort_search_task, NULL); 163 break;
165 break; 164
166 case GNUNET_FS_STATUS_PUBLISH_START: 165 case GNUNET_FS_STATUS_SEARCH_ERROR:
167 GNUNET_assert (0 == strcmp ("publish-context", event->value.publish.cctx)); 166 fprintf(stderr, "Error searching file: %s\n",
168 GNUNET_assert (NULL == event->value.publish.pctx); 167 event->value.search.specifics.error.message);
169 GNUNET_assert (FILESIZE == event->value.publish.size); 168 GNUNET_SCHEDULER_add_now(&abort_search_task, NULL);
170 GNUNET_assert (0 == event->value.publish.completed); 169 break;
171 GNUNET_assert (1 == event->value.publish.anonymity); 170
172 break; 171 case GNUNET_FS_STATUS_PUBLISH_START:
173 case GNUNET_FS_STATUS_PUBLISH_STOPPED: 172 GNUNET_assert(0 == strcmp("publish-context", event->value.publish.cctx));
174 GNUNET_assert (publish == event->value.publish.pc); 173 GNUNET_assert(NULL == event->value.publish.pctx);
175 GNUNET_assert (FILESIZE == event->value.publish.size); 174 GNUNET_assert(FILESIZE == event->value.publish.size);
176 GNUNET_assert (1 == event->value.publish.anonymity); 175 GNUNET_assert(0 == event->value.publish.completed);
177 GNUNET_FS_stop (fs); 176 GNUNET_assert(1 == event->value.publish.anonymity);
178 fs = NULL; 177 break;
179 break; 178
180 case GNUNET_FS_STATUS_SEARCH_START: 179 case GNUNET_FS_STATUS_PUBLISH_STOPPED:
181 GNUNET_assert (search == NULL); 180 GNUNET_assert(publish == event->value.publish.pc);
182 GNUNET_assert (0 == strcmp ("search", event->value.search.cctx)); 181 GNUNET_assert(FILESIZE == event->value.publish.size);
183 GNUNET_assert (1 == event->value.search.anonymity); 182 GNUNET_assert(1 == event->value.publish.anonymity);
184 break; 183 GNUNET_FS_stop(fs);
185 case GNUNET_FS_STATUS_SEARCH_RESULT_STOPPED: 184 fs = NULL;
186 break; 185 break;
187 case GNUNET_FS_STATUS_SEARCH_STOPPED: 186
188 GNUNET_assert (search == event->value.search.sc); 187 case GNUNET_FS_STATUS_SEARCH_START:
189 GNUNET_SCHEDULER_add_now (&abort_publish_task, NULL); 188 GNUNET_assert(search == NULL);
190 break; 189 GNUNET_assert(0 == strcmp("search", event->value.search.cctx));
191 default: 190 GNUNET_assert(1 == event->value.search.anonymity);
192 fprintf (stderr, "Unexpected event: %d\n", event->status); 191 break;
193 break; 192
194 } 193 case GNUNET_FS_STATUS_SEARCH_RESULT_STOPPED:
194 break;
195
196 case GNUNET_FS_STATUS_SEARCH_STOPPED:
197 GNUNET_assert(search == event->value.search.sc);
198 GNUNET_SCHEDULER_add_now(&abort_publish_task, NULL);
199 break;
200
201 default:
202 fprintf(stderr, "Unexpected event: %d\n", event->status);
203 break;
204 }
195 return NULL; 205 return NULL;
196} 206}
197 207
198 208
199static void 209static void
200run (void *cls, 210run(void *cls,
201 const struct GNUNET_CONFIGURATION_Handle *cfg, 211 const struct GNUNET_CONFIGURATION_Handle *cfg,
202 struct GNUNET_TESTING_Peer *peer) 212 struct GNUNET_TESTING_Peer *peer)
203{ 213{
204 const char *keywords[] = { 214 const char *keywords[] = {
205 "down_foo", 215 "down_foo",
@@ -213,46 +223,47 @@ run (void *cls,
213 size_t i; 223 size_t i;
214 size_t j; 224 size_t j;
215 225
216 fs = GNUNET_FS_start (cfg, "test-fs-search", &progress_cb, NULL, 226 fs = GNUNET_FS_start(cfg, "test-fs-search", &progress_cb, NULL,
217 GNUNET_FS_FLAGS_NONE, GNUNET_FS_OPTIONS_END); 227 GNUNET_FS_FLAGS_NONE, GNUNET_FS_OPTIONS_END);
218 GNUNET_assert (NULL != fs); 228 GNUNET_assert(NULL != fs);
219 229
220 processed_files = 0; 230 processed_files = 0;
221 for(j = 0; j < NUM_FILES; j++){ 231 for (j = 0; j < NUM_FILES; j++)
222 buf = GNUNET_malloc (FILESIZE); 232 {
223 for (i = 0; i < FILESIZE; i++) 233 buf = GNUNET_malloc(FILESIZE);
224 buf[i] = GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK, 256); 234 for (i = 0; i < FILESIZE; i++)
225 meta = GNUNET_CONTAINER_meta_data_create (); 235 buf[i] = GNUNET_CRYPTO_random_u32(GNUNET_CRYPTO_QUALITY_WEAK, 256);
226 kuri = GNUNET_FS_uri_ksk_create_from_args (2, keywords); 236 meta = GNUNET_CONTAINER_meta_data_create();
227 bo.content_priority = 42; 237 kuri = GNUNET_FS_uri_ksk_create_from_args(2, keywords);
228 bo.anonymity_level = 1; 238 bo.content_priority = 42;
229 bo.replication_level = 0; 239 bo.anonymity_level = 1;
230 bo.expiration_time = GNUNET_TIME_relative_to_absolute (LIFETIME); 240 bo.replication_level = 0;
231 fi = GNUNET_FS_file_information_create_from_data (fs, "publish-context", 241 bo.expiration_time = GNUNET_TIME_relative_to_absolute(LIFETIME);
232 FILESIZE, buf, kuri, meta, 242 fi = GNUNET_FS_file_information_create_from_data(fs, "publish-context",
233 GNUNET_NO, &bo); 243 FILESIZE, buf, kuri, meta,
234 GNUNET_FS_uri_destroy (kuri); 244 GNUNET_NO, &bo);
235 GNUNET_CONTAINER_meta_data_destroy (meta); 245 GNUNET_FS_uri_destroy(kuri);
236 GNUNET_assert (NULL != fi); 246 GNUNET_CONTAINER_meta_data_destroy(meta);
237 start = GNUNET_TIME_absolute_get (); 247 GNUNET_assert(NULL != fi);
238 publish = 248 start = GNUNET_TIME_absolute_get();
239 GNUNET_FS_publish_start (fs, fi, NULL, NULL, NULL, 249 publish =
250 GNUNET_FS_publish_start(fs, fi, NULL, NULL, NULL,
240 GNUNET_FS_PUBLISH_OPTION_NONE); 251 GNUNET_FS_PUBLISH_OPTION_NONE);
241 GNUNET_assert (publish != NULL); 252 GNUNET_assert(publish != NULL);
242 } 253 }
243 254
244 255
245 timeout_task = GNUNET_SCHEDULER_add_delayed (LIFETIME, 256 timeout_task = GNUNET_SCHEDULER_add_delayed(LIFETIME,
246 &abort_error, NULL); 257 &abort_error, NULL);
247} 258}
248 259
249 260
250int 261int
251main (int argc, char *argv[]) 262main(int argc, char *argv[])
252{ 263{
253 if (0 != GNUNET_TESTING_peer_run ("test-fs-search-with-and", 264 if (0 != GNUNET_TESTING_peer_run("test-fs-search-with-and",
254 "test_fs_search_data.conf", 265 "test_fs_search_data.conf",
255 &run, NULL)) 266 &run, NULL))
256 return 1; 267 return 1;
257 return err; 268 return err;
258} 269}