/ src / tests / test_config.py
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)