Mercurial > p > roundup > code
diff test/session_common.py @ 6823:fe0091279f50
Refactor session db logging and key generation for sessions/otks
While I was working on the redis sessiondb stuff, I noticed that
log_wanrning, get_logger ... was duplicated. Also there was code to
generate a unique key for otks that was duplicated.
Changes:
creating new sessions_common.py and SessionsCommon class to provide
methods:
log_warning, log_info, log_debug, get_logger, getUniqueKey
getUniqueKey method is closer to the method used to make
session keys in client.py.
sessions_common.py now report when random_.py chooses a weak
random number generator. Removed same from rest.py.
get_logger reconciles all logging under
roundup.hyperdb.backends.<name of BasicDatabase class>
some backends used to log to root logger.
have BasicDatabase in other sessions_*.py modules inherit from
SessionCommon.
change logging to use log_* methods.
In addition:
remove unused imports reported by flake8 and other formatting
changes
modify actions.py, rest.py, templating.py to use getUniqueKey
method.
add tests for new methods
test_redis_session.py
swap out ModuleNotFoundError for ImportError to prevent crash in
python2 when redis is not present.
allow injection of username:password or just password into redis
connection URL. set pytest_redis_pw envirnment variable to password
or user:password when running test.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Sun, 07 Aug 2022 01:51:11 -0400 |
| parents | 3f60a71b0812 |
| children | 39c482e6a246 |
line wrap: on
line diff
--- a/test/session_common.py Sun Aug 07 01:26:30 2022 -0400 +++ b/test/session_common.py Sun Aug 07 01:51:11 2022 -0400 @@ -24,6 +24,18 @@ sessions_dbm.py. """ + +import pytest, sys + +_py3 = sys.version_info[0] > 2 +if _py3: + skip_py2 = lambda func, *args, **kwargs: func +else: + from .pytest_patcher import mark_class + skip_py2 = mark_class(pytest.mark.skip( + reason="Skipping log test, test doesn't work on python2")) + + class SessionTest(object): def setUp(self): # remove previous test, ignore errors @@ -185,3 +197,75 @@ week_ago = time.time() - 60*60*24*7 self.assertGreater(week_ago + 302, ts) self.assertLess(week_ago + 298, ts) + + def testGetUniqueKey(self): + # 40 bytes of randomness gets larger when encoded + key = self.sessions.getUniqueKey() + self.assertEqual(len(key), 54) + + # length is bytes of randomness + key = self.sessions.getUniqueKey(length=23) + self.assertEqual(len(key), 31) + + key = self.sessions.getUniqueKey(length=200) + self.assertEqual(len(key), 267) + + def testget_logger(self): + logger = self.sessions.get_logger() + # why do rdbms session use session/otk as the table name + # while dbm uses sessions/otks? In any case check both. + self.assertIn(logger.name, ["roundup.hyperdb.backends.sessions", + "roundup.hyperdb.backends.session"]) + + logger = self.otks.get_logger() + self.assertIn(logger.name, ["roundup.hyperdb.backends.otks", + "roundup.hyperdb.backends.otk"]) + + def testget_logger_name_test(self): + self.sessions.name="otks" + logger = self.sessions.get_logger() + self.assertEqual(logger.name, "roundup.hyperdb.backends.otks") + + @skip_py2 + def test_log_warning(self): + """Only python3 pytest has the right context handler for this, + so skip this on python2. + """ + + self.sessions.name = "newdb" + + with self.assertLogs(logger="roundup.hyperdb.backends.newdb") as logs: + self.sessions.log_warning("hello world") + + self.assertEqual(len(logs.records), 1) + self.assertEqual(logs.records[0].levelname, "WARNING") + + @skip_py2 + def test_log_info(self): + """Only python3 pytest has the right context handler for this, + so skip this on python2. + """ + + self.sessions.name = "newdb" + + with self.assertLogs(logger="roundup.hyperdb.backends.newdb") as logs: + self.sessions.log_info("hello world") + + self.assertEqual(len(logs.records), 1) + self.assertEqual(logs.records[0].levelname, "INFO") + + @skip_py2 + def test_log_debug(self): + """Only python3 pytest has the right context handler for this, + so skip this on python2. + """ + + self.sessions.name = "newdb" + + with self.assertLogs(logger="roundup.hyperdb.backends.newdb", + level='DEBUG') as logs: + self.sessions.log_debug("hello world") + + self.assertEqual(len(logs.records), 1) + self.assertEqual(logs.records[0].levelname, "DEBUG") +
