Mercurial > p > roundup > code
diff test/test_config.py @ 5774:765f8c0e99ef
Sanity checking improvements. All IntegerNumberOption really have to
be positive integers or zero. Replace type with new
IntegerNumberGeqZeroOption class definition to enforce this range.
Use update_option to test now unused IntegerNumberOption and
never used FloatNumberOption.
Test save function, make sure it creates .bak file.
Test a few more configuration option classes.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Fri, 07 Jun 2019 21:53:55 -0400 |
| parents | 8dbe307bdb57 |
| children | 95a366d46065 |
line wrap: on
line diff
--- a/test/test_config.py Fri Jun 07 17:28:12 2019 -0400 +++ b/test/test_config.py Fri Jun 07 21:53:55 2019 -0400 @@ -18,6 +18,8 @@ import unittest import logging +import os, shutil, errno + import pytest from roundup import configuration @@ -68,7 +70,10 @@ self.assertRaises(configuration.OptionValueError, config._get_option('TRACKER_WEB').set, "htt://foo.example/bar") - def testLoginRateLimit(self): + self.assertRaises(configuration.OptionValueError, + config._get_option('TRACKER_WEB').set, "") + + def testLoginAttemptsMin(self): config = configuration.CoreConfig() self.assertEqual(None, @@ -82,3 +87,143 @@ self.assertRaises(configuration.OptionValueError, config._get_option('WEB_LOGIN_ATTEMPTS_MIN').set, "-1") + self.assertRaises(configuration.OptionValueError, + config._get_option('WEB_LOGIN_ATTEMPTS_MIN').set, "") + + def testTimeZone(self): + config = configuration.CoreConfig() + + self.assertEqual(None, + config._get_option('TIMEZONE').set("0")) + + # not a valid timezone + self.assertRaises(configuration.OptionValueError, + config._get_option('TIMEZONE').set, "Zot") + + # 25 is not a valid UTC offset: -12 - +14 is range + # possibly +/- 1 for DST. But roundup.date doesn't + # constrain to this range. + #self.assertRaises(configuration.OptionValueError, + # config._get_option('TIMEZONE').set, "25") + + try: + import pytz + self.assertEqual(None, + config._get_option('TIMEZONE').set("UTC")) + self.assertEqual(None, + config._get_option('TIMEZONE').set("America/New_York")) + + except ImportError: + self.assertRaises(configuration.OptionValueError, + config._get_option('TIMEZONE').set, "UTC") + self.assertRaises(configuration.OptionValueError, + config._get_option('TIMEZONE').set, "America/New_York") + + def testWebSecretKey(self): + config = configuration.CoreConfig() + + self.assertEqual(None, + config._get_option('WEB_SECRET_KEY').set("skskskd")) + + self.assertRaises(configuration.OptionValueError, + config._get_option('WEB_SECRET_KEY').set, "") + + + def testStaticFiles(self): + config = configuration.CoreConfig() + + self.assertEqual(None, + config._get_option('STATIC_FILES').set("foo /tmp/bar")) + + self.assertEqual(config.STATIC_FILES, + ["./foo", "/tmp/bar"]) + + self.assertEqual(config['STATIC_FILES'], + ["./foo", "/tmp/bar"]) + + def testIsolationLevel(self): + config = configuration.CoreConfig() + + self.assertEqual(None, + config._get_option('RDBMS_ISOLATION_LEVEL').set("read uncommitted")) + self.assertEqual(None, + config._get_option('RDBMS_ISOLATION_LEVEL').set("read committed")) + self.assertEqual(None, + config._get_option('RDBMS_ISOLATION_LEVEL').set("repeatable read")) + + + self.assertRaises(configuration.OptionValueError, + config._get_option('RDBMS_ISOLATION_LEVEL').set, "not a level") + + def testConfigSave(self): + + config = configuration.CoreConfig() + # make scratch directory to create files in + + self.startdir = os.getcwd() + + self.dirname = os.getcwd() + '_test_config' + os.mkdir(self.dirname) + + try: + os.chdir(self.dirname) + self.assertFalse(os.access("config.ini", os.F_OK)) + self.assertFalse(os.access("config.bak", os.F_OK)) + config.save() + config.save() # creates .bak file + self.assertTrue(os.access("config.ini", os.F_OK)) + self.assertTrue(os.access("config.bak", os.F_OK)) + + self.assertFalse(os.access("foo.bar", os.F_OK)) + self.assertFalse(os.access("foo.bak", os.F_OK)) + config.save("foo.bar") + config.save("foo.bar") # creates .bak file + self.assertTrue(os.access("foo.bar", os.F_OK)) + self.assertTrue(os.access("foo.bak", os.F_OK)) + + finally: + # cleanup scratch directory and files + try: + os.chdir(self.startdir) + shutil.rmtree(self.dirname) + except OSError as error: + if error.errno not in (errno.ENOENT, errno.ESRCH): raise + + def testFloatAndInt_with_update_option(self): + + config = configuration.CoreConfig() + + # Update existing IntegerNumberGeqZeroOption to IntegerNumberOption + config.update_option('WEB_LOGIN_ATTEMPTS_MIN', + configuration.IntegerNumberOption, + "0", description="new desc") + + # -1 is allowed now that it is an int. + self.assertEqual(None, + config._get_option('WEB_LOGIN_ATTEMPTS_MIN').set("-1")) + + # but can't float this + self.assertRaises(configuration.OptionValueError, + config._get_option('WEB_LOGIN_ATTEMPTS_MIN').set, "2.4") + + # but fred is still an issue + self.assertRaises(configuration.OptionValueError, + config._get_option('WEB_LOGIN_ATTEMPTS_MIN').set, "fred") + + # Update existing IntegerNumberOption to FloatNumberOption + config.update_option('WEB_LOGIN_ATTEMPTS_MIN', + configuration.FloatNumberOption, + "0.0") + + self.assertEqual(config['WEB_LOGIN_ATTEMPTS_MIN'], -1) + + # can float this + self.assertEqual(None, + config._get_option('WEB_LOGIN_ATTEMPTS_MIN').set("3.1415926")) + + # but fred is still an issue + self.assertRaises(configuration.OptionValueError, + config._get_option('WEB_LOGIN_ATTEMPTS_MIN').set, "fred") + + self.assertAlmostEqual(config['WEB_LOGIN_ATTEMPTS_MIN'], 3.1415926, + places=6)
