uncrustify as demanded.
[oweals/gnunet.git] / src / fs / test_fs_test_lib.c
1 /*
2      This file is part of GNUnet.
3      Copyright (C) 2010, 2012 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 /**
22  * @file fs/test_fs_test_lib.c
23  * @brief test fs test library
24  * @author Christian Grothoff
25  */
26 #include "platform.h"
27 #include "fs_test_lib.h"
28
29 #define VERBOSE GNUNET_NO
30
31 /**
32  * File-size we use for testing.
33  */
34 #define FILESIZE (1024 * 1024 * 2)
35
36 /**
37  * How long until we give up on transmitting the message?
38  */
39 #define TIMEOUT GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 300)
40
41 #define NUM_DAEMONS 2
42
43 #define SEED 42
44
45 static struct GNUNET_TESTBED_Peer *the_peers[NUM_DAEMONS];
46
47 static struct GNUNET_TIME_Absolute start_time;
48
49 static int ret;
50
51
52 static void
53 do_stop(void *cls)
54 {
55   char *fn = cls;
56
57   if (0 ==
58       GNUNET_TIME_absolute_get_remaining(GNUNET_TIME_absolute_add(start_time,
59                                                                   TIMEOUT)).rel_value_us)
60     {
61       GNUNET_break(0);
62       ret = 1;
63     }
64   else
65     {
66       GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
67                  "Finished download, shutting down\n");
68     }
69   if (NULL != fn)
70     {
71       GNUNET_DISK_directory_remove(fn);
72       GNUNET_free(fn);
73     }
74   GNUNET_SCHEDULER_shutdown();
75 }
76
77
78 static void
79 do_download(void *cls,
80             const struct GNUNET_FS_Uri *uri,
81             const char *fn)
82 {
83   if (NULL == uri)
84     {
85       GNUNET_break(0);
86       GNUNET_SCHEDULER_shutdown();
87       ret = 1;
88       return;
89     }
90   GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
91              "Downloading %llu bytes\n",
92              (unsigned long long)FILESIZE);
93   start_time = GNUNET_TIME_absolute_get();
94   GNUNET_FS_TEST_download(the_peers[0],
95                           TIMEOUT, 1, SEED,
96                           uri,
97                           VERBOSE,
98                           &do_stop,
99                           (NULL == fn) ? NULL : GNUNET_strdup(fn));
100 }
101
102
103 static void
104 do_publish(void *cls,
105            struct GNUNET_TESTBED_Operation *op,
106            const char *emsg)
107 {
108   GNUNET_TESTBED_operation_done(op);
109   if (NULL != emsg)
110     {
111       GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Failed to connect peers: %s\n", emsg);
112       GNUNET_break(0);
113       ret = 1;
114       GNUNET_SCHEDULER_shutdown();
115       return;
116     }
117   GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Publishing %llu bytes\n",
118              (unsigned long long)FILESIZE);
119   GNUNET_FS_TEST_publish(the_peers[0], TIMEOUT, 1, GNUNET_NO, FILESIZE, SEED,
120                          VERBOSE, &do_download, NULL);
121 }
122
123
124 /**
125  * Actual main function for the test.
126  *
127  * @param cls closure
128  * @param h the run handle
129  * @param num_peers number of peers in 'peers'
130  * @param peers handle to peers run in the testbed
131  * @param links_succeeded the number of overlay link connection attempts that
132  *          succeeded
133  * @param links_failed the number of overlay link connection attempts that
134  *          failed
135  */
136 static void
137 run(void *cls,
138     struct GNUNET_TESTBED_RunHandle *h,
139     unsigned int num_peers,
140     struct GNUNET_TESTBED_Peer **peers,
141     unsigned int links_succeeded,
142     unsigned int links_failed)
143 {
144   unsigned int i;
145
146   GNUNET_assert(NUM_DAEMONS == num_peers);
147   for (i = 0; i < num_peers; i++)
148     the_peers[i] = peers[i];
149   GNUNET_TESTBED_overlay_connect(NULL,
150                                  &do_publish,
151                                  NULL,
152                                  peers[0],
153                                  peers[1]);
154 }
155
156
157 /**
158  * Main function that initializes the testbed.
159  *
160  * @param argc ignored
161  * @param argv ignored
162  * @return 0 on success
163  */
164 int
165 main(int argc, char *argv[])
166 {
167   GNUNET_DISK_directory_remove("/tmp/gnunet-test-fs-lib/");
168   (void)GNUNET_TESTBED_test_run("test_fs_test_lib",
169                                 "fs_test_lib_data.conf",
170                                 NUM_DAEMONS,
171                                 0, NULL, NULL,
172                                 &run, NULL);
173   GNUNET_DISK_directory_remove("/tmp/gnunet-test-fs-lib/");
174   return ret;
175 }
176
177 /* end of test_fs_test_lib.c */