#!/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.
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
}
"""
-apt_dht_conf_template = """
+apt_p2p_conf_template = """
[DEFAULT]
# Port to listen on for all requests (TCP and UDP)
PORT = %(PORT)s
+# The rate to limit sending data to peers to, in KBytes/sec.
+# Set this to 0 to not limit the upload bandwidth.
+UPLOAD_LIMIT = 100
+
# Directory to store the downloaded files in
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>.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
# 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
# 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
@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
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}.
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