+ unsigned long long delta;
+ unsigned long long throughput_out;
+ unsigned long long throughput_in;
+ unsigned long long max_quota_in;
+ unsigned long long max_quota_out;
+ unsigned long long quota_delta;
+ enum GNUNET_ErrorType kind = GNUNET_ERROR_TYPE_DEBUG;
+
+ measure_task = GNUNET_SCHEDULER_NO_TASK;
+ FPRINTF (stdout, "%s", "\n");
+ running = GNUNET_NO;
+
+ delta = GNUNET_TIME_absolute_get_duration (start_time).rel_value_us;
+
+ throughput_out = total_bytes_sent * 1000000LL / delta; /* convert to bytes/s */
+ throughput_in = total_bytes_recv * 1000000LL / delta; /* convert to bytes/s */
+
+ max_quota_in = GNUNET_MIN (current_quota_p1_in, current_quota_p2_in);
+ max_quota_out = GNUNET_MIN (current_quota_p1_out, current_quota_p2_out);
+ if (max_quota_out < max_quota_in)
+ quota_delta = max_quota_in / 3;
+ else
+ quota_delta = max_quota_out / 3;
+
+ if ((throughput_out > (max_quota_out + quota_delta)) ||
+ (throughput_in > (max_quota_in + quota_delta)))
+ ok = 1; /* fail */
+ else
+ ok = 0; /* pass */
+ GNUNET_STATISTICS_get (p1.stats, "core", "# discarded CORE_SEND requests",
+ GNUNET_TIME_UNIT_FOREVER_REL, NULL, &print_stat, &p1);
+
+ GNUNET_STATISTICS_get (p1.stats, "core",
+ "# discarded CORE_SEND request bytes",
+ GNUNET_TIME_UNIT_FOREVER_REL, NULL, &print_stat, &p1);
+ GNUNET_STATISTICS_get (p1.stats, "core",
+ "# discarded lower priority CORE_SEND requests",
+ GNUNET_TIME_UNIT_FOREVER_REL, NULL, &print_stat, NULL);
+ GNUNET_STATISTICS_get (p1.stats, "core",
+ "# discarded lower priority CORE_SEND request bytes",
+ GNUNET_TIME_UNIT_FOREVER_REL, NULL, &print_stat, &p1);
+ GNUNET_STATISTICS_get (p2.stats, "core", "# discarded CORE_SEND requests",
+ GNUNET_TIME_UNIT_FOREVER_REL, NULL, &print_stat, &p2);
+
+ GNUNET_STATISTICS_get (p2.stats, "core",
+ "# discarded CORE_SEND request bytes",
+ GNUNET_TIME_UNIT_FOREVER_REL, NULL, &print_stat, &p2);
+ GNUNET_STATISTICS_get (p2.stats, "core",
+ "# discarded lower priority CORE_SEND requests",
+ GNUNET_TIME_UNIT_FOREVER_REL, NULL, &print_stat, &p2);
+ GNUNET_STATISTICS_get (p2.stats, "core",
+ "# discarded lower priority CORE_SEND request bytes",
+ GNUNET_TIME_UNIT_FOREVER_REL, NULL, &print_stat, &p2);
+
+ if (ok != 0)
+ kind = GNUNET_ERROR_TYPE_ERROR;
+ switch (test)
+ {
+ case SYMMETRIC:
+ GNUNET_log (kind, "Core quota compliance test with symmetric quotas: %s\n",
+ (0 == ok) ? "PASSED" : "FAILED");
+ break;
+ case ASYMMETRIC_SEND_LIMITED:
+ GNUNET_log (kind,
+ "Core quota compliance test with limited sender quota: %s\n",
+ (0 == ok) ? "PASSED" : "FAILED");
+ break;
+ case ASYMMETRIC_RECV_LIMITED:
+ GNUNET_log (kind,
+ "Core quota compliance test with limited receiver quota: %s\n",
+ (0 == ok) ? "PASSED" : "FAILED");
+ break;
+ };
+ GNUNET_log (kind, "Peer 1 send rate: %llu b/s (%llu bytes in %llu ms)\n",
+ throughput_out, total_bytes_sent, delta);
+ GNUNET_log (kind, "Peer 1 send quota: %llu b/s\n", current_quota_p1_out);
+ GNUNET_log (kind, "Peer 2 receive rate: %llu b/s (%llu bytes in %llu ms)\n",
+ throughput_in, total_bytes_recv, delta);
+ GNUNET_log (kind, "Peer 2 receive quota: %llu b/s\n", current_quota_p2_in);
+/*
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Max. inbound quota allowed: %llu b/s\n",max_quota_in );
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Max. outbound quota allowed: %llu b/s\n",max_quota_out);
+*/
+ GNUNET_SCHEDULER_cancel (err_task);
+ err_task = GNUNET_SCHEDULER_add_now (&terminate_task, NULL);
+