X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=test.py;h=10ca2d6ba3a21d44d011d31becd6d8bda47cfed0;hb=81a89f3b32dde69a97426daab2b672ba2a9b3d47;hp=f66c7fbc544074a805f2f63b6db6e2956f80ad18;hpb=357aca42afe56dad70569d82782d6902df5656eb;p=quix0rs-apt-p2p.git diff --git a/test.py b/test.py index f66c7fb..10ca2d6 100755 --- a/test.py +++ b/test.py @@ -1,9 +1,9 @@ #!/usr/bin/env python -"""Automated tests of the apt-dht functionality. +"""Automated tests of the apt-p2p functionality. This script runs several automatic tests of some of the functionality in -the apt-dht program. +the apt-p2p program. @type tests: C{dictionary} @var tests: all of the tests that can be run. @@ -15,11 +15,11 @@ the apt-dht program. The bootstrap nodes keys are integers, which must be in the range 1-9. The values are the dictionary of string formatting values for creating - the apt-dht configuration file (see L{apt_dht_conf_template} below). + the apt-p2p configuration file (see L{apt_p2p_conf_template} below). The downloaders keys are also integers in the range 1-99. The values are - the dictionary of string formatting values for creating the apt-dht - configuration file (see L{apt_dht_conf_template} below). + the dictionary of string formatting values for creating the apt-p2p + configuration file (see L{apt_p2p_conf_template} below). The apt-get commands' list elements are tuples with 2 elements: the downloader to run the command on, and the list of command-line @@ -59,15 +59,15 @@ tests = {'1': ('Start a single bootstrap and downloader, test updating and downl {1: {}, 2: {}}, [(1, ['update']), + (2, ['update']), (1, ['install', 'aboot-base']), + (2, ['install', 'aboot-base']), (1, ['install', 'aap-doc']), (1, ['install', 'ada-reference-manual']), (1, ['install', 'fop-doc']), (1, ['install', 'jswat-doc']), (1, ['install', 'bison-doc']), (1, ['install', 'crash-whitepaper']), - (2, ['update']), - (2, ['install', 'aboot-base']), (2, ['install', 'aap-doc']), (2, ['install', 'ada-reference-manual']), (2, ['install', 'fop-doc']), @@ -312,7 +312,7 @@ Debug } """ -apt_dht_conf_template = """ +apt_p2p_conf_template = """ [DEFAULT] # Port to listen on for all requests (TCP and UDP) @@ -332,15 +332,24 @@ CACHE_DIR = %(CACHE_DIR)s # Whether it's OK to use an IP addres from a known local/private range LOCAL_OK = yes +# Unload the packages cache after an interval of inactivity this long. +# The packages cache uses a lot of memory, and only takes a few seconds +# to reload when a new request arrives. +UNLOAD_PACKAGES_CACHE = 5m + +# Refresh the DHT keys after this much time has passed. +# This should be a time slightly less than the DHT's KEY_EXPIRE value. +KEY_REFRESH = 57m + # Which DHT implementation to use. # It must be possile to do "from .DHT import DHT" to get a class that # implements the IDHT interface. -DHT = apt_dht_Khashmir +DHT = apt_p2p_Khashmir # Whether to only run the DHT (for providing only a bootstrap node) DHT-ONLY = %(DHT-ONLY)s -[apt_dht_Khashmir] +[apt_p2p_Khashmir] # bootstrap nodes to contact to join the DHT BOOTSTRAP = %(BOOTSTRAP)s @@ -354,7 +363,7 @@ K = 8 HASH_LENGTH = 160 # checkpoint every this many seconds -CHECKPOINT_INTERVAL = 15m +CHECKPOINT_INTERVAL = 5m # concurrent xmlrpc calls per find node/value request! CONCURRENT_REQS = 4 @@ -362,6 +371,14 @@ CONCURRENT_REQS = 4 # how many hosts to post to STORE_REDUNDANCY = 3 +# How many values to attempt to retrieve from the DHT. +# Setting this to 0 will try and get all values (which could take a while if +# a lot of nodes have values). Setting it negative will try to get that +# number of results from only the closest STORE_REDUNDANCY nodes to the hash. +# The default is a large negative number so all values from the closest +# STORE_REDUNDANCY nodes will be retrieved. +RETRIEVE_VALUES = -10000 + # how many times in a row a node can fail to respond before it's booted from the routing table MAX_FAILURES = 3 @@ -371,14 +388,8 @@ MIN_PING_INTERVAL = 15m # refresh buckets that haven't been touched in this long BUCKET_STALENESS = 1h -# time before expirer starts running -KEINITIAL_DELAY = 15s - -# time between expirer runs -KE_DELAY = 20m - # expire entries older than this -KE_AGE = 1h +KEY_EXPIRE = 1h # whether to spew info about the requests/responses in the protocol SPEW = yes @@ -511,7 +522,7 @@ def apt_get(num_down, cmd): """ - print '************************** apt-get (' + str(num_down) + ') ' + ' '.join(cmd) + ' **************************' + print '*************** apt-get (' + str(num_down) + ') ' + ' '.join(cmd) + ' ****************' apt_conf = join([down_dir(num_down), 'etc', 'apt', 'apt.conf']) dpkg_status = join([down_dir(num_down), 'var', 'lib', 'dpkg', 'status']) args = ['-d', '-c', apt_conf, '-o', 'Dir::state::status='+dpkg_status] + cmd @@ -568,7 +579,7 @@ def start_downloader(bootstrap_addresses, num_down, options = {}, @param num_down: the number of the downloader to use @type options: C{dictionary} @param options: the dictionary of string formatting values for creating - the apt-dht configuration file (see L{apt_dht_conf_template} above). + the apt-p2p configuration file (see L{apt_p2p_conf_template} above). (optional, defaults to only using the default arguments) @type mirror: C{string} @param mirror: the Debian mirror to use @@ -624,20 +635,20 @@ def start_downloader(bootstrap_addresses, num_down, options = {}, for k in options: defaults[k] = options[k] - f = open(join([downloader_dir, 'apt-dht.conf']), 'w') - f.write(apt_dht_conf_template % defaults) + f = open(join([downloader_dir, 'apt-p2p.conf']), 'w') + f.write(apt_p2p_conf_template % defaults) f.close() - pid = start('python', [join([sys.path[0], 'apt-dht.py']), - '--config-file=' + join([downloader_dir, 'apt-dht.conf']), - '--log-file=' + join([downloader_dir, 'apt-dht.log']),], + pid = start('python', [join([sys.path[0], 'apt-p2p.py']), + '--config-file=' + join([downloader_dir, 'apt-p2p.conf']), + '--log-file=' + join([downloader_dir, 'apt-p2p.log']),], downloader_dir) return pid def start_bootstrap(bootstrap_addresses, num_boot, options = [], clean = True): """Initialize a new bootstrap node process. - The default arguments specified to the apt-dht invocation are + The default arguments specified to the apt-p2p invocation are the state file and port to use. Any additional arguments needed should be specified by L{options}. @@ -676,13 +687,13 @@ def start_bootstrap(bootstrap_addresses, num_boot, options = [], clean = True): for k in options: defaults[k] = options[k] - f = open(join([bootstrap_dir, 'apt-dht.conf']), 'w') - f.write(apt_dht_conf_template % defaults) + f = open(join([bootstrap_dir, 'apt-p2p.conf']), 'w') + f.write(apt_p2p_conf_template % defaults) f.close() - pid = start('python', [join([sys.path[0], 'apt-dht.py']), - '--config-file=' + join([bootstrap_dir, 'apt-dht.conf']), - '--log-file=' + join([bootstrap_dir, 'apt-dht.log']),], + pid = start('python', [join([sys.path[0], 'apt-p2p.py']), + '--config-file=' + join([bootstrap_dir, 'apt-p2p.conf']), + '--log-file=' + join([bootstrap_dir, 'apt-p2p.log']),], bootstrap_dir) return pid @@ -735,9 +746,9 @@ def run_test(bootstraps, downloaders, apt_get_queue): apt_get_results.append((elapsed, r_value)) if r_value == 0: - print '********************** apt-get completed successfully in ' + str(elapsed) + ' sec. **************************' + print '********** apt-get completed successfully in ' + str(elapsed) + ' sec. *****************' else: - print '********************** apt-get finished with status ' + str(r_value) + ' in ' + str(elapsed) + ' sec. **************************' + print '********** apt-get finished with status ' + str(r_value) + ' in ' + str(elapsed) + ' sec. ************' sleep(5)