From: Martin Schanzenbach Date: Fri, 2 Mar 2012 21:07:39 +0000 (+0000) Subject: -new test, fixes, config X-Git-Tag: initial-import-from-subversion-38251~14486 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=a6a79444fe668dcef85a6ca272daca3eb3e80540;p=oweals%2Fgnunet.git -new test, fixes, config --- diff --git a/src/gns/Makefile.am b/src/gns/Makefile.am index 993aac2a1..d5753290c 100644 --- a/src/gns/Makefile.am +++ b/src/gns/Makefile.am @@ -16,7 +16,7 @@ pkgcfg_DATA = \ gns.conf lib_LTLIBRARIES = \ - libgnunetgns.la libgnunetnamestore.la + libgnunetgns.la bin_PROGRAMS = \ gnunet-service-gns @@ -28,19 +28,30 @@ check_SCRIPTS = \ test_gnunet_gns.sh check_PROGRAMS = \ - test_gns_twopeer + test_gns_simple_lookup plugin_LTLIBRARIES = \ libgnunet_plugin_block_gns.la -test_gns_twopeer_SOURCES = \ - test_gns_twopeer.c -test_gns_twopeer_LDADD = \ +#test_gns_twopeer_SOURCES = \ +# test_gns_twopeer.c +#test_gns_twopeer_LDADD = \ +# $(top_builddir)/src/util/libgnunetutil.la \ +# $(top_builddir)/src/namestore/libgnunetnamestore.la \ +# $(top_builddir)/src/testing/libgnunettesting.la +#test_gns_twopeer_DEPENDENCIES = \ +# $(top_builddir)/src/util/libgnunetutil.la \ +# $(top_builddir)/src/namestore/libgnunetnamestore.la \ +# $(top_builddir)/src/testing/libgnunettesting.la + +test_gns_simple_lookup_SOURCES = \ + test_gns_simple_lookup.c +test_gns_simple_lookup_LDADD = \ $(top_builddir)/src/util/libgnunetutil.la \ $(top_builddir)/src/namestore/libgnunetnamestore.la \ $(top_builddir)/src/testing/libgnunettesting.la -test_gns_twopeer_DEPENDENCIES = \ +test_gns_simple_lookup_DEPENDENCIES = \ $(top_builddir)/src/util/libgnunetutil.la \ $(top_builddir)/src/namestore/libgnunetnamestore.la \ $(top_builddir)/src/testing/libgnunettesting.la @@ -114,4 +125,4 @@ endif EXTRA_DIST = \ $(check_SCRIPTS) \ - test_gns_twopeer.conf + test_gns_simple_lookup.conf diff --git a/src/gns/gns.conf.in b/src/gns/gns.conf.in index 422efdbb7..674d78be1 100644 --- a/src/gns/gns.conf.in +++ b/src/gns/gns.conf.in @@ -5,13 +5,6 @@ HOME = $SERVICEHOME CONFIG = $DEFAULTCONFIG BINARY = gnunet-service-gns UNIXPATH = /tmp/gnunet-service-gns.sock -ZONEKEY = /tmp/zonekey -TRUSTED = bob:/tmp/bobkey +ZONEKEY = $SERVICEHOME/zonekey HIJACK_DNS = YES OPTIONS = -L INFO - -# Access to this service can compromise all DNS queries in this -# system. Thus access should be restricted to the same UID. -# (see https://gnunet.org/gnunet-access-control-model) -UNIX_MATCH_UID = YES -UNIX_MATCH_GID = YES diff --git a/src/gns/gnunet-service-gns.c b/src/gns/gnunet-service-gns.c index 2a31e5e61..af5468eba 100644 --- a/src/gns/gnunet-service-gns.c +++ b/src/gns/gnunet-service-gns.c @@ -158,7 +158,8 @@ static void shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) { /* Kill zone task for it may make the scheduler hang */ - GNUNET_SCHEDULER_cancel(zone_update_taskid); + if (zone_update_taskid) + GNUNET_SCHEDULER_cancel(zone_update_taskid); GNUNET_DNS_disconnect(dns_handle); GNUNET_NAMESTORE_disconnect(namestore_handle, 1); @@ -1356,48 +1357,6 @@ run (void *cls, struct GNUNET_SERVER_Handle *server, return; } - char* trusted_start; - char* trusted_name; - char *trusted_key; - int trusted_len; - if (GNUNET_OK == GNUNET_CONFIGURATION_get_value_string (c, "gns", - "TRUSTED", - &trusted_entities)) - { - trusted_start = trusted_entities; - trusted_len = strlen(trusted_entities); - GNUNET_log(GNUNET_ERROR_TYPE_INFO, - "Found trusted entities in config file, importing\n"); - while ((trusted_entities-trusted_start) < trusted_len) - { - trusted_name = trusted_entities; - while (*trusted_entities != ':') - trusted_entities++; - *trusted_entities = '\0'; - trusted_entities++; - trusted_key = trusted_entities; - while (*trusted_entities != ',' && (*trusted_entities != '\0')) - trusted_entities++; - *trusted_entities = '\0'; - trusted_entities++; - - if (GNUNET_YES == GNUNET_DISK_file_test (trusted_key)) - { - GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Adding %s:%s to root zone\n", - trusted_name, - trusted_key); - put_trusted(trusted_name, trusted_key); - } - else - { - GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Keyfile %s does not exist!\n", - trusted_key); - //put_trusted(trusted_name, trusted_key); //FIXME for testing - } - } - - } - /** * handle to the dht */ @@ -1408,7 +1367,7 @@ run (void *cls, struct GNUNET_SERVER_Handle *server, GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Could not connect to DHT!\n"); } - put_some_records(); //FIXME for testing + //put_some_records(); //FIXME for testing /** * Schedule periodic put diff --git a/src/gns/proxy/proxy.py b/src/gns/proxy/proxy.py index ee5eb41ec..ffa47ee9f 100644 --- a/src/gns/proxy/proxy.py +++ b/src/gns/proxy/proxy.py @@ -1,5 +1,15 @@ #!/usr/bin/python +""" +Copyright (c) 2001 SUZUKI Hisao + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +""" + __doc__ = """Tiny HTTP Proxy. This module implements GET, HEAD, POST, PUT and DELETE methods diff --git a/src/gns/test_gns_simple_lookup.c b/src/gns/test_gns_simple_lookup.c new file mode 100644 index 000000000..d58c5ff65 --- /dev/null +++ b/src/gns/test_gns_simple_lookup.c @@ -0,0 +1,294 @@ +/* + This file is part of GNUnet. + (C) 2009 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 gns/test_gns_twopeer.c + * @brief base testcase for testing DHT service with + * two running peers. + * + * This testcase starts peers using the GNUNET_TESTING_daemons_start + * function call. On peer start, connects to the peers DHT service + * by calling GNUNET_DHT_connected. Once notified about all peers + * being started (by the peers_started_callback function), calls + * GNUNET_TESTING_connect_topology, which connects the peers in a + * "straight line" topology. On notification that all peers have + * been properly connected, calls the do_get function which initiates + * a GNUNET_DHT_get from the *second* peer. Once the GNUNET_DHT_get + * function starts, runs the do_put function to insert data at the first peer. + * If the GET is successful, schedules finish_testing + * to stop the test and shut down peers. If GET is unsuccessful + * after GET_TIMEOUT seconds, prints an error message and shuts down + * the peers. + */ +#include "platform.h" +#include "gnunet_testing_lib.h" +#include "gnunet_core_service.h" +#include "block_dns.h" +#include "gnunet_signatures.h" +#include "gnunet_namestore_service.h" +#include "gnunet_dnsparser_lib.h" +#include "gnunet_gns_service.h" + +/* DEFINES */ +#define VERBOSE GNUNET_YES + +/* Timeout for entire testcase */ +#define TIMEOUT GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 10) + +/* If number of peers not in config file, use this number */ +#define DEFAULT_NUM_PEERS 2 + +/* test records to resolve */ +#define TEST_DOMAIN "www.gnunet" +#define TEST_IP +#define TEST_RECORD_NAME "www" + +/* Globals */ + +/** + * Directory to store temp data in, defined in config file + */ +static char *test_directory; + +struct GNUNET_TESTING_Daemon *d1; + + +/* Task handle to use to schedule test failure */ +GNUNET_SCHEDULER_TaskIdentifier die_task; + +/* Global return value (0 for success, anything else for failure) */ +static int ok; + +static struct GNUNUET_NAMESTORE_Handle *namestore_handle; + +const struct GNUNET_CONFIGURATION_Handle *cfg; + +/** + * Check whether peers successfully shut down. + */ +void +shutdown_callback (void *cls, const char *emsg) +{ + if (emsg != NULL) + { + if (ok == 0) + ok = 2; + } + + GNUNET_log (GNUNET_ERROR_TYPE_INFO, "done(ret=%d)!\n", ok); +} + +/** + * Function scheduled to be run on the successful completion of this + * testcase. Specifically, called when our get request completes. + */ +static void +finish_testing (void *cls, int32_t success, const char *emsg) +{ + struct hostent *he; + struct in_addr a; + char* addr; + + GNUNET_NAMESTORE_disconnect(namestore_handle, GNUNET_YES); + + he = gethostbyname (TEST_DOMAIN); + + if (!he) + { + ok = 2; + } + else + { + ok = 1; + GNUNET_log (GNUNET_ERROR_TYPE_INFO, "name: %s\n", he->h_name); + while (*he->h_addr_list) + { + memcpy(&a, *he->h_addr_list++, sizeof(a)); + addr = inet_ntoa(a); + GNUNET_log (GNUNET_ERROR_TYPE_INFO, "address: %s\n", addr); + if (0 == strcmp(addr, TEST_IP)) + { + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "%s correctly resolved to %s!\n", TEST_DOMAIN, addr); + ok = 0; + } + else + { + GNUNET_log (GNUNET_ERROR_TYPE_INFO, "No resolution!\n"); + } + } + } + GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Shutting down peer1!\n"); + GNUNET_TESTING_daemon_stop (d1, TIMEOUT, &shutdown_callback, NULL, + GNUNET_YES, GNUNET_NO); +} + +/** + * Continuation for the GNUNET_DHT_get_stop call, so that we don't shut + * down the peers without freeing memory associated with GET request. + */ +static void +end_badly_cont (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +{ + + if (d1 != NULL) + GNUNET_TESTING_daemon_stop (d1, TIMEOUT, &shutdown_callback, NULL, + GNUNET_YES, GNUNET_NO); + GNUNET_SCHEDULER_cancel (die_task); +} + +/** + * Check if the get_handle is being used, if so stop the request. Either + * way, schedule the end_badly_cont function which actually shuts down the + * test. + */ +static void +end_badly (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +{ + GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Failing test with error: `%s'!\n", + (char *) cls); + GNUNET_SCHEDULER_add_now (&end_badly_cont, NULL); + ok = 1; +} + +static void +do_lookup(void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +{ + struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded alice_pkey; + struct GNUNET_CRYPTO_RsaPrivateKey *alice_key; + char* alice_keyfile; + + GNUNET_SCHEDULER_cancel (die_task); + + /* put records into namestore */ + namestore_handle = GNUNET_NAMESTORE_connect(cfg); + if (NULL == namestore_handle) + { + GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Failed to connect to namestore\n"); + ok = -1; + return; + } + + if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_string (cfg, "gns", + "ZONEKEY", + &alice_keyfile)) + { + GNUNET_log(GNUNET_ERROR_TYPE_ERROR, "Failed to get alice's key from cfg\n"); + ok = -1; + return; + } + + alice_key = GNUNET_CRYPTO_rsa_key_create_from_file (alice_keyfile); + + GNUNET_CRYPTO_rsa_key_get_public (alice_key, &alice_pkey); + + struct GNUNET_NAMESTORE_RecordData rd; + char* ip = TEST_IP; + struct in_addr *web = GNUNET_malloc(sizeof(struct in_addr)); + rd.expiration = GNUNET_TIME_absolute_get_forever (); + GNUNET_assert(1 == inet_pton (AF_INET, ip, web)); + rd.data_size = sizeof(struct in_addr); + rd.data = web; + rd.record_type = GNUNET_DNSPARSER_TYPE_A; + + GNUNET_NAMESTORE_record_create (namestore_handle, + alice_key, + TEST_RECORD_NAME, + &rd, + &finish_testing, + NULL); + +} + +static void +run (void *cls, char *const *args, const char *cfgfile, + const struct GNUNET_CONFIGURATION_Handle *c) +{ + cfg = c; + /* Get path from configuration file */ + if (GNUNET_YES != + GNUNET_CONFIGURATION_get_value_string (cfg, "paths", "servicehome", + &test_directory)) + { + ok = 404; + return; + } + + + /* Set up a task to end testing if peer start fails */ + die_task = + GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_badly, + "didn't start all daemons in reasonable amount of time!!!"); + + /* Start alice */ + d1 = GNUNET_TESTING_daemon_start(cfg, TIMEOUT, GNUNET_NO, NULL, NULL, 0, + NULL, NULL, NULL, &do_lookup, NULL); +} + +static int +check () +{ + int ret; + + /* Arguments for GNUNET_PROGRAM_run */ + char *const argv[] = { "test-gns-simple-lookup", /* Name to give running binary */ + "-c", + "test_gns_simple_lookup.conf", /* Config file to use */ +#if VERBOSE + "-L", "DEBUG", +#endif + NULL + }; + struct GNUNET_GETOPT_CommandLineOption options[] = { + GNUNET_GETOPT_OPTION_END + }; + /* Run the run function as a new program */ + ret = + GNUNET_PROGRAM_run ((sizeof (argv) / sizeof (char *)) - 1, argv, + "test-gns-simple-lookup", "nohelp", options, &run, + &ok); + if (ret != GNUNET_OK) + { + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, + "`test-gns-simple-lookup': Failed with error code %d\n", ret); + } + return ok; +} + +int +main (int argc, char *argv[]) +{ + int ret; + + GNUNET_log_setup ("test-gns-simple-lookup", +#if VERBOSE + "DEBUG", +#else + "WARNING", +#endif + NULL); + ret = check (); + /** + * Need to remove base directory, subdirectories taken care + * of by the testing framework. + */ + return ret; +} + +/* end of test_gns_twopeer.c */ diff --git a/src/gns/test_gns_simple_lookup.conf b/src/gns/test_gns_simple_lookup.conf new file mode 100644 index 000000000..cce30fc42 --- /dev/null +++ b/src/gns/test_gns_simple_lookup.conf @@ -0,0 +1,81 @@ +[fs] +AUTOSTART = NO + +[resolver] +AUTOSTART = NO +HOSTNAME = localhost + +[dht] +DEBUG = NO +AUTOSTART = YES +ACCEPT_FROM6 = ::1; +ACCEPT_FROM = 127.0.0.1; +HOSTNAME = localhost +PORT = 2100 +BINARY = gnunet-service-dht + +[block] +plugins = dht test gns + +[dhtcache] +QUOTA = 1 MB +DATABASE = sqlite + +[transport] +PLUGINS = tcp +DEBUG = NO +ACCEPT_FROM6 = ::1; +ACCEPT_FROM = 127.0.0.1; +NEIGHBOUR_LIMIT = 50 +PORT = 12365 + +[ats] +WAN_QUOTA_IN = 1 GB +WAN_QUOTA_OUT = 1 GB + +[core] +PORT = 12092 + +[arm] +DEFAULTSERVICES = core namestore gns +PORT = 12366 +DEBUG = NO + +[transport-tcp] +TIMEOUT = 300 s +PORT = 12368 +BINDTO = 127.0.0.1 + +[TESTING] +WEAKRANDOM = YES + +[gnunetd] +HOSTKEY = $SERVICEHOME/.hostkey + +[PATHS] +DEFAULTCONFIG = gns.conf +SERVICEHOME = /tmp/test-gnunetd-gns-peer-1/ + + +[nat] +DISABLEV6 = YES +ENABLE_UPNP = NO +BEHIND_NAT = NO +ALLOW_NAT = NO +INTERNAL_ADDRESS = 127.0.0.1 +EXTERNAL_ADDRESS = 127.0.0.1 +USE_LOCALADDR = NO + +[dns] +AUTOSTART = YES + +[gns] +AUTOSTART = YES +BINARY = gnunet-service-gns +ZONEKEY = $SERVICEHOME/alicekey + + +[nse] +AUTOSTART = NO + +