http://hg.code.sf.net:8000/p/roundup/code/atom-log/tip/test/test_redis_session.py Mercurial Repository: p/roundup/code: test/test_redis_session.py history 2024-04-18T18:57:49-04:00 test: close otks/session databases before replacing with redis db http://hg.code.sf.net:8000/p/roundup/code/#changeset-a4923cec0afa366d47d3d49ff30d75ea803f8823 John Rouillard rouilj@ieee.org 2024-04-18T18:57:49-04:00 2024-04-18T18:57:49-04:00
changeset a4923cec0afa
branch
bookmark
tag
user John Rouillard <rouilj@ieee.org>
description test: close otks/session databases before replacing with redis db

Same fix as patch to close sqlite session db's when using anydbm
session databases. Not sure if this left open files in the working
database directory but...
files
test: add pyproject.toml: set pytest and ruff project defaults http://hg.code.sf.net:8000/p/roundup/code/#changeset-1b7162938988fdf110135a90f74a0e49714c7f36 John Rouillard rouilj@ieee.org 2024-03-23T02:56:01-04:00 2024-03-23T02:56:01-04:00
changeset 1b7162938988
branch
bookmark
tag
user John Rouillard <rouilj@ieee.org>
description test: add pyproject.toml: set pytest and ruff project defaults

Pytest 6 is required to use this. This means it works only for python3.

It includes a dummy setting for redis password assuming redis is
running at the default port. This requires pytest-env be installed.

At some point I expect to add project and build-system tables to allow
building using the build package. The version and long_description
specifiers in the project table will be dynamic since the version is
from roundup/__init__.py and description from doc/announcement.txt.

One open issue is how to support the equivalent of:

python setup.py build_doc

to run sphinx over the docs and include them in the share directory
bundled with the distributions.

Modified test_redis_session.py to better handle empty password.
files
Skip redis tests if unable to communicate with the server. http://hg.code.sf.net:8000/p/roundup/code/#changeset-07f8737fe04ccb8c9222951ed1291d04485f3330 John Rouillard rouilj@ieee.org 2023-05-24T12:52:43-04:00 2023-05-24T12:52:43-04:00
changeset 07f8737fe04c
branch
bookmark
tag
user John Rouillard <rouilj@ieee.org>
description Skip redis tests if unable to communicate with the server.

If the redis module is in the test environment, the redis tests will
not be skipped. If connecting to redis during testing fails with a
ConnectionError because there is no redis server at localhost, or if
it fails with an AuthenticationError, you would fail a slew of tests.

This causes the tests to report as skipped if either of the two errors
occurs. It is very inefficient as it fails in setup() for the tests,
but at least it does report skipping the tests.

Also documented how to pass the redis password to the tests in the
test part of the install docs. Future note: running tests needs proper
docs in development.txt (including database setup) and a link left to
that doc in installation.txt.
files
fix tests that were leaving test dir behind. http://hg.code.sf.net:8000/p/roundup/code/#changeset-75a5946cf897390d694a83ddb1a37c026ccb243c John Rouillard rouilj@ieee.org 2022-08-07T13:59:55-04:00 2022-08-07T13:59:55-04:00
changeset 75a5946cf897
branch
bookmark
tag
user John Rouillard <rouilj@ieee.org>
description fix tests that were leaving test dir behind.

Zero out session/otks variables. don't try to set them to valid values.
files
Refactor session db logging and key generation for sessions/otks http://hg.code.sf.net:8000/p/roundup/code/#changeset-fe0091279f507de2e77032a13ac13d031832c36c John Rouillard rouilj@ieee.org 2022-08-07T01:51:11-04:00 2022-08-07T01:51:11-04:00
changeset fe0091279f50
branch
bookmark
tag
user John Rouillard <rouilj@ieee.org>
description 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.
files
remove password from redis url. http://hg.code.sf.net:8000/p/roundup/code/#changeset-35f0952f4bc5b7ac33e0d23ebe570e91f07f2b4b John Rouillard rouilj@ieee.org 2022-08-04T15:11:46-04:00 2022-08-04T15:11:46-04:00
changeset 35f0952f4bc5
branch
bookmark
tag
user John Rouillard <rouilj@ieee.org>
description remove password from redis url.
files
Summary: Support selecion session/otk data store. Add redis as data store. http://hg.code.sf.net:8000/p/roundup/code/#changeset-3f60a71b081240cebcb1c0e96d760e7a9c790612 John Rouillard rouilj@ieee.org 2022-08-04T14:41:58-04:00 2022-08-04T14:41:58-04:00
changeset 3f60a71b0812
branch
bookmark
tag
user John Rouillard <rouilj@ieee.org>
description Summary: Support selecion session/otk data store. Add redis as data store.

Allow admin to select the backend data store. Compatibility matrix:

main\/ session>| anydbm | sqlite | redis | mysql | postgresql |
anydbm | D | | X | | |
sqlite | X | D | X | | |
mysql | | | | D | |
postgresql | | | | | D |
--------------------------------------------------------------+
D - default if unconfigured, X - compatible choice

DETAILS

roundup/configuration.py:
add config.ini section sessiondb with settings: backend and redis_url.

CHANGES.txt, doc/admin_guide.txt, doc/installation.txt, doc/upgrading.txt:
doc on config of session db and redis. Plus some other fixes:

admin - clarified why we do not drop __words and __testids
table in native-fts conversion. TYpo fix.

upgrading - doc how you can keep using anydbm for session data with
sqlite. Fix dupe sentence in an upgrading config.ini
section.

roundup/backends/back_anydbm.py, roundup/backends/back_sqlite.py:
code to support redis, redis/anydbm backends respectively.

roundup/backends/sessions_redis.py
new storage backend for redis.

roundup/rest.py, roundup/cgi/actions.py, roundup/cgi/templating.py
redis uses a different way of calculating lifetime/timestamp.
Since expiration of an item occurred if its timestamp was more
than 1 week old, code would calculate:
now - 1 week + lifetime.
But this results in faster expiration in redis if used for
lifetime/timestamp.
Convert code to use the lifetime() method in BasicDatabase
that generates the right timestamp for each backend.

test/session_common.py:
added tests for more cases, get without default, getall non-existing
key etc. timestamp test changed to use new self.get_ts which is
overridden in other tests. Test that datatypes survive storage.

test/test_redis_session.py:
test redis session store with sqlite and anydbm primary databases

test/test_anydbm.py, test/test_sqlite.py
add test to make sure the databases are properly set up

sqlite - add test cases where anydbm is used as datastore
anydbm - remove updateTimestamp override add get_ts().

test/test_config.py
tests on redis_url and compatibility on choice of sessiondb backend

.travis.yml:
add redis db and redis-py
files