test_config.py
1 """ 2 Various tests for config 3 """ 4 import unittest 5 6 from six import StringIO 7 from pybitmessage.bmconfigparser import BMConfigParser 8 9 test_config = """[bitmessagesettings] 10 maxaddrperstreamsend = 100 11 maxbootstrapconnections = 10 12 maxdownloadrate = 0 13 maxoutboundconnections = 8 14 maxtotalconnections = 100 15 maxuploadrate = 0 16 apiinterface = 127.0.0.1 17 apiport = 8442 18 udp = True 19 20 [threads] 21 receive = 3 22 23 [network] 24 bind = None 25 dandelion = 90 26 27 [inventory] 28 storage = sqlite 29 acceptmismatch = False 30 31 [knownnodes] 32 maxnodes = 15000 33 34 [zlib] 35 maxsize = 1048576""" 36 37 38 # pylint: disable=protected-access 39 class TestConfig(unittest.TestCase): 40 """A test case for bmconfigparser""" 41 42 def setUp(self): 43 self.config = BMConfigParser() 44 self.config.add_section('bitmessagesettings') 45 46 def test_safeGet(self): 47 """safeGet retuns provided default for nonexistent option or None""" 48 self.assertIs( 49 self.config.safeGet('nonexistent', 'nonexistent'), None) 50 self.assertEqual( 51 self.config.safeGet('nonexistent', 'nonexistent', 42), 42) 52 53 def test_safeGetBoolean(self): 54 """safeGetBoolean returns False for nonexistent option, no default""" 55 self.assertIs( 56 self.config.safeGetBoolean('nonexistent', 'nonexistent'), False) 57 # no arg for default 58 # pylint: disable=too-many-function-args 59 with self.assertRaises(TypeError): 60 self.config.safeGetBoolean('nonexistent', 'nonexistent', True) 61 62 def test_safeGetInt(self): 63 """safeGetInt retuns provided default for nonexistent option or 0""" 64 self.assertEqual( 65 self.config.safeGetInt('nonexistent', 'nonexistent'), 0) 66 self.assertEqual( 67 self.config.safeGetInt('nonexistent', 'nonexistent', 42), 42) 68 69 def test_safeGetFloat(self): 70 """ 71 safeGetFloat retuns provided default for nonexistent option or 0.0 72 """ 73 self.assertEqual( 74 self.config.safeGetFloat('nonexistent', 'nonexistent'), 0.0) 75 self.assertEqual( 76 self.config.safeGetFloat('nonexistent', 'nonexistent', 42.0), 42.0) 77 78 def test_set(self): 79 """Check exceptions in set()""" 80 with self.assertRaises(TypeError): 81 self.config.set('bitmessagesettings', 'any', 42) 82 with self.assertRaises(ValueError): 83 self.config.set( 84 'bitmessagesettings', 'maxoutboundconnections', 'none') 85 with self.assertRaises(ValueError): 86 self.config.set( 87 'bitmessagesettings', 'maxoutboundconnections', '9') 88 89 def test_validate(self): 90 """Check validation""" 91 self.assertTrue( 92 self.config.validate('nonexistent', 'nonexistent', 'any')) 93 for val in range(9): 94 self.assertTrue(self.config.validate( 95 'bitmessagesettings', 'maxoutboundconnections', str(val))) 96 97 def test_setTemp(self): 98 """Set a temporary value and ensure it's returned by get()""" 99 self.config.setTemp('bitmessagesettings', 'connect', 'true') 100 self.assertIs( 101 self.config.safeGetBoolean('bitmessagesettings', 'connect'), True) 102 written_fp = StringIO('') 103 self.config.write(written_fp) 104 self.config._reset() 105 self.config.read_file(written_fp) 106 self.assertIs( 107 self.config.safeGetBoolean('bitmessagesettings', 'connect'), False) 108 109 def test_addresses(self): 110 """Check the addresses() method""" 111 self.config.read() 112 for num in range(1, 4): 113 addr = 'BM-%s' % num 114 self.config.add_section(addr) 115 self.config.set(addr, 'label', 'account %s' % (4 - num)) 116 self.assertEqual(self.config.addresses(), ['BM-1', 'BM-2', 'BM-3']) 117 self.assertEqual(self.config.addresses(True), ['BM-3', 'BM-2', 'BM-1']) 118 119 def test_reset(self): 120 """Some logic for testing _reset()""" 121 test_config_object = StringIO(test_config) 122 self.config.read_file(test_config_object) 123 self.assertEqual( 124 self.config.safeGetInt( 125 'bitmessagesettings', 'maxaddrperstreamsend'), 100) 126 self.config._reset() 127 self.assertEqual(self.config.sections(), []) 128 129 def test_defaults(self): 130 """Loading defaults""" 131 self.config.set('bitmessagesettings', 'maxaddrperstreamsend', '100') 132 self.config.read() 133 self.assertEqual( 134 self.config.safeGetInt( 135 'bitmessagesettings', 'maxaddrperstreamsend'), 500)