summaryrefslogtreecommitdiff
path: root/src/transport/test_quota_compliance.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/transport/test_quota_compliance.c')
-rw-r--r--src/transport/test_quota_compliance.c326
1 files changed, 163 insertions, 163 deletions
diff --git a/src/transport/test_quota_compliance.c b/src/transport/test_quota_compliance.c
index 2c6ce8e5f..092935944 100644
--- a/src/transport/test_quota_compliance.c
+++ b/src/transport/test_quota_compliance.c
@@ -16,7 +16,7 @@
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 transport/test_quota_compliance.c 21 * @file transport/test_quota_compliance.c
22 * @brief base test case for transport implementations 22 * @brief base test case for transport implementations
@@ -32,9 +32,9 @@
32/** 32/**
33 * Testcase timeout 33 * Testcase timeout
34 */ 34 */
35#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 480) 35#define TIMEOUT GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 480)
36 36
37#define DURATION GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 80) 37#define DURATION GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 80)
38 38
39 39
40static struct GNUNET_SCHEDULER_Task *measure_task; 40static struct GNUNET_SCHEDULER_Task *measure_task;
@@ -61,118 +61,117 @@ static struct GNUNET_TIME_Absolute start_time;
61 61
62 62
63static void 63static void
64report () 64report()
65{ 65{
66 unsigned long long delta; 66 unsigned long long delta;
67 unsigned long long datarate; 67 unsigned long long datarate;
68 68
69 delta = GNUNET_TIME_absolute_get_duration (start_time).rel_value_us; 69 delta = GNUNET_TIME_absolute_get_duration(start_time).rel_value_us;
70 if (0 == delta) 70 if (0 == delta)
71 delta = 1; 71 delta = 1;
72 datarate = (total_bytes_recv * 1000 * 1000) / delta; 72 datarate = (total_bytes_recv * 1000 * 1000) / delta;
73 73
74 fprintf (stderr, 74 fprintf(stderr,
75 "Throughput was %llu b/s\n", 75 "Throughput was %llu b/s\n",
76 datarate); 76 datarate);
77 ccc->global_ret = GNUNET_OK; 77 ccc->global_ret = GNUNET_OK;
78 if (datarate > 1.5 * quota_in[1]) 78 if (datarate > 1.5 * quota_in[1])
79 { 79 {
80 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 80 GNUNET_log(GNUNET_ERROR_TYPE_ERROR,
81 "Datarate of %llu b/s significantly higher than allowed inbound quota of %llu b/s\n", 81 "Datarate of %llu b/s significantly higher than allowed inbound quota of %llu b/s\n",
82 datarate, 82 datarate,
83 quota_in[1]); 83 quota_in[1]);
84 ccc->global_ret = GNUNET_SYSERR; 84 ccc->global_ret = GNUNET_SYSERR;
85 } 85 }
86 if (datarate > 1.5 * quota_out[0]) 86 if (datarate > 1.5 * quota_out[0])
87 { 87 {
88 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 88 GNUNET_log(GNUNET_ERROR_TYPE_ERROR,
89 "Datarate of %llu b/s significantly higher than allowed outbound quota of %llu b/s\n", 89 "Datarate of %llu b/s significantly higher than allowed outbound quota of %llu b/s\n",
90 datarate, 90 datarate,
91 quota_out[0]); 91 quota_out[0]);
92 ccc->global_ret = GNUNET_SYSERR; 92 ccc->global_ret = GNUNET_SYSERR;
93 } 93 }
94 if (GNUNET_OK == ccc->global_ret) 94 if (GNUNET_OK == ccc->global_ret)
95 { 95 {
96 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 96 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
97 "Datarate of %llu b/s complied to allowed outbound quota of %llu b/s and inbound quota of %llu b/s\n", 97 "Datarate of %llu b/s complied to allowed outbound quota of %llu b/s and inbound quota of %llu b/s\n",
98 datarate, 98 datarate,
99 quota_out[0], 99 quota_out[0],
100 quota_in[1]); 100 quota_in[1]);
101 } 101 }
102} 102}
103 103
104 104
105static void 105static void
106custom_shutdown (void *cls) 106custom_shutdown(void *cls)
107{ 107{
108 if (NULL != measure_task) 108 if (NULL != measure_task)
109 { 109 {
110 GNUNET_SCHEDULER_cancel (measure_task); 110 GNUNET_SCHEDULER_cancel(measure_task);
111 measure_task = NULL; 111 measure_task = NULL;
112 } 112 }
113 report (); 113 report();
114} 114}
115 115
116 116
117static size_t 117static size_t
118get_size (unsigned int iter) 118get_size(unsigned int iter)
119{ 119{
120 size_t ret; 120 size_t ret;
121 121
122 ret = (iter * iter * iter) % 60000; 122 ret = (iter * iter * iter) % 60000;
123 ret += sizeof (struct GNUNET_TRANSPORT_TESTING_TestMessage); 123 ret += sizeof(struct GNUNET_TRANSPORT_TESTING_TestMessage);
124 return ret; 124 return ret;
125} 125}
126 126
127 127
128static void 128static void
129notify_receive (void *cls, 129notify_receive(void *cls,
130 struct GNUNET_TRANSPORT_TESTING_PeerContext *receiver, 130 struct GNUNET_TRANSPORT_TESTING_PeerContext *receiver,
131 const struct GNUNET_PeerIdentity *sender, 131 const struct GNUNET_PeerIdentity *sender,
132 const struct GNUNET_TRANSPORT_TESTING_TestMessage *hdr) 132 const struct GNUNET_TRANSPORT_TESTING_TestMessage *hdr)
133{ 133{
134 134 if (GNUNET_TRANSPORT_TESTING_SIMPLE_MTYPE != ntohs(hdr->header.type))
135 if (GNUNET_TRANSPORT_TESTING_SIMPLE_MTYPE != ntohs (hdr->header.type))
136 return; 135 return;
137 total_bytes_recv += ntohs (hdr->header.size); 136 total_bytes_recv += ntohs(hdr->header.size);
138 137
139 { 138 {
140 char *ps = GNUNET_strdup (GNUNET_i2s (&receiver->id)); 139 char *ps = GNUNET_strdup(GNUNET_i2s(&receiver->id));
141 140
142 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 141 GNUNET_log(GNUNET_ERROR_TYPE_INFO,
143 "Peer %u (`%s') got message %u of size %u from peer (`%s')\n", 142 "Peer %u (`%s') got message %u of size %u from peer (`%s')\n",
144 receiver->no, 143 receiver->no,
145 ps, 144 ps,
146 ntohl (hdr->num), 145 ntohl(hdr->num),
147 ntohs (hdr->header.size), 146 ntohs(hdr->header.size),
148 GNUNET_i2s (sender)); 147 GNUNET_i2s(sender));
149 GNUNET_free (ps); 148 GNUNET_free(ps);
150 } 149 }
151} 150}
152 151
153 152
154static void 153static void
155measure (void *cls) 154measure(void *cls)
156{ 155{
157 static int counter; 156 static int counter;
158 157
159 measure_task = NULL; 158 measure_task = NULL;
160 counter++; 159 counter++;
161 if ((DURATION.rel_value_us / 1000 / 1000LL) < counter) 160 if ((DURATION.rel_value_us / 1000 / 1000LL) < counter)
162 { 161 {
163 fprintf (stderr, "%s", ".\n"); 162 fprintf(stderr, "%s", ".\n");
164 GNUNET_SCHEDULER_shutdown (); 163 GNUNET_SCHEDULER_shutdown();
165 return; 164 return;
166 } 165 }
167 fprintf (stderr, "%s", "."); 166 fprintf(stderr, "%s", ".");
168 measure_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, 167 measure_task = GNUNET_SCHEDULER_add_delayed(GNUNET_TIME_UNIT_SECONDS,
169 &measure, 168 &measure,
170 NULL); 169 NULL);
171} 170}
172 171
173 172
174static void 173static void
175start_task (void *cls) 174start_task(void *cls)
176{ 175{
177 static struct GNUNET_TRANSPORT_TESTING_SendClosure sc = { 176 static struct GNUNET_TRANSPORT_TESTING_SendClosure sc = {
178 .num_messages = TOTAL_MSGS, 177 .num_messages = TOTAL_MSGS,
@@ -180,71 +179,71 @@ start_task (void *cls)
180 }; 179 };
181 180
182 sc.ccc = ccc; 181 sc.ccc = ccc;
183 measure_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, 182 measure_task = GNUNET_SCHEDULER_add_delayed(GNUNET_TIME_UNIT_SECONDS,
184 &measure, 183 &measure,
185 NULL); 184 NULL);
186 start_time = GNUNET_TIME_absolute_get (); 185 start_time = GNUNET_TIME_absolute_get();
187 GNUNET_SCHEDULER_add_now (&GNUNET_TRANSPORT_TESTING_simple_send, 186 GNUNET_SCHEDULER_add_now(&GNUNET_TRANSPORT_TESTING_simple_send,
188 &sc); 187 &sc);
189} 188}
190 189
191 190
192static char * 191static char *
193generate_config (const char *cfg_file, 192generate_config(const char *cfg_file,
194 unsigned long long quota_in, 193 unsigned long long quota_in,
195 unsigned long long quota_out) 194 unsigned long long quota_out)
196{ 195{
197 char *in_name; 196 char *in_name;
198 char *out_name; 197 char *out_name;
199 char *fname = NULL; 198 char *fname = NULL;
200 struct GNUNET_CONFIGURATION_Handle *cfg = GNUNET_CONFIGURATION_create (); 199 struct GNUNET_CONFIGURATION_Handle *cfg = GNUNET_CONFIGURATION_create();
201 200
202 GNUNET_assert (GNUNET_OK == 201 GNUNET_assert(GNUNET_OK ==
203 GNUNET_CONFIGURATION_load (cfg, 202 GNUNET_CONFIGURATION_load(cfg,
204 cfg_file)); 203 cfg_file));
205 GNUNET_asprintf (&fname, 204 GNUNET_asprintf(&fname,
206 "q_in_%llu_q_out_%llu_%s", 205 "q_in_%llu_q_out_%llu_%s",
207 quota_in, 206 quota_in,
208 quota_out, 207 quota_out,
209 cfg_file); 208 cfg_file);
210 GNUNET_CONFIGURATION_set_value_string (cfg, 209 GNUNET_CONFIGURATION_set_value_string(cfg,
211 "PATHS", 210 "PATHS",
212 "DEFAULTCONFIG", 211 "DEFAULTCONFIG",
213 fname); 212 fname);
214 for (int c = 0; c < GNUNET_NT_COUNT; c++) 213 for (int c = 0; c < GNUNET_NT_COUNT; c++)
215 { 214 {
216 GNUNET_asprintf (&in_name, 215 GNUNET_asprintf(&in_name,
217 "%s_QUOTA_IN", 216 "%s_QUOTA_IN",
218 GNUNET_NT_to_string (c)); 217 GNUNET_NT_to_string(c));
219 GNUNET_asprintf (&out_name, 218 GNUNET_asprintf(&out_name,
220 "%s_QUOTA_OUT", 219 "%s_QUOTA_OUT",
221 GNUNET_NT_to_string (c)); 220 GNUNET_NT_to_string(c));
222 GNUNET_CONFIGURATION_set_value_number (cfg, 221 GNUNET_CONFIGURATION_set_value_number(cfg,
223 "ats", 222 "ats",
224 in_name, 223 in_name,
225 quota_in); 224 quota_in);
226 GNUNET_CONFIGURATION_set_value_number (cfg, 225 GNUNET_CONFIGURATION_set_value_number(cfg,
227 "ats", 226 "ats",
228 out_name, 227 out_name,
229 quota_out); 228 quota_out);
230 GNUNET_free (in_name); 229 GNUNET_free(in_name);
231 GNUNET_free (out_name); 230 GNUNET_free(out_name);
232 } 231 }
233 GNUNET_assert (GNUNET_OK == 232 GNUNET_assert(GNUNET_OK ==
234 GNUNET_CONFIGURATION_write (cfg, 233 GNUNET_CONFIGURATION_write(cfg,
235 fname)); 234 fname));
236 GNUNET_CONFIGURATION_destroy (cfg); 235 GNUNET_CONFIGURATION_destroy(cfg);
237 return fname; 236 return fname;
238} 237}
239 238
240 239
241static int 240static int
242check (void *cls, 241check(void *cls,
243 struct GNUNET_TRANSPORT_TESTING_Handle *tth_, 242 struct GNUNET_TRANSPORT_TESTING_Handle *tth_,
244 const char *test_plugin_, 243 const char *test_plugin_,
245 const char *test_name_, 244 const char *test_name_,
246 unsigned int num_peers, 245 unsigned int num_peers,
247 char *cfg_files[]) 246 char *cfg_files[])
248{ 247{
249 struct GNUNET_TRANSPORT_TESTING_ConnectCheckContext my_ccc = { 248 struct GNUNET_TRANSPORT_TESTING_ConnectCheckContext my_ccc = {
250 .connect_continuation = &start_task, 249 .connect_continuation = &start_task,
@@ -255,65 +254,66 @@ check (void *cls,
255 .shutdown_task = &custom_shutdown, 254 .shutdown_task = &custom_shutdown,
256 .timeout = TIMEOUT 255 .timeout = TIMEOUT
257 }; 256 };
257
258 ccc = &my_ccc; 258 ccc = &my_ccc;
259 259
260 if (NULL != strstr (test_name_, 260 if (NULL != strstr(test_name_,
261 "asymmetric")) 261 "asymmetric"))
262 { 262 {
263 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 263 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
264 "Running asymmetric test with sending peer unlimited, receiving peer (in/out): %llu/%llu b/s \n", 264 "Running asymmetric test with sending peer unlimited, receiving peer (in/out): %llu/%llu b/s \n",
265 quota_in[1], 265 quota_in[1],
266 quota_out[1]); 266 quota_out[1]);
267 quota_out[0] = 1024 * 1024 * 1024; 267 quota_out[0] = 1024 * 1024 * 1024;
268 quota_in[0] = 1024 * 1024 * 1024; 268 quota_in[0] = 1024 * 1024 * 1024;
269 } 269 }
270 else 270 else
271 { 271 {
272 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 272 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
273 "Running symmetric test with (in/out) %llu/%llu b/s \n", 273 "Running symmetric test with (in/out) %llu/%llu b/s \n",
274 quota_in[1], 274 quota_in[1],
275 quota_out[1]); 275 quota_out[1]);
276 } 276 }
277 for (unsigned int i=0;i<2;i++) 277 for (unsigned int i = 0; i < 2; i++)
278 { 278 {
279 gen_cfgs[i] = generate_config (cfg_files[i], 279 gen_cfgs[i] = generate_config(cfg_files[i],
280 quota_in[i], 280 quota_in[i],
281 quota_out[i]); 281 quota_out[i]);
282 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 282 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
283 "Generated config file `%s'\n", 283 "Generated config file `%s'\n",
284 gen_cfgs[i]); 284 gen_cfgs[i]);
285 } 285 }
286 286
287 return GNUNET_TRANSPORT_TESTING_connect_check (&my_ccc, 287 return GNUNET_TRANSPORT_TESTING_connect_check(&my_ccc,
288 tth_, 288 tth_,
289 test_plugin_, 289 test_plugin_,
290 test_name_, 290 test_name_,
291 num_peers, 291 num_peers,
292 gen_cfgs); 292 gen_cfgs);
293} 293}
294 294
295 295
296int 296int
297main (int argc, 297main(int argc,
298 char *argv[]) 298 char *argv[])
299{ 299{
300 if (GNUNET_OK != 300 if (GNUNET_OK !=
301 GNUNET_TRANSPORT_TESTING_main (2, 301 GNUNET_TRANSPORT_TESTING_main(2,
302 &check, 302 &check,
303 NULL)) 303 NULL))
304 {
305 GNUNET_break (0);
306 return 1;
307 }
308 for (unsigned int i=0;i<2;i++)
309 {
310 if ( (NULL != gen_cfgs[i]) &&
311 (GNUNET_YES == GNUNET_DISK_file_test (gen_cfgs[i])) )
312 { 304 {
313 GNUNET_DISK_directory_remove (gen_cfgs[i]); 305 GNUNET_break(0);
314 GNUNET_free (gen_cfgs[i]); 306 return 1;
307 }
308 for (unsigned int i = 0; i < 2; i++)
309 {
310 if ((NULL != gen_cfgs[i]) &&
311 (GNUNET_YES == GNUNET_DISK_file_test(gen_cfgs[i])))
312 {
313 GNUNET_DISK_directory_remove(gen_cfgs[i]);
314 GNUNET_free(gen_cfgs[i]);
315 }
315 } 316 }
316 }
317 return 0; 317 return 0;
318} 318}
319 319