From 6a84e71e9d695c5250a51999f48416600d92840f Mon Sep 17 00:00:00 2001 From: Matthias Wachs Date: Fri, 12 Aug 2011 22:48:39 +0000 Subject: reliability uses testing lib --- src/transport/Makefile.am | 3 +- src/transport/test_transport_api.c | 31 +- .../test_transport_api_rel_http_peer1.conf | 36 -- .../test_transport_api_rel_http_peer2.conf | 33 - .../test_transport_api_rel_https_peer1.conf | 35 - .../test_transport_api_rel_https_peer2.conf | 36 -- src/transport/test_transport_api_reliability.c | 718 ++++++--------------- .../test_transport_api_reliability_http_peer1.conf | 36 ++ .../test_transport_api_reliability_http_peer2.conf | 33 + ...test_transport_api_reliability_https_peer1.conf | 35 + ...test_transport_api_reliability_https_peer2.conf | 36 ++ src/transport/transport-testing.c | 5 +- src/transport/transport-testing.h | 1 + 13 files changed, 373 insertions(+), 665 deletions(-) delete mode 100644 src/transport/test_transport_api_rel_http_peer1.conf delete mode 100644 src/transport/test_transport_api_rel_http_peer2.conf delete mode 100644 src/transport/test_transport_api_rel_https_peer1.conf delete mode 100644 src/transport/test_transport_api_rel_https_peer2.conf create mode 100644 src/transport/test_transport_api_reliability_http_peer1.conf create mode 100644 src/transport/test_transport_api_reliability_http_peer2.conf create mode 100644 src/transport/test_transport_api_reliability_https_peer1.conf create mode 100644 src/transport/test_transport_api_reliability_https_peer2.conf (limited to 'src') diff --git a/src/transport/Makefile.am b/src/transport/Makefile.am index 372ff115e..4694ba2e5 100644 --- a/src/transport/Makefile.am +++ b/src/transport/Makefile.am @@ -525,7 +525,8 @@ test_transport_api_wlan_SOURCES = \ test_transport_api_wlan_LDADD = \ $(top_builddir)/src/transport/libgnunettransport.la \ $(top_builddir)/src/hello/libgnunethello.la \ - $(top_builddir)/src/util/libgnunetutil.la + $(top_builddir)/src/util/libgnunetutil.la \ + $(top_builddir)/src/transport/libgnunettransporttesting.la endif test_quota_compliance_tcp_SOURCES = \ diff --git a/src/transport/test_transport_api.c b/src/transport/test_transport_api.c index dd285cea3..0e3473441 100644 --- a/src/transport/test_transport_api.c +++ b/src/transport/test_transport_api.c @@ -84,18 +84,27 @@ end () if (die_task != GNUNET_SCHEDULER_NO_TASK) GNUNET_SCHEDULER_cancel(die_task); + if (th != NULL) + GNUNET_TRANSPORT_notify_transmit_ready_cancel(th); + th = NULL; + GNUNET_TRANSPORT_TESTING_stop_peer(p1); GNUNET_TRANSPORT_TESTING_stop_peer(p2); - - ok = 0; } static void end_badly () { + if (die_task != GNUNET_SCHEDULER_NO_TASK) + GNUNET_SCHEDULER_cancel(die_task); + die_task = GNUNET_SCHEDULER_NO_TASK; GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Fail! Stopping peers\n"); + if (th != NULL) + GNUNET_TRANSPORT_notify_transmit_ready_cancel(th); + th = NULL; + if (p1 != NULL) GNUNET_TRANSPORT_TESTING_stop_peer(p1); if (p2 != NULL) @@ -117,10 +126,18 @@ notify_receive (void *cls, ntohs(message->type), GNUNET_i2s (peer)); - GNUNET_assert (MTYPE == ntohs (message->type)); - GNUNET_assert (sizeof (struct GNUNET_MessageHeader) == - ntohs (message->size)); - end (); + if ((MTYPE == ntohs (message->type)) && + (sizeof (struct GNUNET_MessageHeader) == ntohs (message->size))) + { + ok = 0; + end(); + } + else + { + GNUNET_break (0); + ok = 1; + end(); + } } @@ -408,13 +425,11 @@ main (int argc, char *argv[]) } } - ret = check (); GNUNET_free (cfg_file_p1); GNUNET_free (cfg_file_p2); - return ret; } diff --git a/src/transport/test_transport_api_rel_http_peer1.conf b/src/transport/test_transport_api_rel_http_peer1.conf deleted file mode 100644 index bea885f6b..000000000 --- a/src/transport/test_transport_api_rel_http_peer1.conf +++ /dev/null @@ -1,36 +0,0 @@ -@INLINE@ test_transport_defaults.conf -[PATHS] -SERVICEHOME = /tmp/test-transport/api-http-p1/ -DEFAULTCONFIG = test_transport_api_rel_http_peer1.conf - -[transport-tcp] -TIMEOUT = 5000 - -[transport-http] -PORT = 12180 -USE_IPv4 = YES -USE_IPv6 = NO -BINDTO4 = 127.0.0.1 - -[arm] -PORT = 12185 -UNIXPATH = /tmp/gnunet-p1-service-arm.sock - -[statistics] -PORT = 12184 -UNIXPATH = /tmp/gnunet-p1-service-statistics.sock - -[resolver] -PORT = 12183 -UNIXPATH = /tmp/gnunet-p1-service-resolver.sock - -[peerinfo] -PORT = 12182 -UNIXPATH = /tmp/gnunet-p1-service-peerinfo.sock - -[transport] -PORT = 12181 -PLUGINS = http -UNIXPATH = /tmp/gnunet-p1-service-transport.sock - - diff --git a/src/transport/test_transport_api_rel_http_peer2.conf b/src/transport/test_transport_api_rel_http_peer2.conf deleted file mode 100644 index cb8ce89b5..000000000 --- a/src/transport/test_transport_api_rel_http_peer2.conf +++ /dev/null @@ -1,33 +0,0 @@ -@INLINE@ test_transport_defaults.conf -[PATHS] -SERVICEHOME = /tmp/test-transport/api-http-p2/ -DEFAULTCONFIG = test_transport_api_rel_http_peer2.conf - -[transport-http] -PORT = 12190 -USE_IPv4 = YES -USE_IPv6 = NO -BINDTO4 = 127.0.0.1 - -[arm] -PORT = 12195 -UNIXPATH = /tmp/gnunet-p2-service-arm.sock - -[statistics] -PORT = 12194 -UNIXPATH = /tmp/gnunet-p2-service-statistics.sock - -[resolver] -PORT = 12193 -UNIXPATH = /tmp/gnunet-p2-service-resolver.sock - -[peerinfo] -PORT = 12192 -UNIXPATH = /tmp/gnunet-p2-service-peerinfo.sock - -[transport] -PORT = 12191 -PLUGINS = http -UNIXPATH = /tmp/gnunet-p2-service-transport.sock - - diff --git a/src/transport/test_transport_api_rel_https_peer1.conf b/src/transport/test_transport_api_rel_https_peer1.conf deleted file mode 100644 index c872b8549..000000000 --- a/src/transport/test_transport_api_rel_https_peer1.conf +++ /dev/null @@ -1,35 +0,0 @@ -@INLINE@ test_transport_defaults.conf -[PATHS] -SERVICEHOME = /tmp/test-transport/api-https-p1/ -DEFAULTCONFIG = test_transport_api_rel_https_peer1.conf - -[transport-https] -PORT = 12300 -CRYPTO_INIT = NONE:+VERS-TLS1.0:+ARCFOUR-128:+SHA1:+RSA:+COMP-NULL -KEY_FILE = $SERVICEHOME/https_key_p1.key -CERT_FILE = $SERVICEHOME/https_cert_p1.crt -USE_IPv4 = YES -USE_IPv6 = NO -BINDTO4 = 127.0.0.1 - -[arm] -PORT = 12305 -UNIXPATH = /tmp/gnunet-p1-service-arm.sock - -[statistics] -PORT = 12304 -UNIXPATH = /tmp/gnunet-p1-service-statistics.sock - -[resolver] -PORT = 12303 -UNIXPATH = /tmp/gnunet-p1-service-resolver.sock - -[peerinfo] -PORT = 12302 -UNIXPATH = /tmp/gnunet-p1-service-peerinfo.sock - -[transport] -PORT = 12301 -PLUGINS = https -UNIXPATH = /tmp/gnunet-p1-service-transport.sock - diff --git a/src/transport/test_transport_api_rel_https_peer2.conf b/src/transport/test_transport_api_rel_https_peer2.conf deleted file mode 100644 index fac1590bb..000000000 --- a/src/transport/test_transport_api_rel_https_peer2.conf +++ /dev/null @@ -1,36 +0,0 @@ -@INLINE@ test_transport_defaults.conf -[PATHS] -SERVICEHOME = /tmp/test-transport/api-https-p2/ -DEFAULTCONFIG = test_transport_api_rel_https_peer2.conf - -[transport-https] -PORT = 12310 -CRYPTO_INIT = NONE:+VERS-TLS1.0:+ARCFOUR-128:+SHA1:+RSA:+COMP-NULL -KEY_FILE = $SERVICEHOME/https_key_p2.key -CERT_FILE = $SERVICEHOME/https_cert_p2.crt -USE_IPv4 = YES -USE_IPv6 = NO -BINDTO4 = 127.0.0.1 - -[arm] -PORT = 12315 -UNIXPATH = /tmp/gnunet-p2-service-arm.sock - -[statistics] -PORT = 12314 -UNIXPATH = /tmp/gnunet-p2-service-statistics.sock - -[resolver] -PORT = 12313 -UNIXPATH = /tmp/gnunet-p2-service-resolver.sock - -[peerinfo] -PORT = 12312 -UNIXPATH = /tmp/gnunet-p2-service-peerinfo.sock - -[transport] -PORT = 12311 -PLUGINS = https -UNIXPATH = /tmp/gnunet-p2-service-transport.sock - - diff --git a/src/transport/test_transport_api_reliability.c b/src/transport/test_transport_api_reliability.c index 32697e52c..273a69526 100644 --- a/src/transport/test_transport_api_reliability.c +++ b/src/transport/test_transport_api_reliability.c @@ -58,27 +58,34 @@ #define MTYPE 12345 -static struct PeerContext p1; - -static struct PeerContext p2; - static int ok; -static int is_tcp; +static GNUNET_SCHEDULER_TaskIdentifier die_task; -static int is_tcp_nat; +struct PeerContext * p1; -static int is_http; +struct PeerContext * p2; -static int is_https; +struct GNUNET_TRANSPORT_TransmitHandle * th; -static int is_udp; +char * cfg_file_p1; -static int is_unix; +char * cfg_file_p2; -static int is_wlan; +/* + * Testcase specific declarations + */ + +struct TestMessage +{ + struct GNUNET_MessageHeader header; + uint32_t num; +}; -static int connected; +static int msg_scheduled; +static int msg_sent; +static int msg_recv_expected; +static int msg_recv; static int test_failed; @@ -86,25 +93,9 @@ static unsigned long long total_bytes; static struct GNUNET_TIME_Absolute start_time; -static GNUNET_SCHEDULER_TaskIdentifier die_task; - -static GNUNET_SCHEDULER_TaskIdentifier tct; - -struct GNUNET_TRANSPORT_TransmitHandle * th_p2; - -static char * key_file_p1; -static char * cert_file_p1; - -static char * key_file_p2; -static char * cert_file_p2; -static char *test_name; -static int msg_scheduled; -static int msg_sent; -static int msg_recv_expected; -static int msg_recv; - -static int p1_hello_canceled; -static int p2_hello_canceled; +/* + * 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) @@ -117,88 +108,46 @@ static void end () { unsigned long long delta; - char *value_name; + //char *value_name; - if (die_task != GNUNET_SCHEDULER_NO_TASK) - GNUNET_SCHEDULER_cancel (die_task); - die_task = GNUNET_SCHEDULER_NO_TASK; -#if VERBOSE - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Disconnecting from transports!\n"); -#endif - - if (th_p2 != NULL) - GNUNET_TRANSPORT_notify_transmit_ready_cancel(th_p2); - th_p2 = NULL; + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Stopping peers\n"); - GNUNET_TRANSPORT_disconnect (p1.th); - GNUNET_TRANSPORT_disconnect (p2.th); -#if VERBOSE - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Transports disconnected, returning success!\n"); -#endif delta = GNUNET_TIME_absolute_get_duration (start_time).rel_value; fprintf (stderr, - "\nThroughput was %llu kb/s\n", - total_bytes * 1000 / 1024 / delta); - GNUNET_asprintf(&value_name, "reliable_%s", test_name); - GAUGER ("TRANSPORT", value_name, (int)(total_bytes * 1000 / 1024 /delta), "kb/s"); - GNUNET_free(value_name); - ok = 0; - -} + "\nThroughput was %llu kb/s\n", + total_bytes * 1000 / 1024 / delta); + //GNUNET_asprintf(&value_name, "reliable_%s", test_name); + //GAUGER ("TRANSPORT", value_name, (int)(total_bytes * 1000 / 1024 /delta), "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; -static void -stop_arm (struct PeerContext *p) -{ -#if START_ARM - if (0 != GNUNET_OS_process_kill (p->arm_proc, SIGTERM)) - GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "kill"); - GNUNET_OS_process_wait (p->arm_proc); - GNUNET_OS_process_close (p->arm_proc); - p->arm_proc = NULL; -#endif - GNUNET_CONFIGURATION_destroy (p->cfg); + GNUNET_TRANSPORT_TESTING_stop_peer(p1); + GNUNET_TRANSPORT_TESTING_stop_peer(p2); } - static void -end_badly (void *cls, - const struct GNUNET_SCHEDULER_TaskContext *tc) +end_badly () { - if (test_failed == GNUNET_NO) - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Testcase 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 (th_p2 != NULL) - GNUNET_TRANSPORT_notify_transmit_ready_cancel(th_p2); - th_p2 = NULL; - - GNUNET_break (0); - GNUNET_TRANSPORT_disconnect (p1.th); - GNUNET_TRANSPORT_disconnect (p2.th); - if (GNUNET_SCHEDULER_NO_TASK != tct) - { - GNUNET_SCHEDULER_cancel (tct); - tct = GNUNET_SCHEDULER_NO_TASK; - } - ok = 1; -} + die_task = GNUNET_SCHEDULER_NO_TASK; + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Fail! Stopping peers\n"); + if (th != NULL) + GNUNET_TRANSPORT_notify_transmit_ready_cancel(th); + th = NULL; + if (p1 != NULL) + GNUNET_TRANSPORT_TESTING_stop_peer(p1); + if (p2 != NULL) + GNUNET_TRANSPORT_TESTING_stop_peer(p2); -struct TestMessage -{ - struct GNUNET_MessageHeader header; - uint32_t num; -}; + ok = GNUNET_SYSERR; +} static unsigned int @@ -229,13 +178,13 @@ notify_receive (void *cls, return; msg_recv_expected = n; msg_recv = ntohl(hdr->num); - if (ntohs (message->size) != s) + 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)); + "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; @@ -245,10 +194,10 @@ notify_receive (void *cls, if (ntohl (hdr->num) != n) { 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)); + "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; @@ -257,12 +206,12 @@ notify_receive (void *cls, } memset (cbuf, n, s - sizeof (struct TestMessage)); if (0 != memcmp (cbuf, - &hdr[1], - s - sizeof (struct TestMessage))) + &hdr[1], + s - sizeof (struct TestMessage))) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Expected message %u with bits %u, but body did not match\n", - n, (unsigned char) n); + "Expected message %u with bits %u, but body did not match\n", + n, (unsigned char) n); if (die_task != GNUNET_SCHEDULER_NO_TASK) GNUNET_SCHEDULER_cancel (die_task); test_failed = GNUNET_YES; @@ -285,11 +234,15 @@ notify_receive (void *cls, if (die_task != GNUNET_SCHEDULER_NO_TASK) GNUNET_SCHEDULER_cancel (die_task); die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, - &end_badly, - NULL); + &end_badly, + NULL); } if (n == TOTAL_MSGS) + { + ok = 0; + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"All messages received\n"); end (); + } } @@ -308,7 +261,7 @@ notify_ready (void *cls, size_t size, void *buf) ok = 42; return 0; } - th_p2 = NULL; + th = NULL; ret = 0; s = get_size (n); GNUNET_assert (size >= s); @@ -336,17 +289,17 @@ notify_ready (void *cls, size_t size, void *buf) n++; s = get_size (n); if (0 == GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK, 16)) - break; /* sometimes pack buffer full, sometimes not */ + break; /* sometimes pack buffer full, sometimes not */ } while (size - ret >= s); if (n < TOTAL_MSGS) { - if (th_p2 == NULL) - th_p2 = GNUNET_TRANSPORT_notify_transmit_ready (p2.th, - &p1.id, - s, 0, TIMEOUT, - ¬ify_ready, - NULL); + if (th == NULL) + th = GNUNET_TRANSPORT_notify_transmit_ready (p2->th, + &p1->id, + s, 0, TIMEOUT, + ¬ify_ready, + NULL); msg_scheduled = n; } if (n % 5000 == 0) @@ -361,219 +314,115 @@ notify_ready (void *cls, size_t size, void *buf) static void -notify_disconnect (void *cls, const struct GNUNET_PeerIdentity *peer) +notify_connect (void *cls, + const struct GNUNET_PeerIdentity *peer, + const struct GNUNET_TRANSPORT_ATS_Information *ats, + uint32_t ats_count) { - connected--; -#if VERBOSE + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Peer `%4s' disconnected (%p)!\n", - GNUNET_i2s (peer), cls); -#endif - if (th_p2 != NULL) + "Peer `%4s' connected to us (%p)!\n", + GNUNET_i2s (peer), + cls); + + if (cls == p1) + { + GNUNET_TRANSPORT_set_quota (p1->th, + &p2->id, + GNUNET_BANDWIDTH_value_init (1024 * 1024 * 1024), + GNUNET_BANDWIDTH_value_init (1024 * 1024 * 1024)); + } + else if (cls == p2) { - GNUNET_TRANSPORT_notify_transmit_ready_cancel(th_p2); - th_p2 = NULL; + GNUNET_TRANSPORT_set_quota (p2->th, + &p1->id, + GNUNET_BANDWIDTH_value_init (1024 * 1024 * 1024), + GNUNET_BANDWIDTH_value_init (1024 * 1024 * 1024)); } } static void -exchange_hello_last (void *cls, - const struct GNUNET_MessageHeader *message) +notify_disconnect (void *cls, + const struct GNUNET_PeerIdentity *peer) { - struct PeerContext *me = cls; - - GNUNET_assert (message != NULL); GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Exchanging HELLO of size %d with peer (%s)!\n", - (int) GNUNET_HELLO_size((const struct GNUNET_HELLO_Message *)message), - GNUNET_i2s (&me->id)); - GNUNET_assert (GNUNET_OK == - GNUNET_HELLO_get_id ((const struct GNUNET_HELLO_Message *) - message, &me->id)); - GNUNET_TRANSPORT_offer_hello (p1.th, message, NULL, NULL); + "Peer `%4s' disconnected (%p)!\n", + GNUNET_i2s (peer), cls); } - - static void -exchange_hello (void *cls, - const struct GNUNET_MessageHeader *message) +sendtask () { - struct PeerContext *me = cls; - - GNUNET_assert (message != NULL); - GNUNET_assert (GNUNET_OK == - GNUNET_HELLO_get_id ((const struct GNUNET_HELLO_Message *) - message, &me->id)); - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Exchanging HELLO of size %d from peer %s!\n", - (int) GNUNET_HELLO_size((const struct GNUNET_HELLO_Message *)message), - GNUNET_i2s (&me->id)); - GNUNET_TRANSPORT_offer_hello (p2.th, message, NULL, NULL); + start_time = GNUNET_TIME_absolute_get (); + th = GNUNET_TRANSPORT_notify_transmit_ready (p2->th, + &p1->id, + get_size (0), 0, TIMEOUT, + ¬ify_ready, + NULL); } - static void -notify_connect (void *cls, - const struct GNUNET_PeerIdentity *peer, - const struct GNUNET_TRANSPORT_ATS_Information *ats, - uint32_t ats_count) +testing_connect_cb (struct PeerContext * p1, struct PeerContext * p2, void *cls) { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Peer `%4s' connected to us (%p)!\n", - GNUNET_i2s (peer), - cls); - connected++; - if (cls == &p1) - { - GNUNET_TRANSPORT_set_quota (p1.th, - &p2.id, - GNUNET_BANDWIDTH_value_init (1024 * 1024 * 1024), - GNUNET_BANDWIDTH_value_init (1024 * 1024 * 1024)); - start_time = GNUNET_TIME_absolute_get (); - } - else - { - GNUNET_TRANSPORT_set_quota (p2.th, - &p1.id, - GNUNET_BANDWIDTH_value_init (1024 * 1024 * 1024), - GNUNET_BANDWIDTH_value_init (1024 * 1024 * 1024)); - } - if (2 == connected) - { - if (die_task != GNUNET_SCHEDULER_NO_TASK) - GNUNET_SCHEDULER_cancel (die_task); - if (tct != GNUNET_SCHEDULER_NO_TASK) - GNUNET_SCHEDULER_cancel (tct); - tct = GNUNET_SCHEDULER_NO_TASK; - if (p2_hello_canceled == GNUNET_NO) - { - GNUNET_TRANSPORT_get_hello_cancel (p2.th, &exchange_hello_last, &p2); - p2_hello_canceled = GNUNET_YES; - } - if (p1_hello_canceled == GNUNET_NO) - { - GNUNET_TRANSPORT_get_hello_cancel (p1.th, &exchange_hello, &p1); - p1_hello_canceled = GNUNET_YES; - } - die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, - &end_badly, NULL); - th_p2 = GNUNET_TRANSPORT_notify_transmit_ready (p2.th, - &p1.id, - get_size (0), 0, TIMEOUT, - ¬ify_ready, - NULL); - - } + char * p1_c = 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); + + // FIXME: THIS IS REQUIRED! SEEMS TO BE A BUG! + GNUNET_SCHEDULER_add_delayed(GNUNET_TIME_UNIT_SECONDS, &sendtask, NULL); } - static void -setup_peer (struct PeerContext *p, const char *cfgname) +run (void *cls, + char *const *args, + const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg) { - p->cfg = GNUNET_CONFIGURATION_create (); - GNUNET_assert (GNUNET_OK == GNUNET_CONFIGURATION_load (p->cfg, cfgname)); - if (GNUNET_CONFIGURATION_have_value (p->cfg,"PATHS", "SERVICEHOME")) - { - GNUNET_assert (GNUNET_OK == - GNUNET_CONFIGURATION_get_value_string (p->cfg, - "PATHS", "SERVICEHOME", - &p->servicehome)); - GNUNET_DISK_directory_remove (p->servicehome); - } + die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, + &end_badly, NULL); + + p1 = GNUNET_TRANSPORT_TESTING_start_peer(cfg_file_p1, + ¬ify_receive, + ¬ify_connect, + ¬ify_disconnect, + NULL); + p2 = GNUNET_TRANSPORT_TESTING_start_peer(cfg_file_p2, + ¬ify_receive, + ¬ify_connect, + ¬ify_disconnect, + NULL); + + GNUNET_TRANSPORT_TESTING_connect_peers(p1, p2, &testing_connect_cb, NULL); +} -#if START_ARM - p->arm_proc = GNUNET_OS_start_process (NULL, NULL, - "gnunet-service-arm", - "gnunet-service-arm", -#if VERBOSE_ARM - "-L", "DEBUG", +static int +check () +{ + static char *const argv[] = { "test-transport-api", + "-c", + "test_transport_api_data.conf", +#if VERBOSE + "-L", "DEBUG", #endif - "-c", cfgname, NULL); + NULL + }; + static struct GNUNET_GETOPT_CommandLineOption options[] = { + GNUNET_GETOPT_OPTION_END + }; + +#if WRITECONFIG + setTransportOptions("test_transport_api_data.conf"); #endif + ok = 1; + GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1, + argv, "test-transport-api", "nohelp", + options, &run, &ok); - if (is_https) - { - struct stat sbuf; - if (p==&p1) - { - if (GNUNET_CONFIGURATION_have_value (p->cfg, - "transport-https", "KEY_FILE")) - GNUNET_CONFIGURATION_get_value_string (p->cfg, "transport-https", "KEY_FILE", &key_file_p1); - if (key_file_p1 == NULL) - GNUNET_asprintf(&key_file_p1,"https_p1.key"); - if (0 == stat (key_file_p1, &sbuf )) - { - if (0 == remove(key_file_p1)) - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Successfully removed existing private key file `%s'\n", - key_file_p1); - else - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Failed to remove private key file `%s'\n", - key_file_p1); - } - if (GNUNET_CONFIGURATION_have_value (p->cfg,"transport-https", "CERT_FILE")) - GNUNET_CONFIGURATION_get_value_string (p->cfg, "transport-https", "CERT_FILE", &cert_file_p1); - if (cert_file_p1 == NULL) - GNUNET_asprintf(&cert_file_p1,"https_p1.cert"); - if (0 == stat (cert_file_p1, &sbuf )) - { - if (0 == remove(cert_file_p1)) - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Successfully removed existing certificate file `%s'\n", - cert_file_p1); - else - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Failed to remove existing certificate file `%s'\n", - cert_file_p1); - } - } - else if (p==&p2) - { - if (GNUNET_CONFIGURATION_have_value (p->cfg, - "transport-https", "KEY_FILE")) - GNUNET_CONFIGURATION_get_value_string (p->cfg, "transport-https", "KEY_FILE", &key_file_p2); - if (key_file_p2 == NULL) - GNUNET_asprintf(&key_file_p2,"https_p2.key"); - if (0 == stat (key_file_p2, &sbuf )) - { - if (0 == remove(key_file_p2)) - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Successfully removed existing private key file `%s'\n", - key_file_p2); - else - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Failed to remove private key file `%s'\n", - key_file_p2); - } - if (GNUNET_CONFIGURATION_have_value (p->cfg,"transport-https", "CERT_FILE")) - GNUNET_CONFIGURATION_get_value_string (p->cfg, "transport-https", "CERT_FILE", &cert_file_p2); - if (cert_file_p2 == NULL) - GNUNET_asprintf(&cert_file_p2,"https_p2.cert"); - if (0 == stat (cert_file_p2, &sbuf )) - { - if (0 == remove(cert_file_p2)) - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Successfully removed existing certificate file `%s'\n", - cert_file_p2); - else - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Failed to remove existing certificate file `%s'\n", - cert_file_p2); - } - } - } - p->th = GNUNET_TRANSPORT_connect (p->cfg, NULL, - p, - ¬ify_receive, - ¬ify_connect, - ¬ify_disconnect); - GNUNET_assert (p->th != NULL); + return ok; } - /** * Return the actual path to a file found in the current * PATH environment variable. @@ -685,231 +534,70 @@ check_gnunet_nat_binary(char *binary) #endif } - -static void -try_connect (void *cls, - const struct GNUNET_SCHEDULER_TaskContext *tc) -{ - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Asking peers to connect...\n"); - GNUNET_TRANSPORT_try_connect (p2.th, - &p1.id); - GNUNET_TRANSPORT_try_connect (p1.th, - &p2.id); - tct = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, - &try_connect, - NULL); -} - - -static void -run (void *cls, - char *const *args, - const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *cfg) +int +main (int argc, char *argv[]) { - GNUNET_assert (ok == 1); - OKPP; - die_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, - &end_badly, - NULL); - if (is_tcp) - { - setup_peer (&p1, "test_transport_api_tcp_peer1.conf"); - setup_peer (&p2, "test_transport_api_tcp_peer2.conf"); - } - else if (is_http) - { - setup_peer (&p1, "test_transport_api_rel_http_peer1.conf"); - setup_peer (&p2, "test_transport_api_rel_http_peer2.conf"); - } - else if (is_https) - { - setup_peer (&p1, "test_transport_api_rel_https_peer1.conf"); - setup_peer (&p2, "test_transport_api_rel_https_peer2.conf"); - } - else if (is_udp) - { - setup_peer (&p1, "test_transport_api_udp_peer1.conf"); - setup_peer (&p2, "test_transport_api_udp_peer2.conf"); - } - else if (is_unix) - { - setup_peer (&p1, "test_transport_api_unix_peer1.conf"); - setup_peer (&p2, "test_transport_api_unix_peer2.conf"); - } - else if (is_tcp_nat) - { - setup_peer (&p1, "test_transport_api_tcp_nat_peer1.conf"); - setup_peer (&p2, "test_transport_api_tcp_nat_peer2.conf"); - } - else if (is_wlan) - { - setup_peer (&p1, "test_transport_api_wlan_peer1.conf"); - setup_peer (&p2, "test_transport_api_wlan_peer2.conf"); - } - else - GNUNET_assert (0); - GNUNET_assert(p1.th != NULL); - GNUNET_assert(p2.th != NULL); - GNUNET_TRANSPORT_get_hello (p1.th, &exchange_hello, &p1); - p1_hello_canceled = GNUNET_NO; - GNUNET_TRANSPORT_get_hello (p2.th, &exchange_hello_last, &p2); - p2_hello_canceled = GNUNET_NO; - tct = GNUNET_SCHEDULER_add_now (&try_connect, NULL); -} - + int ret; -static int -check () -{ - char *const argv[] = { "test-transport-api-reliability", - "-c", - "test_transport_api_data.conf", + GNUNET_log_setup ("test-transport-api", #if VERBOSE - "-L", "DEBUG", -#endif - NULL - }; - struct GNUNET_GETOPT_CommandLineOption options[] = { - GNUNET_GETOPT_OPTION_END - }; - -#if WRITECONFIG - setTransportOptions("test_transport_api_data.conf"); + "DEBUG", +#else + "WARNING", #endif - ok = 1; - - if ((GNUNET_YES == is_tcp_nat) && (check_gnunet_nat_binary("gnunet-nat-server") != GNUNET_YES)) - { - GNUNET_log(GNUNET_ERROR_TYPE_WARNING, - "Not running NAT test case, binaries not properly installed.\n"); - return 0; - } + NULL); - GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1, - argv, "test-transport-api-reliability", "nohelp", - options, &run, &ok); - stop_arm (&p1); - stop_arm (&p2); + char * pch = strdup(argv[0]); + char * backup = pch; + char * filename = NULL; + char *dotexe; - if (is_https) + /* get executable filename */ + pch = strtok (pch,"/"); + while (pch != NULL) { - struct stat sbuf; - if (0 == stat (cert_file_p1, &sbuf )) - { - if (0 == remove(cert_file_p1)) - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Successfully removed existing certificate file `%s'\n", - cert_file_p1); - else - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Failed to remove certfile `%s'\n", - cert_file_p1); - } - - if (0 == stat (key_file_p1, &sbuf )) - { - if (0 == remove(key_file_p1)) - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Successfully removed private key file `%s'\n", - key_file_p1); - else - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Failed to private key file `%s'\n",key_file_p1); - } - - if (0 == stat (cert_file_p2, &sbuf )) - { - if (0 == remove(cert_file_p2)) - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Successfully removed existing certificate file `%s'\n", - cert_file_p2); - else - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Failed to remove certfile `%s'\n",cert_file_p2); - } - - if (0 == stat (key_file_p2, &sbuf )) - { - if (0 == remove(key_file_p2)) - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Successfully removed private key file `%s'\n", - key_file_p2); - else - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Failed to private key file `%s'\n", - key_file_p2); - } - GNUNET_free(key_file_p1); - GNUNET_free(key_file_p2); - GNUNET_free(cert_file_p1); - GNUNET_free(cert_file_p2); + pch = strtok (NULL, "/"); + if (pch != NULL) + filename = pch; } + /* remove "lt-" */ + filename = strstr(filename, "tes"); + if (NULL != (dotexe = strstr (filename, ".exe"))) + dotexe[0] = '\0'; - return ok; -} - - -int -main (int argc, char *argv[]) -{ - int ret; - - test_failed = GNUNET_NO; + /* create cfg filename */ + GNUNET_asprintf(&cfg_file_p1, "%s_peer1.conf",filename); + GNUNET_asprintf(&cfg_file_p2, "%s_peer2.conf", filename); + GNUNET_free (backup); if (strstr(argv[0], "tcp_nat") != NULL) { - is_tcp_nat = GNUNET_YES; - GNUNET_asprintf(&test_name, "tcp_nat"); - } - else if (strstr(argv[0], "tcp") != NULL) - { - is_tcp = GNUNET_YES; - GNUNET_asprintf(&test_name, "tcp"); - } - else if (strstr(argv[0], "https") != NULL) - { - is_https = GNUNET_YES; - GNUNET_asprintf(&test_name, "https"); - } - else if (strstr(argv[0], "http") != NULL) - { - is_http = GNUNET_YES; - GNUNET_asprintf(&test_name, "http"); - } - else if (strstr(argv[0], "udp") != NULL) - { - is_udp = GNUNET_YES; - GNUNET_asprintf(&test_name, "udp"); - } - else if (strstr(argv[0], "unix") != NULL) - { - is_unix = GNUNET_YES; - GNUNET_asprintf(&test_name, "unix"); + if (GNUNET_YES != check_gnunet_nat_binary("gnunet-nat-server")) + { + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, + "`%s' not properly installed, cannot run NAT test!\n", + "gnunet-nat-server"); + return 0; + } } - else if (strstr(argv[0], "wlan") != NULL) + else if (strstr(argv[0], "udp_nat") != NULL) { - is_wlan = GNUNET_YES; + if (GNUNET_YES != check_gnunet_nat_binary("gnunet-nat-server")) + { + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, + "`%s' not properly installed, cannot run NAT test!\n", + "gnunet-nat-server"); + return 0; + } } - GNUNET_log_setup ("test-transport-api-reliability", -#if VERBOSE - "DEBUG", -#else - "WARNING", -#endif - NULL); + ret = check (); - if (p1.servicehome != NULL) - { - GNUNET_DISK_directory_remove (p1.servicehome); - GNUNET_free (p1.servicehome); - } - if (p2.servicehome != NULL) - { - GNUNET_DISK_directory_remove (p2.servicehome); - GNUNET_free (p2.servicehome); - } + + GNUNET_free (cfg_file_p1); + GNUNET_free (cfg_file_p2); + return ret; } + /* end of test_transport_api_reliability.c */ diff --git a/src/transport/test_transport_api_reliability_http_peer1.conf b/src/transport/test_transport_api_reliability_http_peer1.conf new file mode 100644 index 000000000..bd1019845 --- /dev/null +++ b/src/transport/test_transport_api_reliability_http_peer1.conf @@ -0,0 +1,36 @@ +@INLINE@ test_transport_defaults.conf +[PATHS] +SERVICEHOME = /tmp/test-transport/api-http-p1/ +DEFAULTCONFIG = test_transport_api_reliability_http_peer1.conf + +[transport-tcp] +TIMEOUT = 5000 + +[transport-http] +PORT = 12180 +USE_IPv4 = YES +USE_IPv6 = NO +BINDTO4 = 127.0.0.1 + +[arm] +PORT = 12185 +UNIXPATH = /tmp/gnunet-p1-service-arm.sock + +[statistics] +PORT = 12184 +UNIXPATH = /tmp/gnunet-p1-service-statistics.sock + +[resolver] +PORT = 12183 +UNIXPATH = /tmp/gnunet-p1-service-resolver.sock + +[peerinfo] +PORT = 12182 +UNIXPATH = /tmp/gnunet-p1-service-peerinfo.sock + +[transport] +PORT = 12181 +PLUGINS = http +UNIXPATH = /tmp/gnunet-p1-service-transport.sock + + diff --git a/src/transport/test_transport_api_reliability_http_peer2.conf b/src/transport/test_transport_api_reliability_http_peer2.conf new file mode 100644 index 000000000..d4a156423 --- /dev/null +++ b/src/transport/test_transport_api_reliability_http_peer2.conf @@ -0,0 +1,33 @@ +@INLINE@ test_transport_defaults.conf +[PATHS] +SERVICEHOME = /tmp/test-transport/api-http-p2/ +DEFAULTCONFIG = test_transport_api_reliability_http_peer2.conf + +[transport-http] +PORT = 12190 +USE_IPv4 = YES +USE_IPv6 = NO +BINDTO4 = 127.0.0.1 + +[arm] +PORT = 12195 +UNIXPATH = /tmp/gnunet-p2-service-arm.sock + +[statistics] +PORT = 12194 +UNIXPATH = /tmp/gnunet-p2-service-statistics.sock + +[resolver] +PORT = 12193 +UNIXPATH = /tmp/gnunet-p2-service-resolver.sock + +[peerinfo] +PORT = 12192 +UNIXPATH = /tmp/gnunet-p2-service-peerinfo.sock + +[transport] +PORT = 12191 +PLUGINS = http +UNIXPATH = /tmp/gnunet-p2-service-transport.sock + + diff --git a/src/transport/test_transport_api_reliability_https_peer1.conf b/src/transport/test_transport_api_reliability_https_peer1.conf new file mode 100644 index 000000000..2a1e72334 --- /dev/null +++ b/src/transport/test_transport_api_reliability_https_peer1.conf @@ -0,0 +1,35 @@ +@INLINE@ test_transport_defaults.conf +[PATHS] +SERVICEHOME = /tmp/test-transport/api-https-p1/ +DEFAULTCONFIG = test_transport_api_reliability_https_peer1.conf + +[transport-https] +PORT = 12300 +CRYPTO_INIT = NONE:+VERS-TLS1.0:+ARCFOUR-128:+SHA1:+RSA:+COMP-NULL +KEY_FILE = $SERVICEHOME/https_key_p1.key +CERT_FILE = $SERVICEHOME/https_cert_p1.crt +USE_IPv4 = YES +USE_IPv6 = NO +BINDTO4 = 127.0.0.1 + +[arm] +PORT = 12305 +UNIXPATH = /tmp/gnunet-p1-service-arm.sock + +[statistics] +PORT = 12304 +UNIXPATH = /tmp/gnunet-p1-service-statistics.sock + +[resolver] +PORT = 12303 +UNIXPATH = /tmp/gnunet-p1-service-resolver.sock + +[peerinfo] +PORT = 12302 +UNIXPATH = /tmp/gnunet-p1-service-peerinfo.sock + +[transport] +PORT = 12301 +PLUGINS = https +UNIXPATH = /tmp/gnunet-p1-service-transport.sock + diff --git a/src/transport/test_transport_api_reliability_https_peer2.conf b/src/transport/test_transport_api_reliability_https_peer2.conf new file mode 100644 index 000000000..c4453503a --- /dev/null +++ b/src/transport/test_transport_api_reliability_https_peer2.conf @@ -0,0 +1,36 @@ +@INLINE@ test_transport_defaults.conf +[PATHS] +SERVICEHOME = /tmp/test-transport/api-https-p2/ +DEFAULTCONFIG = test_transport_api_reliability_https_peer2.conf + +[transport-https] +PORT = 12310 +CRYPTO_INIT = NONE:+VERS-TLS1.0:+ARCFOUR-128:+SHA1:+RSA:+COMP-NULL +KEY_FILE = $SERVICEHOME/https_key_p2.key +CERT_FILE = $SERVICEHOME/https_cert_p2.crt +USE_IPv4 = YES +USE_IPv6 = NO +BINDTO4 = 127.0.0.1 + +[arm] +PORT = 12315 +UNIXPATH = /tmp/gnunet-p2-service-arm.sock + +[statistics] +PORT = 12314 +UNIXPATH = /tmp/gnunet-p2-service-statistics.sock + +[resolver] +PORT = 12313 +UNIXPATH = /tmp/gnunet-p2-service-resolver.sock + +[peerinfo] +PORT = 12312 +UNIXPATH = /tmp/gnunet-p2-service-peerinfo.sock + +[transport] +PORT = 12311 +PLUGINS = https +UNIXPATH = /tmp/gnunet-p2-service-transport.sock + + diff --git a/src/transport/transport-testing.c b/src/transport/transport-testing.c index fab0fec5a..01419ce44 100644 --- a/src/transport/transport-testing.c +++ b/src/transport/transport-testing.c @@ -229,7 +229,10 @@ GNUNET_TRANSPORT_TESTING_start_peer (const char * cfgname, p->nc = nc; p->nd = nd; p->rec = rec; - p->cb_cls = cb_cls; + if (cb_cls != NULL) + p->cb_cls = cb_cls; + else + p->cb_cls = p; p->th = GNUNET_TRANSPORT_connect(p->cfg, NULL, p, diff --git a/src/transport/transport-testing.h b/src/transport/transport-testing.h index 5ea5cf3c3..10ef030f4 100644 --- a/src/transport/transport-testing.h +++ b/src/transport/transport-testing.h @@ -71,6 +71,7 @@ typedef void (*GNUNET_TRANSPORT_TESTING_connect_cb) (struct PeerContext * p1, st * @param nc connect callback * @param nd disconnect callback * @param cb_cls closure for callback + * if NULL passed the PeerContext * will be used! * @return the peer context */ struct PeerContext * -- cgit v1.2.3