From e2d3ca4d4eee401515f94382c160fd9a65230a3c Mon Sep 17 00:00:00 2001 From: Matthias Wachs Date: Tue, 20 May 2014 11:37:19 +0000 Subject: remove unreliability test - update reliabilitility test: this test only ensures that all messages are delivered and are not corrupted out of order delivery is not checked any longer --- src/transport/Makefile.am | 54 +- src/transport/template_cfg_peer1.conf | 2 +- src/transport/template_cfg_peer2.conf | 2 +- src/transport/test_transport_api_reliability.c | 403 ++++++++------ .../test_transport_api_reliability_udp_peer1.conf | 30 ++ .../test_transport_api_reliability_udp_peer2.conf | 30 ++ .../test_transport_api_reliability_unix_peer1.conf | 28 + .../test_transport_api_reliability_unix_peer2.conf | 28 + src/transport/test_transport_api_unreliability.c | 588 --------------------- ...test_transport_api_unreliability_udp_peer1.conf | 30 -- ...test_transport_api_unreliability_udp_peer2.conf | 30 -- ...est_transport_api_unreliability_unix_peer1.conf | 28 - ...est_transport_api_unreliability_unix_peer2.conf | 28 - 13 files changed, 383 insertions(+), 898 deletions(-) create mode 100644 src/transport/test_transport_api_reliability_udp_peer1.conf create mode 100644 src/transport/test_transport_api_reliability_udp_peer2.conf create mode 100644 src/transport/test_transport_api_reliability_unix_peer1.conf create mode 100644 src/transport/test_transport_api_reliability_unix_peer2.conf delete mode 100644 src/transport/test_transport_api_unreliability.c delete mode 100644 src/transport/test_transport_api_unreliability_udp_peer1.conf delete mode 100644 src/transport/test_transport_api_unreliability_udp_peer2.conf delete mode 100644 src/transport/test_transport_api_unreliability_unix_peer1.conf delete mode 100644 src/transport/test_transport_api_unreliability_unix_peer2.conf (limited to 'src/transport') diff --git a/src/transport/Makefile.am b/src/transport/Makefile.am index 842e7455f..ce05e6d55 100644 --- a/src/transport/Makefile.am +++ b/src/transport/Makefile.am @@ -55,7 +55,6 @@ if LINUX WLAN_API_TEST = test_transport_api_wlan WLAN_TIMEOUT_TEST = test_transport_api_timeout_wlan WLAN_REL_TEST = test_transport_api_reliability_wlan - WLAN_UREL_TEST = test_transport_api_unreliability_wlan WLAN_QUOTA_TEST = test_quota_compliance_wlan \ test_quota_compliance_wlan_asymmetric endif @@ -75,7 +74,6 @@ if HAVE_LIBBLUETOOTH BT_API_TEST = test_transport_api_bluetooth BT_TIMEOUT_TEST = test_transport_api_timeout_bluetooth BT_REL_TEST = test_transport_api_reliability_bluetooth - BT_UREL_TEST = test_transport_api_unreliability_bluetooth BT_QUOTA_TEST = test_quota_compliance_bluetooth \ test_quota_compliance_bluetooth_asymmetric endif @@ -100,7 +98,7 @@ UNIX_PLUGIN_LA = libgnunet_plugin_transport_unix.la UNIX_PLUGIN_TEST = test_transport_api_unix UNIX_TEST = test_plugin_unix UNIX_PLUGIN_TIMEOUT_TEST = test_transport_api_timeout_unix -UNIX_REL_TEST = test_transport_api_unreliability_unix +UNIX_REL_TEST = test_transport_api_reliability_unix UNIX_QUOTA_TEST = test_quota_compliance_unix \ test_quota_compliance_unix_asymmetric if LINUX @@ -430,8 +428,7 @@ check_PROGRAMS = \ test_transport_api_manipulation_cfg \ test_transport_api_reliability_tcp \ test_transport_api_reliability_tcp_nat \ - test_transport_api_unreliability_udp \ - test_transport_api_unreliability_constant_udp \ + test_transport_api_reliability_udp \ $(UNIX_REL_TEST) \ $(HTTP_REL_TEST) \ $(HTTPS_REL_TEST) \ @@ -498,8 +495,7 @@ TESTS = \ test_transport_api_manipulation_cfg \ test_transport_api_reliability_tcp \ test_transport_api_reliability_tcp_nat \ - test_transport_api_unreliability_udp \ - test_transport_api_unreliability_constant_udp \ + test_transport_api_reliability_udp \ $(UNIX_REL_TEST) \ $(HTTP_REL_TEST) \ $(HTTPS_REL_TEST) \ @@ -833,14 +829,6 @@ test_transport_api_reliability_tcp_nat_LDADD = \ $(top_builddir)/src/util/libgnunetutil.la \ $(top_builddir)/src/transport/libgnunettransporttesting.la -test_transport_api_reliability_wlan_SOURCES = \ - test_transport_api_reliability.c -test_transport_api_reliability_wlan_LDADD = \ - $(top_builddir)/src/transport/libgnunettransport.la \ - $(top_builddir)/src/hello/libgnunethello.la \ - $(top_builddir)/src/util/libgnunetutil.la \ - $(top_builddir)/src/transport/libgnunettransporttesting.la - test_transport_api_reliability_bluetooth_SOURCES = \ test_transport_api_reliability.c test_transport_api_reliability_bluetooth_LDADD = \ @@ -849,17 +837,9 @@ test_transport_api_reliability_bluetooth_LDADD = \ $(top_builddir)/src/util/libgnunetutil.la \ $(top_builddir)/src/transport/libgnunettransporttesting.la -test_transport_api_unreliability_wlan_SOURCES = \ - test_transport_api_unreliability.c -test_transport_api_unreliability_wlan_LDADD = \ - $(top_builddir)/src/transport/libgnunettransport.la \ - $(top_builddir)/src/hello/libgnunethello.la \ - $(top_builddir)/src/util/libgnunetutil.la \ - $(top_builddir)/src/transport/libgnunettransporttesting.la - -test_transport_api_unreliability_bluetooth_SOURCES = \ - test_transport_api_unreliability.c -test_transport_api_unreliability_bluetooth_LDADD = \ +test_transport_api_reliability_wlan_SOURCES = \ + test_transport_api_reliability.c +test_transport_api_reliability_wlan_LDADD = \ $(top_builddir)/src/transport/libgnunettransport.la \ $(top_builddir)/src/hello/libgnunethello.la \ $(top_builddir)/src/util/libgnunetutil.la \ @@ -996,25 +976,17 @@ test_transport_api_reliability_https_LDADD = \ $(top_builddir)/src/util/libgnunetutil.la \ $(top_builddir)/src/transport/libgnunettransporttesting.la -test_transport_api_unreliability_unix_SOURCES = \ - test_transport_api_unreliability.c -test_transport_api_unreliability_unix_LDADD = \ - $(top_builddir)/src/transport/libgnunettransport.la \ - $(top_builddir)/src/hello/libgnunethello.la \ - $(top_builddir)/src/util/libgnunetutil.la \ - $(top_builddir)/src/transport/libgnunettransporttesting.la - -test_transport_api_unreliability_udp_SOURCES = \ - test_transport_api_unreliability.c -test_transport_api_unreliability_udp_LDADD = \ +test_transport_api_reliability_unix_SOURCES = \ + test_transport_api_reliability.c +test_transport_api_reliability_unix_LDADD = \ $(top_builddir)/src/transport/libgnunettransport.la \ $(top_builddir)/src/hello/libgnunethello.la \ $(top_builddir)/src/util/libgnunetutil.la \ $(top_builddir)/src/transport/libgnunettransporttesting.la -test_transport_api_unreliability_constant_udp_SOURCES = \ - test_transport_api_unreliability_constant.c -test_transport_api_unreliability_constant_udp_LDADD = \ +test_transport_api_reliability_udp_SOURCES = \ + test_transport_api_reliability.c +test_transport_api_reliability_udp_LDADD = \ $(top_builddir)/src/transport/libgnunettransport.la \ $(top_builddir)/src/hello/libgnunethello.la \ $(top_builddir)/src/util/libgnunetutil.la \ @@ -1249,8 +1221,6 @@ test_transport_api_timeout_http_peer1.conf\ test_transport_api_timeout_http_peer2.conf\ test_transport_api_timeout_https_peer1.conf\ test_transport_api_timeout_https_peer2.conf\ -test_transport_api_unreliability_constant_udp_peer1.conf\ -test_transport_api_unreliability_constant_udp_peer2.conf\ test_transport_blacklisting_cfg_peer1.conf \ test_transport_blacklisting_cfg_peer2.conf \ test_transport_blacklisting_cfg_blp_peer1_full.conf\ diff --git a/src/transport/template_cfg_peer1.conf b/src/transport/template_cfg_peer1.conf index 3042ce862..daeb63744 100644 --- a/src/transport/template_cfg_peer1.conf +++ b/src/transport/template_cfg_peer1.conf @@ -4,7 +4,7 @@ GNUNET_TEST_HOME = /tmp/test-transport/api-tcp-p1/ [nat] RETURN_LOCAL_ADDRESSES = YES -DISABLEV6 = NO +#DISABLEV6 = YES [transport-tcp] PORT = 12000 diff --git a/src/transport/template_cfg_peer2.conf b/src/transport/template_cfg_peer2.conf index b5ba77b76..68fb74a60 100644 --- a/src/transport/template_cfg_peer2.conf +++ b/src/transport/template_cfg_peer2.conf @@ -4,7 +4,7 @@ GNUNET_TEST_HOME = /tmp/test-transport/api-tcp-p2/ [nat] RETURN_LOCAL_ADDRESSES = YES -DISABLEV6 = NO +#DISABLEV6 = NO [transport-tcp] PORT = 12100 diff --git a/src/transport/test_transport_api_reliability.c b/src/transport/test_transport_api_reliability.c index d2a78d17f..07213722e 100644 --- a/src/transport/test_transport_api_reliability.c +++ b/src/transport/test_transport_api_reliability.c @@ -21,87 +21,141 @@ * @file transport/test_transport_api_reliability.c * @brief base test case for transport implementations * - * This test case serves as a base for tcp and http - * transport test cases to check that the transports - * achieve reliable message delivery. + * This test case serves ensures that messages are reliably sent between peers + * + * This test sends TOTAL_MSGS with message type MTYPE from peer 1 to peer 2 + * and ensures that all message were received. */ #include "platform.h" #include "gnunet_transport_service.h" #include "gauger.h" #include "transport-testing.h" + +/** + * Total number of messages to send + * + * Note that this value must not significantly exceed + * 'MAX_PENDING' in 'gnunet-service-transport_clients.c', otherwise + * messages may be dropped even for a reliable transport. + */ +#define TOTAL_MSGS (1024 * 3) + +/** + * Message type of test messages + */ +#define MTYPE 12345 + /** * Testcase timeout */ -#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 60) +#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 900) /** * How long until we give up on transmitting the message? */ -#define TIMEOUT_TRANSMIT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 10) +#define TIMEOUT_TRANSMIT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 60) + + +/** + * Struct for the test message + */ +GNUNET_NETWORK_STRUCT_BEGIN +struct TestMessage +{ + struct GNUNET_MessageHeader header; + uint32_t num; +}; +GNUNET_NETWORK_STRUCT_END -static char *test_source; +/** + * Name of the plugin to test + */ static char *test_plugin; +/** + * Name of the test + */ static char *test_name; +/** + * Return value of the test + */ static int ok; -static GNUNET_SCHEDULER_TaskIdentifier die_task; - +/** + * Context of peer 1 + */ struct PeerContext *p1; +/** + * Configuration file of peer 1 + */ +char *cfg_file_p1; + +/** + * Context of peer 2 + */ struct PeerContext *p2; -struct PeerContext *sender; +/** + * Configuration file of peer 1 + */ +char *cfg_file_p2; -struct PeerContext *receiver; +/** + * Timeout task + */ +static GNUNET_SCHEDULER_TaskIdentifier die_task; +/** + * Transport transmit handle used + */ struct GNUNET_TRANSPORT_TransmitHandle *th; -char *cfg_file_p1; - -char *cfg_file_p2; - +/** + * Transport testing handle + */ struct GNUNET_TRANSPORT_TESTING_handle *tth; -static GNUNET_TRANSPORT_TESTING_ConnectRequest cc; - - /* - * Testcase specific declarations + * Total amount of bytes sent */ +static unsigned long long total_bytes; /** - * Note that this value must not significantly exceed - * 'MAX_PENDING' in 'gnunet-service-transport.c', otherwise - * messages may be dropped even for a reliable transport. + * Time of start */ -#define TOTAL_MSGS (1024 * 2) - -#define MTYPE 12345 - -GNUNET_NETWORK_STRUCT_BEGIN - -struct TestMessage -{ - struct GNUNET_MessageHeader header; - uint32_t num; -}; -GNUNET_NETWORK_STRUCT_END +static struct GNUNET_TIME_Absolute start_time; +/** + * No. of message currently scheduled to be send + */ static int msg_scheduled; + +/** + * No. of last message sent + */ static int msg_sent; -static int msg_recv_expected; + +/** + * No. of last message received + */ static int msg_recv; -static int test_failed; static int test_connected; +static int test_sending; +static int test_send_timeout; -static unsigned long long total_bytes; -static struct GNUNET_TIME_Absolute start_time; +/** + * Bitmap storing which messages were received + */ + +static char bitmap[TOTAL_MSGS / 8]; + +static GNUNET_TRANSPORT_TESTING_ConnectRequest cc; /* * END Testcase specific declarations @@ -113,6 +167,8 @@ static struct GNUNET_TIME_Absolute start_time; #define OKPP do { ok++; } while (0) #endif +static int +get_bit (const char *map, unsigned int bit); static void end () @@ -121,15 +177,15 @@ end () unsigned long long rate; char *value_name; - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Stopping peers\n"); + /* Calculcate statistics */ delta = GNUNET_TIME_absolute_get_duration (start_time).rel_value_us; - rate = (1000LL * 1000LL * total_bytes) / (1024 * delta); + rate = (1000LL* 1000ll * total_bytes) / (1024 * delta); FPRINTF (stderr, "\nThroughput was %llu KiBytes/s\n", rate); - GNUNET_asprintf (&value_name, "reliable_%s", test_plugin); + GNUNET_asprintf (&value_name, "unreliable_%s", test_plugin); GAUGER ("TRANSPORT", value_name, (int) rate, "kb/s"); GNUNET_free (value_name); @@ -143,16 +199,31 @@ end () if (cc != NULL) GNUNET_TRANSPORT_TESTING_connect_peers_cancel (tth, cc); + cc = NULL; GNUNET_TRANSPORT_TESTING_stop_peer (tth, p1); GNUNET_TRANSPORT_TESTING_stop_peer (tth, p2); GNUNET_TRANSPORT_TESTING_done (tth); + + ok = 0; + + int i; + + for (i = 0; i < TOTAL_MSGS; i++) + { + if (get_bit (bitmap, i) == 0) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Did not receive message %d\n", i); + ok = -1; + } + } } static void end_badly () { + int i; die_task = GNUNET_SCHEDULER_NO_TASK; GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Fail! Stopping peers\n"); @@ -161,20 +232,34 @@ end_badly () else GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Peers got NOT connected\n"); + if (test_sending == GNUNET_NO) + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "Testcase did not send any messages before timeout\n"); + if (test_send_timeout == GNUNET_YES) + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "Test had timeout while waiting to send data\n"); + for (i = 0; i < TOTAL_MSGS; i++) + { + if (get_bit (bitmap, i) == 0) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Did not receive message %d\n", i); + ok = -1; + } + } + if (th != NULL) GNUNET_TRANSPORT_notify_transmit_ready_cancel (th); th = NULL; if (cc != NULL) GNUNET_TRANSPORT_TESTING_connect_peers_cancel (tth, cc); + cc = NULL; if (p1 != NULL) GNUNET_TRANSPORT_TESTING_stop_peer (tth, p1); if (p2 != NULL) GNUNET_TRANSPORT_TESTING_stop_peer (tth, p2); - GNUNET_TRANSPORT_TESTING_done (tth); - ok = GNUNET_SYSERR; } @@ -185,84 +270,126 @@ get_size (unsigned int iter) unsigned int ret; ret = (iter * iter * iter); + +#ifndef LINUX + /* FreeBSD/OSX etc. Unix DGRAMs do not work + * with large messages */ + if (0 == strcmp ("unix", test_plugin)) + return sizeof (struct TestMessage) + (ret % 1024); +#endif return sizeof (struct TestMessage) + (ret % 60000); } +/** + * Sets a bit active in the bitmap. + * + * @param bitIdx which bit to set + * @return GNUNET_SYSERR on error, GNUNET_OK on success + */ +static int +set_bit (unsigned int bitIdx) +{ + size_t arraySlot; + unsigned int targetBit; + + if (bitIdx >= sizeof (bitmap) * 8) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "tried to set bit %d of %d(!?!?)\n", + bitIdx, sizeof (bitmap) * 8); + return GNUNET_SYSERR; + } + arraySlot = bitIdx / 8; + targetBit = (1L << (bitIdx % 8)); + bitmap[arraySlot] |= targetBit; + return GNUNET_OK; +} + +/** + * Obtain a bit from bitmap. + * @param map the bitmap + * @param bit index from bitmap + * + * @return Bit \a bit from hashcode \a code + */ +static int +get_bit (const char *map, unsigned int bit) +{ + if (bit > TOTAL_MSGS) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "get bit %d of %d(!?!?)\n", bit, + sizeof (bitmap) * 8); + return 0; + } + return ((map)[bit >> 3] & (1 << (bit & 7))) > 0; +} + + static void notify_receive (void *cls, const struct GNUNET_PeerIdentity *peer, const struct GNUNET_MessageHeader *message) { static int n; + unsigned int s; char cbuf[GNUNET_SERVER_MAX_MESSAGE_SIZE - 1]; const struct TestMessage *hdr; hdr = (const struct TestMessage *) message; - s = get_size (n); + if (MTYPE != ntohs (message->type)) return; - msg_recv_expected = n; msg_recv = ntohl (hdr->num); - if (ntohs (message->size) != (s)) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Expected message %u of size %u, got %u bytes of message %u\n", - n, s, ntohs (message->size), ntohl (hdr->num)); - if (die_task != GNUNET_SCHEDULER_NO_TASK) - GNUNET_SCHEDULER_cancel (die_task); - test_failed = GNUNET_YES; - die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL); - return; - } - if (ntohl (hdr->num) != n) + s = get_size (ntohl (hdr->num)); + + if (ntohs (message->size) != s) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Expected message %u of size %u, got %u bytes of message %u\n", - n, s, ntohs (message->size), ntohl (hdr->num)); - if (die_task != GNUNET_SCHEDULER_NO_TASK) + ntohl (hdr->num), s, ntohs (message->size), ntohl (hdr->num)); + if (GNUNET_SCHEDULER_NO_TASK != die_task) GNUNET_SCHEDULER_cancel (die_task); - test_failed = GNUNET_YES; + test_sending = GNUNET_YES; die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL); return; } - memset (cbuf, n, s - sizeof (struct TestMessage)); + + memset (cbuf, ntohl (hdr->num), s - sizeof (struct TestMessage)); if (0 != memcmp (cbuf, &hdr[1], s - sizeof (struct TestMessage))) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Expected message %u with bits %u, but body did not match at position %u\n", n, - (unsigned char) n); - if (die_task != GNUNET_SCHEDULER_NO_TASK) + "Expected message %u with bits %u, but body did not match\n", + ntohl (hdr->num), (unsigned char) n); + if (GNUNET_SCHEDULER_NO_TASK != die_task) GNUNET_SCHEDULER_cancel (die_task); - test_failed = GNUNET_YES; + test_sending = GNUNET_YES; die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL); return; } #if VERBOSE - if (ntohl (hdr->num) % 5000 == 0) + if (ntohl (hdr->num) % 5 == 0) { - struct PeerContext *p = cls; - char *ps = GNUNET_strdup (GNUNET_i2s (&p->id)); - - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Peer %u (`%s') got message %u of size %u from peer (`%s')\n", - p->no, ps, ntohl (hdr->num), ntohs (message->size), - GNUNET_i2s (peer)); - GNUNET_free (ps); + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Got message %u of size %u\n", + ntohl (hdr->num), ntohs (message->size)); } #endif n++; + if (GNUNET_SYSERR == set_bit (ntohl (hdr->num))) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + _("Message id %u is bigger than maxmimum number of messages %u expected\n"), + ntohl (hdr->num), TOTAL_MSGS); + } + test_sending = GNUNET_YES; if (0 == (n % (TOTAL_MSGS / 100))) { FPRINTF (stderr, "%s", "."); - if (die_task != GNUNET_SCHEDULER_NO_TASK) + if (GNUNET_SCHEDULER_NO_TASK != die_task) GNUNET_SCHEDULER_cancel (die_task); die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL); } if (n == TOTAL_MSGS) { - ok = 0; - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "\nAll messages received\n"); end (); } } @@ -278,10 +405,12 @@ notify_ready (void *cls, size_t size, void *buf) unsigned int ret; th = NULL; + if (buf == NULL) { + test_send_timeout = GNUNET_YES; GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Timeout occurred while waiting for transmit_ready for message %u of %u\n", + "Timeout occurred while waiting for transmit_ready for msg %u of %u\n", msg_scheduled, TOTAL_MSGS); if (GNUNET_SCHEDULER_NO_TASK != die_task) GNUNET_SCHEDULER_cancel (die_task); @@ -289,14 +418,15 @@ notify_ready (void *cls, size_t size, void *buf) ok = 42; return 0; } - ret = 0; s = get_size (n); GNUNET_assert (size >= s); GNUNET_assert (buf != NULL); + GNUNET_assert (n < TOTAL_MSGS); cbuf = buf; do { + GNUNET_assert (n < TOTAL_MSGS); hdr.header.size = htons (s); hdr.header.type = htons (MTYPE); hdr.num = htonl (n); @@ -305,17 +435,12 @@ notify_ready (void *cls, size_t size, void *buf) ret += sizeof (struct TestMessage); memset (&cbuf[ret], n, s - sizeof (struct TestMessage)); ret += s - sizeof (struct TestMessage); + #if VERBOSE if (n % 5000 == 0) { - - char *receiver_s = GNUNET_strdup (GNUNET_i2s (&receiver->id)); - - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Sending message of size %u from peer %u (`%4s') -> peer %u (`%s') !\n", - n, sender->no, GNUNET_i2s (&sender->id), receiver->no, - receiver_s); - GNUNET_free (receiver_s); + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Sending message %u of size %u\n", n, + s); } #endif n++; @@ -323,26 +448,28 @@ notify_ready (void *cls, size_t size, void *buf) if (0 == GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK, 16)) break; /* sometimes pack buffer full, sometimes not */ } - while (size - ret >= s); + while ((size - ret >= s) && (n < TOTAL_MSGS)); if (n < TOTAL_MSGS) { - if (th == NULL) - th = GNUNET_TRANSPORT_notify_transmit_ready (p2->th, &p1->id, s, - TIMEOUT_TRANSMIT, - ¬ify_ready, NULL); + th = GNUNET_TRANSPORT_notify_transmit_ready (p2->th, &p1->id, s, + TIMEOUT_TRANSMIT, + ¬ify_ready, NULL); msg_scheduled = n; } + else + { + FPRINTF (stderr, "%s", "\n"); + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "All messages scheduled to be sent\n"); + if (GNUNET_SCHEDULER_NO_TASK != die_task) + GNUNET_SCHEDULER_cancel (die_task); + die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL); + } if (n % 5000 == 0) { GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Returning total message block of size %u\n", ret); } total_bytes += ret; - if (n == TOTAL_MSGS) - { - FPRINTF (stderr, "%s", "\n"); - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "All messages sent\n"); - } return ret; } @@ -350,31 +477,27 @@ notify_ready (void *cls, size_t size, void *buf) static void notify_connect (void *cls, const struct GNUNET_PeerIdentity *peer) { - - struct PeerContext *p = cls; - - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer %u (`%4s') connected to us!\n", - p->no, GNUNET_i2s (peer)); + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer `%4s' connected to us (%p)!\n", + GNUNET_i2s (peer), cls); } static void notify_disconnect (void *cls, const struct GNUNET_PeerIdentity *peer) { - struct PeerContext *p = cls; - - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer %u (`%4s') disconnected!\n", p->no, - GNUNET_i2s (peer)); + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer `%4s' disconnected (%p)!\n", + GNUNET_i2s (peer), cls); if (th != NULL) GNUNET_TRANSPORT_notify_transmit_ready_cancel (th); th = NULL; - } static void sendtask () { start_time = GNUNET_TIME_absolute_get (); + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Starting to send %u messages\n", + TOTAL_MSGS); th = GNUNET_TRANSPORT_notify_transmit_ready (p2->th, &p1->id, get_size (0), TIMEOUT_TRANSMIT, ¬ify_ready, NULL); @@ -385,22 +508,20 @@ testing_connect_cb (struct PeerContext *p1, struct PeerContext *p2, void *cls) { char *p1_c = GNUNET_strdup (GNUNET_i2s (&p1->id)); - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peers connected: %u (%s) <-> %u (%s)\n", - p1->no, p1_c, p2->no, GNUNET_i2s (&p2->id)); + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peers connected: %s <-> %s\n", p1_c, + GNUNET_i2s (&p2->id)); GNUNET_free (p1_c); test_connected = GNUNET_YES; cc = NULL; GNUNET_SCHEDULER_add_now (&sendtask, NULL); - } -void +static void start_cb (struct PeerContext *p, void *cls) { static int started; - started++; GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer %u (`%s') started\n", p->no, @@ -410,35 +531,17 @@ start_cb (struct PeerContext *p, void *cls) return; test_connected = GNUNET_NO; - - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Peer %u: `%s' using configuration file `%s'\n", p1->no, - GNUNET_i2s (&p1->id), cfg_file_p1); - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Peer %u: `%s' using configuration file `%s'\n", p2->no, - GNUNET_i2s (&p2->id), cfg_file_p2); - - sender = p2; - receiver = p1; - - char *sender_c = GNUNET_strdup (GNUNET_i2s (&sender->id)); - - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Test triest to send from %u (%s) -> peer %u (%s)\n", sender->no, - sender_c, receiver->no, GNUNET_i2s (&receiver->id)); - GNUNET_free (sender_c); - cc = GNUNET_TRANSPORT_TESTING_connect_peers (tth, p1, p2, &testing_connect_cb, NULL); } - static void run (void *cls, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg) { die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL); + test_send_timeout = GNUNET_NO; p1 = GNUNET_TRANSPORT_TESTING_start_peer (tth, cfg_file_p1, 1, ¬ify_receive, ¬ify_connect, @@ -448,21 +551,24 @@ run (void *cls, char *const *args, const char *cfgfile, ¬ify_receive, ¬ify_connect, ¬ify_disconnect, &start_cb, NULL); - if ((p1 == NULL) || (p2 == NULL)) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Fail! Could not start peers!\n"); if (die_task != GNUNET_SCHEDULER_NO_TASK) GNUNET_SCHEDULER_cancel (die_task); - die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL); + //die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL); return; } } -static int -check () + +int +main (int argc, char *argv[]) { - static char *argv[] = { "test_transport", + char *test_source; + int ret; + + static char *const argv_new[] = { "test-transport-api-reliability", "-c", "test_transport_api_data.conf", NULL @@ -471,18 +577,6 @@ check () GNUNET_GETOPT_OPTION_END }; - ok = 1; - GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1, argv, test_name, - "nohelp", options, &run, &ok); - - return ok; -} - -int -main (int argc, char *argv[]) -{ - int ret; - GNUNET_TRANSPORT_TESTING_get_test_name (argv[0], &test_name); GNUNET_log_setup (test_name, @@ -498,7 +592,17 @@ main (int argc, char *argv[]) GNUNET_TRANSPORT_TESTING_get_config_name (argv[0], &cfg_file_p1, 1); GNUNET_TRANSPORT_TESTING_get_config_name (argv[0], &cfg_file_p2, 2); - ret = check (); + + +#if WRITECONFIG + setTransportOptions ("test_transport_api_data.conf"); +#endif + ok = GNUNET_SYSERR; + + ret = GNUNET_PROGRAM_run ((sizeof (argv_new) / sizeof (char *)) - 1, argv_new, test_name, + "nohelp", options, &run, &ok); + if (GNUNET_SYSERR == ret) + ok = -1; GNUNET_free (cfg_file_p1); GNUNET_free (cfg_file_p2); @@ -507,8 +611,7 @@ main (int argc, char *argv[]) GNUNET_free (test_plugin); GNUNET_free (test_name); - return ret; + return ok; } - /* end of test_transport_api_reliability.c */ diff --git a/src/transport/test_transport_api_reliability_udp_peer1.conf b/src/transport/test_transport_api_reliability_udp_peer1.conf new file mode 100644 index 000000000..d16be3b20 --- /dev/null +++ b/src/transport/test_transport_api_reliability_udp_peer1.conf @@ -0,0 +1,30 @@ +@INLINE@ template_cfg_peer1.conf +[PATHS] +GNUNET_TEST_HOME = /tmp/test-transport/api-udp-p1/ + +[transport-udp] +PORT = 12040 +MAX_BPS = 5000000 + +[arm] +PORT = 12045 +UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p1-service-arm.sock + +[statistics] +PORT = 12044 +UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p1-service-statistics.sock + +[resolver] +PORT = 12043 +UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p1-service-resolver.sock + +[peerinfo] +PORT = 12042 +UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p1-service-peerinfo.sock + +[transport] +PORT = 12041 +PLUGINS = udp +UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p1-service-transport.sock + + diff --git a/src/transport/test_transport_api_reliability_udp_peer2.conf b/src/transport/test_transport_api_reliability_udp_peer2.conf new file mode 100644 index 000000000..a7e6a57fb --- /dev/null +++ b/src/transport/test_transport_api_reliability_udp_peer2.conf @@ -0,0 +1,30 @@ +@INLINE@ template_cfg_peer2.conf +[PATHS] +GNUNET_TEST_HOME = /tmp/test-transport/api-udp-p2/ + +[transport-udp] +PORT = 12050 +MAX_BPS = 5000000 + +[arm] +PORT = 12055 +UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p2-service-arm.sock + +[statistics] +PORT = 12054 +UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p2-service-statistics.sock + +[resolver] +PORT = 12053 +UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p2-service-resolver.sock + +[peerinfo] +PORT = 12052 +UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p2-service-peerinfo.sock + +[transport] +PORT = 12051 +PLUGINS = udp +UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p2-service-transport.sock + + diff --git a/src/transport/test_transport_api_reliability_unix_peer1.conf b/src/transport/test_transport_api_reliability_unix_peer1.conf new file mode 100644 index 000000000..d43ef4a33 --- /dev/null +++ b/src/transport/test_transport_api_reliability_unix_peer1.conf @@ -0,0 +1,28 @@ +@INLINE@ template_cfg_peer1.conf +[PATHS] +GNUNET_TEST_HOME = /tmp/test-transport/api-unix-p1/ + +[arm] +PORT = 12125 +UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p1-service-arm.sock + +[statistics] +PORT = 12124 +UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p1-service-statistics.sock + +[resolver] +PORT = 12123 +UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p1-service-resolver.sock + +[peerinfo] +PORT = 12122 +UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p1-service-peerinfo.sock + +[transport] +PORT = 12121 +PLUGINS = unix +UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p1-service-transport.sock + +[transport-unix] +PORT = 12120 + diff --git a/src/transport/test_transport_api_reliability_unix_peer2.conf b/src/transport/test_transport_api_reliability_unix_peer2.conf new file mode 100644 index 000000000..f863d4d42 --- /dev/null +++ b/src/transport/test_transport_api_reliability_unix_peer2.conf @@ -0,0 +1,28 @@ +@INLINE@ template_cfg_peer2.conf +[PATHS] +GNUNET_TEST_HOME = /tmp/test-transport/api-unix-p2/ + +[arm] +PORT = 12135 +UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p2-service-arm.sock + +[statistics] +PORT = 12134 +UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p2-service-statistics.sock + +[resolver] +PORT = 12133 +UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p2-service-resolver.sock + +[peerinfo] +PORT = 12132 +UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p2-service-peerinfo.sock + +[transport] +PORT = 12131 +PLUGINS = unix +UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p2-service-transport.sock + +[transport-unix] +PORT = 12131 + diff --git a/src/transport/test_transport_api_unreliability.c b/src/transport/test_transport_api_unreliability.c deleted file mode 100644 index 3f40a7179..000000000 --- a/src/transport/test_transport_api_unreliability.c +++ /dev/null @@ -1,588 +0,0 @@ -/* - This file is part of GNUnet. - (C) 2009, 2010 Christian Grothoff (and other contributing authors) - - GNUnet is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. - - GNUnet is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNUnet; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ -/** - * @file transport/test_transport_api_unreliability.c - * @brief test case for transports; ensures messages get - * through, regardless of order - * - * This test case serves as a base for unreliable - * transport test cases to check that the transports - * achieve reliable message delivery. - */ -#include "platform.h" -#include "gnunet_transport_service.h" -#include "gauger.h" -#include "transport-testing.h" - -/** - * Testcase timeout - */ -#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 900) - -/** - * How long until we give up on transmitting the message? - */ -#define TIMEOUT_TRANSMIT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 60) - -static char *test_source; - -static char *test_plugin; - -static char *test_name; - -static int ok; - -static GNUNET_SCHEDULER_TaskIdentifier die_task; - -struct PeerContext *p1; - -struct PeerContext *p2; - -struct GNUNET_TRANSPORT_TransmitHandle *th; - -char *cfg_file_p1; - -char *cfg_file_p2; - -uint32_t max_bps_p1; -uint32_t max_bps_p2; - -struct GNUNET_TRANSPORT_TESTING_handle *tth; - -/* - * Testcase specific declarations - */ - -/** - * Total number of messages to send - * - * Note that this value must not significantly exceed - * 'MAX_PENDING' in 'gnunet-service-transport.c', otherwise - * messages may be dropped even for a reliable transport. - */ -#define TOTAL_MSGS (1024 * 3) - -#define MTYPE 12345 - -GNUNET_NETWORK_STRUCT_BEGIN - -struct TestMessage -{ - struct GNUNET_MessageHeader header; - uint32_t num; -}; -GNUNET_NETWORK_STRUCT_END - -static char *test_name; - -static int msg_scheduled; -static int msg_sent; -static int msg_recv_expected; -static int msg_recv; - -static int test_connected; -static int test_sending; -static int test_send_timeout; - -static unsigned long long total_bytes; - -static struct GNUNET_TIME_Absolute start_time; - -static char bitmap[TOTAL_MSGS / 8]; - -static GNUNET_TRANSPORT_TESTING_ConnectRequest cc; - -/* - * END Testcase specific declarations - */ - -#if VERBOSE -#define OKPP do { ok++; FPRINTF (stderr, "Now at stage %u at %s:%u\n", ok, __FILE__, __LINE__); } while (0) -#else -#define OKPP do { ok++; } while (0) -#endif - -static int -get_bit (const char *map, unsigned int bit); - -static void -end () -{ - unsigned long long delta; - unsigned long long rate; - char *value_name; - - - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Stopping peers\n"); - - delta = GNUNET_TIME_absolute_get_duration (start_time).rel_value_us; - rate = (1000LL* 1000ll * total_bytes) / (1024 * delta); - FPRINTF (stderr, "\nThroughput was %llu KiBytes/s\n", - rate); - - GNUNET_asprintf (&value_name, "unreliable_%s", test_plugin); - GAUGER ("TRANSPORT", value_name, (int) rate, - "kb/s"); - GNUNET_free (value_name); - - if (die_task != GNUNET_SCHEDULER_NO_TASK) - GNUNET_SCHEDULER_cancel (die_task); - - if (th != NULL) - GNUNET_TRANSPORT_notify_transmit_ready_cancel (th); - th = NULL; - - if (cc != NULL) - GNUNET_TRANSPORT_TESTING_connect_peers_cancel (tth, cc); - cc = NULL; - - GNUNET_TRANSPORT_TESTING_stop_peer (tth, p1); - GNUNET_TRANSPORT_TESTING_stop_peer (tth, p2); - - GNUNET_TRANSPORT_TESTING_done (tth); - - ok = 0; - - int i; - - for (i = 0; i < TOTAL_MSGS; i++) - { - if (get_bit (bitmap, i) == 0) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Did not receive message %d\n", i); - ok = -1; - } - } -} - -static void -end_badly () -{ - die_task = GNUNET_SCHEDULER_NO_TASK; - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Fail! Stopping peers\n"); - - if (test_connected == GNUNET_YES) - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Peers got connected\n"); - else - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Peers got NOT connected\n"); - - if (test_sending == GNUNET_NO) - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Testcase did not send any messages before timeout\n"); - else - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Reliability failed: Last message sent %u, Next message scheduled %u, Last message received %u, Message expected %u\n", - msg_sent, msg_scheduled, msg_recv, msg_recv_expected); - if (test_send_timeout == GNUNET_YES) - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Test had timeout while waiting to send data\n"); - - int i; - - for (i = 0; i < TOTAL_MSGS; i++) - { - if (get_bit (bitmap, i) == 0) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Did not receive message %d\n", i); - ok = -1; - } - } - - if (th != NULL) - GNUNET_TRANSPORT_notify_transmit_ready_cancel (th); - th = NULL; - - if (cc != NULL) - GNUNET_TRANSPORT_TESTING_connect_peers_cancel (tth, cc); - cc = NULL; - - if (p1 != NULL) - GNUNET_TRANSPORT_TESTING_stop_peer (tth, p1); - if (p2 != NULL) - GNUNET_TRANSPORT_TESTING_stop_peer (tth, p2); - - GNUNET_TRANSPORT_TESTING_done (tth); - - ok = GNUNET_SYSERR; -} - - -static unsigned int -get_size (unsigned int iter) -{ - unsigned int ret; - - ret = (iter * iter * iter); - -#ifndef LINUX - /* FreeBSD/OSX etc. Unix DGRAMs do not work - * with large messages */ - if (0 == strcmp ("unix", test_plugin)) - return sizeof (struct TestMessage) + (ret % 1024); -#endif - return sizeof (struct TestMessage) + (ret % 60000); -} - - -/** - * Sets a bit active in the bitmap. - * - * @param bitIdx which bit to set - * @return GNUNET_SYSERR on error, GNUNET_OK on success - */ -static int -set_bit (unsigned int bitIdx) -{ - size_t arraySlot; - unsigned int targetBit; - - if (bitIdx >= sizeof (bitmap) * 8) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "tried to set bit %d of %d(!?!?)\n", - bitIdx, sizeof (bitmap) * 8); - return GNUNET_SYSERR; - } - arraySlot = bitIdx / 8; - targetBit = (1L << (bitIdx % 8)); - bitmap[arraySlot] |= targetBit; - return GNUNET_OK; -} - -/** - * Obtain a bit from bitmap. - * @param map the bitmap - * @param bit index from bitmap - * - * @return Bit \a bit from hashcode \a code - */ -static int -get_bit (const char *map, unsigned int bit) -{ - if (bit > TOTAL_MSGS) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "get bit %d of %d(!?!?)\n", bit, - sizeof (bitmap) * 8); - return 0; - } - return ((map)[bit >> 3] & (1 << (bit & 7))) > 0; -} - - -static void -notify_receive (void *cls, const struct GNUNET_PeerIdentity *peer, - const struct GNUNET_MessageHeader *message) -{ - static int n; - - unsigned int s; - char cbuf[GNUNET_SERVER_MAX_MESSAGE_SIZE - 1]; - const struct TestMessage *hdr; - - hdr = (const struct TestMessage *) message; - - if (MTYPE != ntohs (message->type)) - return; - msg_recv_expected = n; - msg_recv = ntohl (hdr->num); - s = get_size (ntohl (hdr->num)); - - if (ntohs (message->size) != s) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Expected message %u of size %u, got %u bytes of message %u\n", - ntohl (hdr->num), s, ntohs (message->size), ntohl (hdr->num)); - if (GNUNET_SCHEDULER_NO_TASK != die_task) - GNUNET_SCHEDULER_cancel (die_task); - test_sending = GNUNET_YES; - die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL); - return; - } - - memset (cbuf, ntohl (hdr->num), s - sizeof (struct TestMessage)); - if (0 != memcmp (cbuf, &hdr[1], s - sizeof (struct TestMessage))) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Expected message %u with bits %u, but body did not match\n", - ntohl (hdr->num), (unsigned char) n); - if (GNUNET_SCHEDULER_NO_TASK != die_task) - GNUNET_SCHEDULER_cancel (die_task); - test_sending = GNUNET_YES; - die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL); - return; - } -#if VERBOSE - if (ntohl (hdr->num) % 5 == 0) - { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Got message %u of size %u\n", - ntohl (hdr->num), ntohs (message->size)); - } -#endif - n++; - if (GNUNET_SYSERR == set_bit (ntohl (hdr->num))) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _("Message id %u is bigger than maxmimum number of messages %u expected\n"), - ntohl (hdr->num), TOTAL_MSGS); - } - test_sending = GNUNET_YES; - if (0 == (n % (TOTAL_MSGS / 100))) - { - FPRINTF (stderr, "%s", "."); - if (GNUNET_SCHEDULER_NO_TASK != die_task) - GNUNET_SCHEDULER_cancel (die_task); - die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL); - } - if (n == TOTAL_MSGS) - { - end (); - } -} - - -static size_t -notify_ready (void *cls, size_t size, void *buf) -{ - static int n; - char *cbuf = buf; - struct TestMessage hdr; - unsigned int s; - unsigned int ret; - - th = NULL; - - if (buf == NULL) - { - test_send_timeout = GNUNET_YES; - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Timeout occurred while waiting for transmit_ready for msg %u of %u\n", - msg_scheduled, TOTAL_MSGS); - if (GNUNET_SCHEDULER_NO_TASK != die_task) - GNUNET_SCHEDULER_cancel (die_task); - die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL); - ok = 42; - return 0; - } - ret = 0; - s = get_size (n); - GNUNET_assert (size >= s); - GNUNET_assert (buf != NULL); - GNUNET_assert (n < TOTAL_MSGS); - cbuf = buf; - do - { - GNUNET_assert (n < TOTAL_MSGS); - hdr.header.size = htons (s); - hdr.header.type = htons (MTYPE); - hdr.num = htonl (n); - msg_sent = n; - memcpy (&cbuf[ret], &hdr, sizeof (struct TestMessage)); - ret += sizeof (struct TestMessage); - memset (&cbuf[ret], n, s - sizeof (struct TestMessage)); - ret += s - sizeof (struct TestMessage); - -#if VERBOSE - if (n % 5000 == 0) - { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Sending message %u of size %u\n", n, - s); - } -#endif - n++; - s = get_size (n); - if (0 == GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK, 16)) - break; /* sometimes pack buffer full, sometimes not */ - } - while ((size - ret >= s) && (n < TOTAL_MSGS)); - if (n < TOTAL_MSGS) - { - th = GNUNET_TRANSPORT_notify_transmit_ready (p2->th, &p1->id, s, - TIMEOUT_TRANSMIT, - ¬ify_ready, NULL); - msg_scheduled = n; - } - else - { - FPRINTF (stderr, "%s", "\n"); - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "All messages scheduled to be sent\n"); - if (GNUNET_SCHEDULER_NO_TASK != die_task) - GNUNET_SCHEDULER_cancel (die_task); - die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL); - } - if (n % 5000 == 0) - { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Returning total message block of size %u\n", ret); - } - total_bytes += ret; - return ret; -} - - -static void -notify_connect (void *cls, const struct GNUNET_PeerIdentity *peer) -{ - - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer `%4s' connected to us (%p)!\n", - GNUNET_i2s (peer), cls); -} - - -static void -notify_disconnect (void *cls, const struct GNUNET_PeerIdentity *peer) -{ - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer `%4s' disconnected (%p)!\n", - GNUNET_i2s (peer), cls); - if (th != NULL) - GNUNET_TRANSPORT_notify_transmit_ready_cancel (th); - th = NULL; -} - -static void -sendtask () -{ - start_time = GNUNET_TIME_absolute_get (); - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Starting to send %u messages\n", - TOTAL_MSGS); - th = GNUNET_TRANSPORT_notify_transmit_ready (p2->th, &p1->id, get_size (0), - TIMEOUT_TRANSMIT, ¬ify_ready, - NULL); -} - -static void -testing_connect_cb (struct PeerContext *p1, struct PeerContext *p2, void *cls) -{ - char *p1_c = GNUNET_strdup (GNUNET_i2s (&p1->id)); - - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peers connected: %s <-> %s\n", p1_c, - GNUNET_i2s (&p2->id)); - GNUNET_free (p1_c); - - test_connected = GNUNET_YES; - cc = NULL; - - GNUNET_SCHEDULER_add_now (&sendtask, NULL); -} - -void -start_cb (struct PeerContext *p, void *cls) -{ - static int started; - - started++; - - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer %u (`%s') started\n", p->no, - GNUNET_i2s (&p->id)); - - if (started != 2) - return; - - test_connected = GNUNET_NO; - cc = GNUNET_TRANSPORT_TESTING_connect_peers (tth, p1, p2, &testing_connect_cb, - NULL); - -} - -static void -run (void *cls, char *const *args, const char *cfgfile, - const struct GNUNET_CONFIGURATION_Handle *cfg) -{ - die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, NULL); - test_send_timeout = GNUNET_NO; - - - p1 = GNUNET_TRANSPORT_TESTING_start_peer (tth, cfg_file_p1, 1, - ¬ify_receive, ¬ify_connect, - ¬ify_disconnect, &start_cb, - NULL); - p2 = GNUNET_TRANSPORT_TESTING_start_peer (tth, cfg_file_p2, 2, - ¬ify_receive, ¬ify_connect, - ¬ify_disconnect, &start_cb, - NULL); - - - if ((p1 == NULL) || (p2 == NULL)) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Fail! Could not start peers!\n"); - if (die_task != GNUNET_SCHEDULER_NO_TASK) - GNUNET_SCHEDULER_cancel (die_task); - die_task = GNUNET_SCHEDULER_add_now (&end_badly, NULL); - return; - } - - -} - -static int -check () -{ - static char *const argv[] = { "test-transport-api-unreliability", - "-c", - "test_transport_api_data.conf", - NULL - }; - static struct GNUNET_GETOPT_CommandLineOption options[] = { - GNUNET_GETOPT_OPTION_END - }; - -#if WRITECONFIG - setTransportOptions ("test_transport_api_data.conf"); -#endif - ok = GNUNET_SYSERR; - - GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1, argv, test_name, - "nohelp", options, &run, &ok); - - return ok; -} - -int -main (int argc, char *argv[]) -{ - int ret; - - GNUNET_TRANSPORT_TESTING_get_test_name (argv[0], &test_name); - - GNUNET_log_setup (test_name, - "WARNING", - NULL); - - GNUNET_TRANSPORT_TESTING_get_test_source_name (__FILE__, &test_source); - GNUNET_TRANSPORT_TESTING_get_test_plugin_name (argv[0], test_source, - &test_plugin); - - tth = GNUNET_TRANSPORT_TESTING_init (); - - GNUNET_TRANSPORT_TESTING_get_config_name (argv[0], &cfg_file_p1, 1); - GNUNET_TRANSPORT_TESTING_get_config_name (argv[0], &cfg_file_p2, 2); - - ret = check (); - - GNUNET_free (cfg_file_p1); - GNUNET_free (cfg_file_p2); - - GNUNET_free (test_source); - GNUNET_free (test_plugin); - GNUNET_free (test_name); - - - return ret; -} - -/* end of test_transport_api_unreliability.c */ diff --git a/src/transport/test_transport_api_unreliability_udp_peer1.conf b/src/transport/test_transport_api_unreliability_udp_peer1.conf deleted file mode 100644 index d16be3b20..000000000 --- a/src/transport/test_transport_api_unreliability_udp_peer1.conf +++ /dev/null @@ -1,30 +0,0 @@ -@INLINE@ template_cfg_peer1.conf -[PATHS] -GNUNET_TEST_HOME = /tmp/test-transport/api-udp-p1/ - -[transport-udp] -PORT = 12040 -MAX_BPS = 5000000 - -[arm] -PORT = 12045 -UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p1-service-arm.sock - -[statistics] -PORT = 12044 -UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p1-service-statistics.sock - -[resolver] -PORT = 12043 -UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p1-service-resolver.sock - -[peerinfo] -PORT = 12042 -UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p1-service-peerinfo.sock - -[transport] -PORT = 12041 -PLUGINS = udp -UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p1-service-transport.sock - - diff --git a/src/transport/test_transport_api_unreliability_udp_peer2.conf b/src/transport/test_transport_api_unreliability_udp_peer2.conf deleted file mode 100644 index a7e6a57fb..000000000 --- a/src/transport/test_transport_api_unreliability_udp_peer2.conf +++ /dev/null @@ -1,30 +0,0 @@ -@INLINE@ template_cfg_peer2.conf -[PATHS] -GNUNET_TEST_HOME = /tmp/test-transport/api-udp-p2/ - -[transport-udp] -PORT = 12050 -MAX_BPS = 5000000 - -[arm] -PORT = 12055 -UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p2-service-arm.sock - -[statistics] -PORT = 12054 -UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p2-service-statistics.sock - -[resolver] -PORT = 12053 -UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p2-service-resolver.sock - -[peerinfo] -PORT = 12052 -UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p2-service-peerinfo.sock - -[transport] -PORT = 12051 -PLUGINS = udp -UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p2-service-transport.sock - - diff --git a/src/transport/test_transport_api_unreliability_unix_peer1.conf b/src/transport/test_transport_api_unreliability_unix_peer1.conf deleted file mode 100644 index d43ef4a33..000000000 --- a/src/transport/test_transport_api_unreliability_unix_peer1.conf +++ /dev/null @@ -1,28 +0,0 @@ -@INLINE@ template_cfg_peer1.conf -[PATHS] -GNUNET_TEST_HOME = /tmp/test-transport/api-unix-p1/ - -[arm] -PORT = 12125 -UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p1-service-arm.sock - -[statistics] -PORT = 12124 -UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p1-service-statistics.sock - -[resolver] -PORT = 12123 -UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p1-service-resolver.sock - -[peerinfo] -PORT = 12122 -UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p1-service-peerinfo.sock - -[transport] -PORT = 12121 -PLUGINS = unix -UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p1-service-transport.sock - -[transport-unix] -PORT = 12120 - diff --git a/src/transport/test_transport_api_unreliability_unix_peer2.conf b/src/transport/test_transport_api_unreliability_unix_peer2.conf deleted file mode 100644 index f863d4d42..000000000 --- a/src/transport/test_transport_api_unreliability_unix_peer2.conf +++ /dev/null @@ -1,28 +0,0 @@ -@INLINE@ template_cfg_peer2.conf -[PATHS] -GNUNET_TEST_HOME = /tmp/test-transport/api-unix-p2/ - -[arm] -PORT = 12135 -UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p2-service-arm.sock - -[statistics] -PORT = 12134 -UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p2-service-statistics.sock - -[resolver] -PORT = 12133 -UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p2-service-resolver.sock - -[peerinfo] -PORT = 12132 -UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p2-service-peerinfo.sock - -[transport] -PORT = 12131 -PLUGINS = unix -UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-p2-service-transport.sock - -[transport-unix] -PORT = 12131 - -- cgit v1.2.3