from ConfigParser import SafeConfigParser
from twisted.python import log, versions
+from twisted.trial import unittest
class ConfigError(Exception):
"""Errors that occur in the loading of configuration variables."""
# Port to listen on for all requests (TCP and UDP)
'PORT': '9977',
+ # The rate to limit sending data to peers to, in KBytes/sec.
+ # Set this to 0 to not limit the upload bandwidth.
+ 'UPLOAD_LIMIT': '0',
+
+ # The minimum number of peers before the mirror is not used.
+ # If there are fewer peers than this for a file, the mirror will also be
+ # used to speed up the download. Set to 0 to never use the mirror if
+ # there are peers.
+ 'MIN_DOWNLOAD_PEERS': '3',
+
# Directory to store the downloaded files in
'CACHE_DIR': home + '/.apt-p2p/cache',
# User name to try and run as
'USERNAME': '',
- # Whether it's OK to use an IP addres from a known local/private range
+ # Whether it's OK to use an IP address from a known local/private range
'LOCAL_OK': 'no',
# Unload the packages cache after an interval of inactivity this long.
'KEY_REFRESH': '57m',
# Which DHT implementation to use.
- # It must be possile to do "from <DHT>.DHT import DHT" to get a class that
+ # It must be possible to do "from <DHT>.DHT import DHT" to get a class that
# implements the IDHT interface.
'DHT': 'apt_p2p_Khashmir',
DHT_DEFAULTS = {
# bootstrap nodes to contact to join the DHT
- 'BOOTSTRAP': """www.camrdale.org:9977
- steveholt.hopto.org:9976""",
+ 'BOOTSTRAP': """www.camrdale.org:9977""",
# whether this node is a bootstrap node
'BOOTSTRAP_NODE': "no",
config.add_section(config.get('DEFAULT', 'DHT'))
for k in DHT_DEFAULTS:
config.set(config.get('DEFAULT', 'DHT'), k, DHT_DEFAULTS[k])
+
+class TestConfigParser(unittest.TestCase):
+ """Unit tests for the config parser."""
+
+ def test_uppercase(self):
+ config.set('DEFAULT', 'case_tester', 'foo')
+ self.failUnless(config.get('DEFAULT', 'CASE_TESTER') == 'foo')
+ self.failUnless(config.get('DEFAULT', 'case_tester') == 'foo')
+ config.set('DEFAULT', 'TEST_CASE', 'bar')
+ self.failUnless(config.get('DEFAULT', 'TEST_CASE') == 'bar')
+ self.failUnless(config.get('DEFAULT', 'test_case') == 'bar')
+ config.set('DEFAULT', 'FINAL_test_CASE', 'foobar')
+ self.failUnless(config.get('DEFAULT', 'FINAL_TEST_CASE') == 'foobar')
+ self.failUnless(config.get('DEFAULT', 'final_test_case') == 'foobar')
+ self.failUnless(config.get('DEFAULT', 'FINAL_test_CASE') == 'foobar')
+ self.failUnless(config.get('DEFAULT', 'final_TEST_case') == 'foobar')
+
+ def test_time(self):
+ config.set('DEFAULT', 'time_tester_1', '2d')
+ self.failUnless(config.gettime('DEFAULT', 'time_tester_1') == 2*86400)
+ config.set('DEFAULT', 'time_tester_2', '3h')
+ self.failUnless(config.gettime('DEFAULT', 'time_tester_2') == 3*3600)
+ config.set('DEFAULT', 'time_tester_3', '4m')
+ self.failUnless(config.gettime('DEFAULT', 'time_tester_3') == 4*60)
+ config.set('DEFAULT', 'time_tester_4', '37s')
+ self.failUnless(config.gettime('DEFAULT', 'time_tester_4') == 37)
+
+ def test_string(self):
+ config.set('DEFAULT', 'string_test', 'foobar')
+ self.failUnless(type(config.getstring('DEFAULT', 'string_test')) == str)
+ self.failUnless(config.getstring('DEFAULT', 'string_test') == 'foobar')
+
+ def test_stringlist(self):
+ config.set('DEFAULT', 'stringlist_test', """foo
+ bar
+ foobar """)
+ l = config.getstringlist('DEFAULT', 'stringlist_test')
+ self.failUnless(type(l) == list)
+ self.failUnless(len(l) == 3)
+ self.failUnless(l[0] == 'foo')
+ self.failUnless(l[1] == 'bar')
+ self.failUnless(l[2] == 'foobar')
+
\ No newline at end of file