X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Ftransport%2Ftest_plugin_transport_https.c;h=beda4c749b42d790cdb0e57fde1565499f7e739e;hb=11489754ee4b080b31dc68471e3dc3c7ae2885ce;hp=0e35bfc34720893fd08228d43dd361ec4eee4ca8;hpb=a0f7706c1f4441fbd79c20a7e0584050791ed206;p=oweals%2Fgnunet.git diff --git a/src/transport/test_plugin_transport_https.c b/src/transport/test_plugin_transport_https.c index 0e35bfc34..beda4c749 100644 --- a/src/transport/test_plugin_transport_https.c +++ b/src/transport/test_plugin_transport_https.c @@ -18,8 +18,8 @@ Boston, MA 02111-1307, USA. */ /** - * @file transport/test_plugin_transport_https.c - * @brief testcase for plugin_transport_https.c + * @file transport/test_gnunet_transport_plugin.https.c + * @brief testcase for gnunet_transport_plugin.https.c * @author Matthias Wachs */ @@ -37,24 +37,23 @@ #include "gnunet_service_lib.h" #include "gnunet_crypto_lib.h" -#include "plugin_transport.h" +#include "gnunet_transport_plugin.h" #include "gnunet_statistics_service.h" #include "transport.h" #include -#include -#include #define VERBOSE GNUNET_NO -#define DEBUG GNUNET_NO #define DEBUG_CURL GNUNET_NO #define HTTP_BUFFER_SIZE 2048 #define PLUGIN libgnunet_plugin_transport_template +#define PROTOCOL_PREFIX "https" + /** * How long until we give up on transmitting the message? */ -#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 90) +#define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 60) /** * Testcase timeout @@ -163,6 +162,10 @@ struct HTTP_Transfer */ struct IPv4HttpAddress { + struct IPv4HttpAddress * next; + + struct IPv4HttpAddress * prev; + /** * IPv4 address, in network byte order. */ @@ -181,6 +184,10 @@ struct IPv4HttpAddress */ struct IPv6HttpAddress { + struct IPv6HttpAddress * next; + + struct IPv6HttpAddress * prev; + /** * IPv6 address. */ @@ -223,11 +230,6 @@ static long long unsigned int port; */ static char * test_addr; -/** - * Our scheduler. - */ -struct GNUNET_SCHEDULER_Handle *sched; - /** * Our statistics handle. */ @@ -383,6 +385,10 @@ static CURLM *multi_handle; */ static GNUNET_SCHEDULER_TaskIdentifier http_task_send; + +static char * key_file; +static char * cert_file; + /** * Shutdown testcase */ @@ -396,22 +402,22 @@ shutdown_clean () fail = 0; if ((fail_notify_address == GNUNET_YES) || (fail_pretty_printer == GNUNET_YES) || (fail_addr_to_str == GNUNET_YES)) { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Phase 0: Test plugin functions failed\n"); + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Phase 0: Test plugin functions failed\n")); fail = 1; } if ((test_no_ident.test_failed == GNUNET_YES) || (test_too_short_ident.test_failed == GNUNET_YES) || (test_too_long_ident.test_failed == GNUNET_YES) || (test_valid_ident.test_failed == GNUNET_YES)) { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Phase 1: Test connect with wrong data failed\n"); + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Phase 1: Test connect with wrong data failed\n")); fail = 1; } if ((fail_session_selection_any != GNUNET_NO) || (fail_session_selection_reliable != GNUNET_NO) || (fail_session_selection_session != GNUNET_NO) || (fail_session_selection_session_big != GNUNET_NO)) { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Phase 2: Test session selection failed\n"); + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Phase 2: Test session selection failed\n")); fail = 1; } if ((fail_msgs_transmited_to_local_addrs != count_str_addr) || (fail_multiple_msgs_in_transmission != 2) || (fail_msg_transmited_max_size == GNUNET_YES)) { - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Phase 3: Test sending with plugin failed\n"); + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Phase 3: Test sending with plugin failed\n")); fail = 1; } if (fail != 1) @@ -438,28 +444,48 @@ shutdown_clean () if (ti_send != GNUNET_SCHEDULER_NO_TASK) { - GNUNET_SCHEDULER_cancel(sched,ti_send); + GNUNET_SCHEDULER_cancel(ti_send); ti_send = GNUNET_SCHEDULER_NO_TASK; } if (http_task_send != GNUNET_SCHEDULER_NO_TASK) { - GNUNET_SCHEDULER_cancel(sched,http_task_send); + GNUNET_SCHEDULER_cancel(http_task_send); http_task_send = GNUNET_SCHEDULER_NO_TASK; } if (ti_timeout != GNUNET_SCHEDULER_NO_TASK) { - GNUNET_SCHEDULER_cancel(sched,ti_timeout); + GNUNET_SCHEDULER_cancel(ti_timeout); ti_timeout = GNUNET_SCHEDULER_NO_TASK; } GNUNET_free(test_addr); - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Unloading http plugin\n"); - GNUNET_assert (NULL == GNUNET_PLUGIN_unload ("libgnunet_plugin_transport_http", api)); + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Unloading https plugin\n"); + GNUNET_assert (NULL == GNUNET_PLUGIN_unload ("libgnunet_gnunet_transport_plugin.https", api)); + + GNUNET_SCHEDULER_shutdown(); + GNUNET_DISK_directory_remove ("/tmp/test_gnunet_transport_plugin.http"); + + struct stat sbuf; + if (0 == stat (cert_file, &sbuf )) + { + if (0 == remove(cert_file)) + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Successfully removed existing certificate file `%s'\n",cert_file); + else + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to remove certfile `%s'\n",cert_file); + } + + if (0 == stat (key_file, &sbuf )) + { + if (0 == remove(key_file)) + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Successfully removed private key file `%s'\n",key_file); + else + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to private key file `%s'\n",key_file); + } - GNUNET_SCHEDULER_shutdown(sched); - GNUNET_DISK_directory_remove ("/tmp/test_plugin_transport_http"); + GNUNET_free (key_file); + GNUNET_free (cert_file); GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Exiting testcase\n"); exit(fail); @@ -676,41 +702,41 @@ static void send_execute (void *cls, { if ((res->http_result_code==404) && (buffer_in.len==208)) { - GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Connecting to peer without any peer identification: test passed\n")); + GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Connecting to peer without any peer identification: test passed\n"); res->test_failed = GNUNET_NO; } else - GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Connecting to peer without any peer identification: test failed\n")); + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Connecting to peer without any peer identification: test failed\n")); } if (res == &test_too_short_ident) { if ((res->http_result_code==404) && (buffer_in.len==208)) { - GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Connecting to peer with too short peer identification: test passed\n")); + GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Connecting to peer with too short peer identification: test passed\n"); res->test_failed = GNUNET_NO; } else - GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Connecting to peer with too short peer identification: test failed\n")); + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Connecting to peer with too short peer identification: test failed\n")); } if (res == &test_too_long_ident) { if ((res->http_result_code==404) && (buffer_in.len==208)) { - GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Connecting to peer with too long peer identification: test passed\n")); + GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Connecting to peer with too long peer identification: test passed\n"); res->test_failed = GNUNET_NO; } else - GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Connecting to peer with too long peer identification: test failed\n")); + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Connecting to peer with too long peer identification: test failed\n")); } if (res == &test_valid_ident) { if ((res->http_result_code==200)) { - GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Connecting to peer with valid peer identification: test passed\n")); + GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Connecting to peer with valid peer identification: test passed\n"); res->test_failed = GNUNET_NO; } else - GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Connecting to peer with valid peer identification: test failed\n")); + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Connecting to peer with valid peer identification: test failed\n")); } curl_easy_cleanup(curl_handle); curl_handle=NULL; @@ -773,8 +799,7 @@ static size_t send_prepare( struct HTTP_Transfer * result) gws = GNUNET_NETWORK_fdset_create (); GNUNET_NETWORK_fdset_copy_native (grs, &rs, max + 1); GNUNET_NETWORK_fdset_copy_native (gws, &ws, max + 1); - http_task_send = GNUNET_SCHEDULER_add_select (sched, - GNUNET_SCHEDULER_PRIORITY_DEFAULT, + http_task_send = GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_DEFAULT, GNUNET_SCHEDULER_NO_TASK, GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 0), grs, @@ -859,7 +884,7 @@ notify_address (void *cls, addrlen); return; } - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, _("Transport plugin notification for address: `%s':%u\n"), address, port); @@ -902,7 +927,6 @@ static void setup_plugin_environment () { env.cfg = cfg; - env.sched = sched; env.stats = stats; env.my_identity = &my_identity; env.cls = &env; @@ -963,7 +987,7 @@ static void run_connection_tests( int phase , void * cls) { /* Connecting to peer without identification */ char * ident = ""; - GNUNET_asprintf (&host_str, "https://%s/%s",test_addr,ident); + GNUNET_asprintf (&host_str, "%s://%s/%s",PROTOCOL_PREFIX, test_addr,ident); GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Connecting to peer without any peer identification.\n")); test_no_ident.test_executed = GNUNET_YES; send_data ( &test_no_ident, host_str); @@ -974,7 +998,7 @@ static void run_connection_tests( int phase , void * cls) { char * ident = "AAAAAAAAAA"; /* Connecting to peer with too short identification */ - GNUNET_asprintf (&host_str, "https://%s/%s",test_addr,ident); + GNUNET_asprintf (&host_str, "%s://%s/%s",PROTOCOL_PREFIX, test_addr,ident); GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Connecting to peer with too short peer identification.\n")); test_too_short_ident.test_executed = GNUNET_YES; send_data ( &test_too_short_ident, host_str); @@ -987,7 +1011,7 @@ static void run_connection_tests( int phase , void * cls) char * ident = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; /* Connecting to peer with too long identification */ - GNUNET_asprintf (&host_str, "https://%s/%s",test_addr,ident); + GNUNET_asprintf (&host_str, "%s://%s/%s",PROTOCOL_PREFIX, test_addr,ident); GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Connecting to peer with too long peer identification.\n")); test_too_long_ident.test_executed = GNUNET_YES; send_data ( &test_too_long_ident, host_str); @@ -998,7 +1022,7 @@ static void run_connection_tests( int phase , void * cls) { struct GNUNET_CRYPTO_HashAsciiEncoded ident; GNUNET_CRYPTO_hash_to_enc(&my_identity.hashPubKey,&ident); - GNUNET_asprintf (&host_str, "https://%s/%s%s",test_addr,(char *) &ident,";0"); + GNUNET_asprintf (&host_str, "%s://%s/%s%s",PROTOCOL_PREFIX, test_addr,(char *) &ident,";0"); GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Connecting to peer with valid peer identification.\n")); test_valid_ident.test_executed = GNUNET_YES; send_data ( &test_valid_ident, host_str); @@ -1118,24 +1142,20 @@ static void run_connection_tests( int phase , void * cls) * Runs the test. * * @param cls closure - * @param s scheduler to use * @param c configuration to use */ static void run (void *cls, - struct GNUNET_SCHEDULER_Handle *s, char *const *args, const char *cfgfile, const struct GNUNET_CONFIGURATION_Handle *c) { char * libname; - sched = s; cfg = c; char *keyfile; unsigned long long tneigh; struct Plugin_Address * cur; const char * addr_str; - - + struct stat sbuf; unsigned int suggest_res; fail_pretty_printer = GNUNET_YES; @@ -1165,7 +1185,7 @@ run (void *cls, GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _ ("Transport service is lacking key configuration settings. Exiting.\n")); - GNUNET_SCHEDULER_shutdown (s); + GNUNET_SCHEDULER_shutdown (); fail = 1; return; } @@ -1184,6 +1204,46 @@ run (void *cls, "transport-http"); } + /* Get private key file from config */ + if (GNUNET_CONFIGURATION_have_value (cfg, + "transport-https", "KEY_FILE")) + { + GNUNET_CONFIGURATION_get_value_string (cfg, + "transport-https", + "KEY_FILE", + &key_file); + } + if (key_file == NULL) + GNUNET_asprintf(&key_file,"https.key"); + + if (0 == stat (key_file, &sbuf )) + { + if (0 == remove(key_file)) + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Successfully removed existing private key file `%s'\n",key_file); + else + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to remove private key file `%s'\n",key_file); + } + + /* Get private key file from config */ + if (GNUNET_CONFIGURATION_have_value (cfg, + "transport-https", "CERT_FILE")) + { + GNUNET_CONFIGURATION_get_value_string (cfg, + "transport-https", + "CERT_FILE", + &cert_file); + } + if (cert_file == NULL) + GNUNET_asprintf(&cert_file,"https.cert"); + + if (0 == stat (cert_file, &sbuf )) + { + if (0 == remove(cert_file)) + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Successfully removed existing certificate file `%s'\n",cert_file); + else + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to remove existing certificate file `%s'\n",cert_file); + } + max_connect_per_transport = (uint32_t) tneigh; my_private_key = GNUNET_CRYPTO_rsa_key_create_from_file (keyfile); GNUNET_free (keyfile); @@ -1191,7 +1251,7 @@ run (void *cls, { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, _("Transport service could not access hostkey. Exiting.\n")); - GNUNET_SCHEDULER_shutdown (s); + GNUNET_SCHEDULER_shutdown (); fail = 1; return; } @@ -1206,8 +1266,8 @@ run (void *cls, /* load plugins... */ setup_plugin_environment (); - GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Loading HTTPS transport plugin `%s'\n"),"libgnunet_plugin_transport_http"); GNUNET_asprintf (&libname, "libgnunet_plugin_transport_https"); + GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Loading HTTPS transport plugin `%s'\n"),libname); api = GNUNET_PLUGIN_load (libname, &env); GNUNET_free (libname); if (api == NULL) @@ -1218,7 +1278,7 @@ run (void *cls, return; } - ti_timeout = GNUNET_SCHEDULER_add_delayed (sched, TEST_TIMEOUT, &task_timeout, NULL); + ti_timeout = GNUNET_SCHEDULER_add_delayed (TEST_TIMEOUT, &task_timeout, NULL); /* testing plugin functionality */ GNUNET_assert (0!=fail_notify_address_count); @@ -1245,12 +1305,7 @@ run (void *cls, fail_pretty_printer=GNUNET_NO; fail_addr_to_str=GNUNET_NO; - /* Suggesting addresses with wrong port*/ struct IPv4HttpAddress failing_addr; - failing_addr.ipv4_addr = htonl(INADDR_LOOPBACK); - failing_addr.u_port = htons(0); - suggest_res = api->check_address (api->cls,&failing_addr,sizeof (struct IPv4HttpAddress)); - GNUNET_assert (GNUNET_SYSERR == suggest_res); /* Suggesting addresses with wrong size*/ failing_addr.ipv4_addr = htonl(INADDR_LOOPBACK); @@ -1321,7 +1376,7 @@ main (int argc, char *const *argv) }; int ret; char *const argv_prog[] = { - "test_plugin_transport_https", + "test_gnunet_transport_plugin.https", "-c", "test_plugin_transport_data_http.conf", "-L", @@ -1332,7 +1387,7 @@ main (int argc, char *const *argv) #endif NULL }; - GNUNET_log_setup ("test_plugin_transport_https", + GNUNET_log_setup ("test_gnunet_transport_plugin.https", #if VERBOSE "DEBUG", #else @@ -1343,12 +1398,12 @@ main (int argc, char *const *argv) ret = (GNUNET_OK == GNUNET_PROGRAM_run (5, argv_prog, - "test_plugin_transport_https", + "test_gnunet_transport_plugin.https", "testcase", options, &run, NULL)) ? GNUNET_NO : GNUNET_YES; - GNUNET_DISK_directory_remove ("/tmp/test_plugin_transport_https"); + GNUNET_DISK_directory_remove ("/tmp/test_gnunet_transport_plugin.https"); return fail; } -/* end of test_plugin_transport_http.c */ +/* end of test_gnunet_transport_plugin.http.c */