-#!/usr/bin/env python
+#!/usr/bin/python
"""Automated tests of the apt-p2p functionality.
@var CWD: the working directory the script was run from
@type apt_conf_template: C{string}
@var apt_conf_template: the template to use for the apt.conf file
-
+@type apt_p2p_conf_template: C{string}
+@var apt_p2p_conf_template: the template to use for the apt-p2p.conf file
"""
from time import sleep, time
(1, ['install', 'ada-reference-manual']),
(1, ['install', 'aspectj-doc']),
(1, ['install', 'fop-doc']),
- (1, ['install', 'jswat-doc']),
(1, ['install', 'asis-doc']),
(1, ['install', 'bison-doc']),
(1, ['install', 'crash-whitepaper']),
(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, ['install', 'aap-doc']),
(2, ['install', 'ada-reference-manual']),
(2, ['install', 'fop-doc']),
- (2, ['install', 'jswat-doc']),
(2, ['install', 'bison-doc']),
(2, ['install', 'crash-whitepaper']),
]),
]),
]),
+ 'b': ('Start 2 downloaders and test source downloads.',
+ {1: {}},
+ {1: {'types': ['deb-src']},
+ 2: {'types': ['deb-src']}},
+ [(1, ['update']),
+ (2, ['update']),
+ (1, ['source', 'aboot-base']),
+ (2, ['source', 'aboot-base']),
+ (1, ['source', 'aap-doc']),
+ (1, ['source', 'ada-reference-manual']),
+ (1, ['source', 'fop-doc']),
+ (1, ['source', 'bison-doc']),
+ (1, ['source', 'crash-whitepaper']),
+ (2, ['source', 'aap-doc']),
+ (2, ['source', 'ada-reference-manual']),
+ (2, ['source', 'fop-doc']),
+ (2, ['source', 'bison-doc']),
+ (2, ['source', 'crash-whitepaper']),
+ ]),
+
+ 'c': ('Test downloading from peers and just a mirror.',
+ {1: {}},
+ {1: {},
+ 2: {}},
+ [(1, ['update']),
+ (1, ['install', 'aboot-base', 'ada-reference-manual',
+ 'fop-doc', 'bison-doc', 'crash-whitepaper',
+ 'apt-howto-common', 'aptitude-doc-en', 'asr-manpages',
+ 'alcovebook-sgml-doc', 'airstrike-common',
+ ]),
+ (2, ['update']),
+ (2, ['install', 'aboot-base', 'aap-doc', 'ada-reference-manual',
+ 'aspectj-doc', 'fop-doc', 'asis-doc',
+ 'bison-doc', 'crash-whitepaper',
+ 'bash-doc', 'apt-howto-common', 'autotools-dev',
+ 'aptitude-doc-en', 'asr-manpages',
+ 'atomix-data', 'alcovebook-sgml-doc',
+ 'afbackup-common', 'airstrike-common',
+ ]),
+ ]),
+
}
assert 'all' not in tests
# 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
+KEY_REFRESH = 2.5h
# The user name to try and run as (leave blank to run as current user)
USERNAME =
# refresh buckets that haven't been touched in this long
BUCKET_STALENESS = 1h
+# Whether it's OK to add nodes to the routing table that use an IP
+# address from a known local/private range.
+# If not specified here, the LOCAL_OK value in the DEFAULT section will be used.
+LOCAL_OK = yes
+
# expire entries older than this
-KEY_EXPIRE = 1h
+KEY_EXPIRE = 3h
# Timeout KRPC requests to nodes after this time.
-KRPC_TIMEOUT = 14s
+KRPC_TIMEOUT = 9s
# KRPC requests are resent using exponential backoff starting with this delay.
# The request will first be resent after the delay set here.
# The request will be resent again after twice the delay set here. etc.
-# e.g. if TIMEOUT is 14 sec., and INITIAL_DELAY is 2 sec., then requests will
+# e.g. if TIMEOUT is 9 sec., and INITIAL_DELAY is 2 sec., then requests will
# be resent at times 0, 2 (2 sec. later), and 6 (4 sec. later), and then will
-# timeout at 14.
+# timeout at 9.
KRPC_INITIAL_DELAY = 2s
# whether to spew info about the requests/responses in the protocol
"""
new_cmd = [cmd] + args
+ if work_dir:
+ os.chdir(work_dir)
pid = os.spawnvp(os.P_NOWAIT, new_cmd[0], new_cmd)
return pid
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
- pid = start('apt-get', args)
+ pid = start('apt-get', args, downloader_dir)
return pid
def bootstrap_address(num_boot):
return os.path.join(CWD,'bootstrap' + str(num_boot))
def start_downloader(bootstrap_addresses, num_down, options = {},
- mirror = 'ftp.us.debian.org/debian',
+ types = ['deb'], mirror = 'ftp.us.debian.org/debian',
suites = 'main contrib non-free', clean = True):
"""Initialize a new downloader process.
@param options: the dictionary of string formatting values for creating
the apt-p2p configuration file (see L{apt_p2p_conf_template} above).
(optional, defaults to only using the default arguments)
+ @type types: C{list} of C{string}
+ @param types: the type of sources.list line to add
+ (optional, defaults to only 'deb')
@type mirror: C{string}
@param mirror: the Debian mirror to use
(optional, defaults to 'ftp.us.debian.org/debian')
if not exists(join([downloader_dir, 'etc', 'apt', 'sources.list'])):
# Create apt's config files
f = open(join([downloader_dir, 'etc', 'apt', 'sources.list']), 'w')
- f.write('deb http://localhost:1%02d77/%s/ unstable %s\n' % (num_down, mirror, suites))
+ for type in types:
+ f.write('%s http://localhost:1%02d77/%s/ unstable %s\n' % (type, num_down, mirror, suites))
f.close()
if not exists(join([downloader_dir, 'etc', 'apt', 'apt.conf'])):