X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fstream%2Ftest_stream_sequence_wraparound.c;h=f231716614dfddafff3fc101ee6dff245f147279;hb=d0b4927e6ab7e8b9874dd7807055e77fb4c5163f;hp=b71e96b270ec4cc46cea28b1309f58fcb7ddec68;hpb=a31b6d486baee50c455914f292c2f14e52e398f8;p=oweals%2Fgnunet.git diff --git a/src/stream/test_stream_sequence_wraparound.c b/src/stream/test_stream_sequence_wraparound.c index b71e96b27..f23171661 100644 --- a/src/stream/test_stream_sequence_wraparound.c +++ b/src/stream/test_stream_sequence_wraparound.c @@ -29,11 +29,17 @@ #include "platform.h" #include "gnunet_util_lib.h" #include "gnunet_stream_lib.h" -#include "gnunet_testing_lib.h" +#include "gnunet_testing_lib-new.h" +/** + * Generic logging shorthand + */ #define LOG(kind, ...) \ GNUNET_log (kind, __VA_ARGS__); +/** + * Relative seconds shorthand + */ #define TIME_REL_SECS(sec) \ GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, sec) @@ -68,14 +74,14 @@ struct PeerData unsigned int bytes_read; }; -static struct GNUNET_OS_Process *arm_pid; static struct PeerData peer1; static struct PeerData peer2; static struct GNUNET_STREAM_ListenSocket *peer2_listen_socket; -static struct GNUNET_CONFIGURATION_Handle *config; +static const struct GNUNET_CONFIGURATION_Handle *config; +static struct GNUNET_TESTING_Peer *self; +static struct GNUNET_PeerIdentity self_id; static GNUNET_SCHEDULER_TaskIdentifier abort_task; -static GNUNET_SCHEDULER_TaskIdentifier test_task; static GNUNET_SCHEDULER_TaskIdentifier read_task; static GNUNET_SCHEDULER_TaskIdentifier write_task; @@ -89,7 +95,8 @@ static int result; static void do_shutdown (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { - GNUNET_STREAM_close (peer1.socket); + if (NULL != peer1.socket) + GNUNET_STREAM_close (peer1.socket); if (NULL != peer2.socket) GNUNET_STREAM_close (peer2.socket); if (NULL != peer2_listen_socket) @@ -99,16 +106,6 @@ do_shutdown (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { GNUNET_SCHEDULER_cancel (abort_task); } - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test: arm\n"); - if (0 != GNUNET_OS_process_kill (arm_pid, SIGTERM)) - { - GNUNET_log_strerror (GNUNET_ERROR_TYPE_WARNING, "kill"); - } - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test: Wait\n"); - /* Free the duplicated configuration */ - GNUNET_CONFIGURATION_destroy (config); - GNUNET_assert (GNUNET_OK == GNUNET_OS_process_wait (arm_pid)); - GNUNET_OS_process_destroy (arm_pid); } @@ -119,11 +116,7 @@ static void do_abort (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test: ABORT\n"); - if (0 != test_task) - { - GNUNET_SCHEDULER_cancel (test_task); - } - if (0 != read_task) + if (GNUNET_SCHEDULER_NO_TASK != read_task) { GNUNET_SCHEDULER_cancel (read_task); } @@ -150,7 +143,7 @@ write_completion (void *cls, peer = (struct PeerData *) cls; GNUNET_assert (GNUNET_STREAM_OK == status); - GNUNET_assert (size < DATA_SIZE); + GNUNET_assert (size <= DATA_SIZE); peer->bytes_wrote += size; if (peer->bytes_wrote < DATA_SIZE) /* Have more data to send */ @@ -263,13 +256,6 @@ input_processor (void *cls, { GNUNET_assert (GNUNET_SCHEDULER_NO_TASK == read_task); read_task = GNUNET_SCHEDULER_add_now (&stream_read_task, &peer2); - /* peer->io_read_handle = GNUNET_STREAM_read ((struct GNUNET_STREAM_Socket *) */ - /* peer->socket, */ - /* GNUNET_TIME_relative_multiply */ - /* (GNUNET_TIME_UNIT_SECONDS, 5), */ - /* &input_processor, */ - /* cls); */ - /* GNUNET_assert (NULL != peer->io_read_handle); */ } else { @@ -316,12 +302,18 @@ stream_listen_cb (void *cls, struct GNUNET_STREAM_Socket *socket, const struct GNUNET_PeerIdentity *initiator) { + if ((NULL == socket) || (NULL == initiator)) + { + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Binding error\n"); + if (GNUNET_SCHEDULER_NO_TASK != abort_task) + GNUNET_SCHEDULER_cancel (abort_task); + abort_task = GNUNET_SCHEDULER_add_now (&do_abort, NULL); + return GNUNET_OK; + } GNUNET_assert (NULL != socket); GNUNET_assert (socket != peer1.socket); - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Peer connected: %s\n", GNUNET_i2s(initiator)); - peer2.socket = socket; peer2.bytes_read = 0; read_task = GNUNET_SCHEDULER_add_now (&stream_read_task, &peer2); @@ -330,57 +322,23 @@ stream_listen_cb (void *cls, /** - * Task for connecting the peer to stream as client - * - * @param cls PeerData - * @param tc the TaskContext - */ -static void -stream_connect (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) -{ - struct PeerData *peer = cls; - struct GNUNET_PeerIdentity self; - - GNUNET_assert (&peer1 == peer); - GNUNET_assert (GNUNET_OK == GNUNET_TESTING_get_peer_identity (config, - &self)); - /* Connect to stream */ - peer->socket = GNUNET_STREAM_open (config, - &self, /* Null for local peer? */ - 10, /* App port */ - &stream_open_cb, - &peer1, - GNUNET_STREAM_OPTION_TESTING_SET_WRITE_SEQUENCE_NUMBER, - UINT32_MAX - GNUNET_CRYPTO_random_u32 - (GNUNET_CRYPTO_QUALITY_WEAK, 64), - GNUNET_STREAM_OPTION_END); - GNUNET_assert (NULL != peer->socket); -} - - -/** - * Testing function - * - * @param cls NULL - * @param tc the task context + * Listen success callback; connects a peer to stream as client */ static void -test (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +stream_connect (void) { - struct GNUNET_PeerIdentity self; - - test_task = GNUNET_SCHEDULER_NO_TASK; - /* Get our identity */ - GNUNET_assert (GNUNET_OK == GNUNET_TESTING_get_peer_identity (config, - &self)); - - peer2_listen_socket = GNUNET_STREAM_listen (config, - 10, /* App port */ - &stream_listen_cb, - NULL, - GNUNET_STREAM_OPTION_END); - GNUNET_assert (NULL != peer2_listen_socket); - GNUNET_SCHEDULER_add_delayed (TIME_REL_SECS(2), &stream_connect, &peer1); + peer1.socket = + GNUNET_STREAM_open (config, + &self_id, /* Null for local peer? */ + 10, /* App port */ + &stream_open_cb, + &peer1, + GNUNET_STREAM_OPTION_TESTING_SET_WRITE_SEQUENCE_NUMBER, + UINT32_MAX - GNUNET_CRYPTO_random_u32 + (GNUNET_CRYPTO_QUALITY_WEAK, 64), + GNUNET_STREAM_OPTION_MAX_PAYLOAD_SIZE, 500, + GNUNET_STREAM_OPTION_END); + GNUNET_assert (NULL != peer1.socket); } @@ -388,58 +346,41 @@ test (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) * Initialize framework and start test */ static void -run (void *cls, char *const *args, const char *cfgfile, - const struct GNUNET_CONFIGURATION_Handle *cfg) +run (void *cls, + const struct GNUNET_CONFIGURATION_Handle *cfg, + struct GNUNET_TESTING_Peer *peer) { - /* Duplicate the configuration */ - config = GNUNET_CONFIGURATION_dup (cfg); - arm_pid = - GNUNET_OS_start_process (GNUNET_YES, NULL, NULL, "gnunet-service-arm", - "gnunet-service-arm", -#if VERBOSE_ARM - "-L", "DEBUG", -#endif - "-c", "test_stream_local.conf", NULL); - + config = cfg; + self = peer; + (void) GNUNET_TESTING_peer_get_identity (peer, &self_id); + peer2_listen_socket = + GNUNET_STREAM_listen (config, + 10, /* App port */ + &stream_listen_cb, + NULL, + GNUNET_STREAM_OPTION_LISTEN_TIMEOUT, + 60 * 1000, + GNUNET_STREAM_OPTION_SIGNAL_LISTEN_SUCCESS, + &stream_connect, + GNUNET_STREAM_OPTION_END); + GNUNET_assert (NULL != peer2_listen_socket); abort_task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply - (GNUNET_TIME_UNIT_SECONDS, 60), &do_abort, + (GNUNET_TIME_UNIT_SECONDS, 100), &do_abort, NULL); - test_task = GNUNET_SCHEDULER_add_delayed (TIME_REL_SECS(3), &test, NULL); } + /** * Main function */ int main (int argc, char **argv) { - int ret; - - char *const argv2[] = { "test-stream-big", - "-c", "test_stream_local.conf", - "-L", "DEBUG", - NULL - }; - - struct GNUNET_GETOPT_CommandLineOption options[] = { - GNUNET_GETOPT_OPTION_END - }; - - ret = - GNUNET_PROGRAM_run ((sizeof (argv2) / sizeof (char *)) - 1, argv2, - "test-stream-big", "nohelp", options, &run, NULL); - - if (GNUNET_OK != ret) - { - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "run failed with error code %d\n", - ret); + if (0 != GNUNET_TESTING_peer_run ("test_stream_sequence_wraparound", + "test_stream_local.conf", + &run, NULL)) return 1; - } - if (GNUNET_SYSERR == result) - { - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "test failed\n"); - return 1; - } - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "test ok\n"); - return 0; + return (GNUNET_SYSERR == result) ? 1 : 0; } + +/* end of test_stream_sequence_wraparound.c */