getting tarantool into testing mode

This commit is contained in:
Jürgen Eckel 2022-02-28 10:31:08 +01:00
parent bd373d0419
commit 22ab57bba4
11 changed files with 100 additions and 49 deletions

View File

@ -26,6 +26,15 @@ env:
matrix:
fast_finish: true
include:
- python: 3.9
env:
- PLANETMINT_DATABASE_BACKEND=tarantool
- PLANETMINT_DATABASE_SSL=
- python: 3.9
env:
- PLANETMINT_DATABASE_BACKEND=tarantool
- PLANETMINT_DATABASE_SSL=
- PLANETMINT_CI_ABCI=enable
- python: 3.9
env:
- PLANETMINT_DATABASE_BACKEND=localmongodb
@ -34,7 +43,8 @@ matrix:
env:
- PLANETMINT_DATABASE_BACKEND=localmongodb
- PLANETMINT_DATABASE_SSL=
- PLANETMINT_CI_ABCI=enable
- PLANETMINT_CI_ABCI=enable
- python: 3.9
env:
- PLANETMINT_ACCEPTANCE_TEST=enable

View File

@ -34,7 +34,7 @@ RUN mkdir -p /data/db /data/configdb \
# Planetmint enviroment variables
ENV PLANETMINT_DATABASE_PORT 27017
ENV PLANETMINT_DATABASE_BACKEND localmongodb
ENV PLANETMINT_DATABASE_BACKEND tarantool
ENV PLANETMINT_SERVER_BIND 0.0.0.0:9984
ENV PLANETMINT_WSSERVER_HOST 0.0.0.0
ENV PLANETMINT_WSSERVER_SCHEME ws

View File

@ -14,6 +14,15 @@ services:
- "27017:27017"
command: mongod
restart: always
tarantool:
image: tarantool/tarantool:2.3.1
ports:
- "5200:5200"
- "3301:3301"
command: tarantool
restart: always
planetmint:
depends_on:
- mongodb
@ -31,9 +40,9 @@ services:
- ./pytest.ini:/usr/src/app/pytest.ini
- ./tox.ini:/usr/src/app/tox.ini
environment:
PLANETMINT_DATABASE_BACKEND: localmongodb
PLANETMINT_DATABASE_HOST: mongodb
PLANETMINT_DATABASE_PORT: 27017
PLANETMINT_DATABASE_BACKEND: tarantool
PLANETMINT_DATABASE_HOST: tarantool
PLANETMINT_DATABASE_PORT: 3301
PLANETMINT_SERVER_BIND: 0.0.0.0:9984
PLANETMINT_WSSERVER_HOST: 0.0.0.0
PLANETMINT_WSSERVER_ADVERTISED_HOST: planetmint
@ -43,6 +52,7 @@ services:
- "9984:9984"
- "9985:9985"
- "26658"
- "2222:2222"
healthcheck:
test: ["CMD", "bash", "-c", "curl http://planetmint:9984 && curl http://tendermint:26657/abci_query"]
interval: 3s
@ -50,6 +60,7 @@ services:
retries: 3
command: '.ci/entrypoint.sh'
restart: always
tendermint:
image: tendermint/tendermint:v0.31.5
# volumes:
@ -60,6 +71,7 @@ services:
- "26657:26657"
command: sh -c "tendermint init && tendermint node --consensus.create_empty_blocks=false --proxy_app=tcp://planetmint:26658"
restart: always
bdb:
image: busybox
depends_on:
@ -93,7 +105,7 @@ services:
context: .
dockerfile: Dockerfile-dev
args:
backend: localmongodb
backend: tarantool
volumes:
- .:/usr/src/app/
command: make -C docs/root html

View File

@ -6,6 +6,7 @@
import copy
import logging
import os
#import planetmint.debug
from planetmint.log import DEFAULT_LOGGING_CONFIG as log_config
from planetmint.lib import Planetmint # noqa
@ -23,45 +24,57 @@ from planetmint.core import App # noqa
# I tried to configure
_database_keys_map = { # TODO Check if it is working after removing 'name' field
'tarantool_db': ('host', 'port'),
'tarantool': ('host', 'port'),
'localmongodb': ('host', 'port', 'name'),
}
_base_database_tarantool_local_db = { # TODO Rewrite this configs for tarantool usage
_base_database_localmongodb = {
'host': 'localhost',
'port': 27017,
'name': 'planetmint',
'replicaset': None,
'login': None,
'password': None,
}
_database_localmongodb = {
'backend': 'localmongodb',
'connection_timeout': 5000,
'max_tries': 3,
'ssl': False,
'ca_cert': None,
'certfile': None,
'keyfile': None,
'keyfile_passphrase': None,
'crlfile': None,
}
_database_localmongodb.update(_base_database_localmongodb)
_base_database_tarantool_local_db = { # TODO Rewrite this configs for tarantool usage
'host': 'tarantool',
'port': 3301,
'username': None,
'username': 'guest',
'password': None,
"connect_now": True,
"encoding": "utf-8"
}
init_config = {
"init_file": "init_db.txt",
"relative_path": os.path.dirname(os.path.abspath(__file__)) + "/backend/tarantool/"
}
drop_config = {
"drop_file": "drop_db.txt", # planetmint/backend/tarantool/init_db.txt
"relative_path": os.path.dirname(os.path.abspath(__file__)) + "/backend/tarantool/"
}
_database_tarantool = {
'backend': 'tarantool_db',
'backend': 'tarantool',
'connection_timeout': 5000,
'max_tries': 3,
"reconnect_delay": 0.5,
"ctl_config": {
"login": "admin",
"host": "admin:pass@127.0.0.1:3301",
"service": "tarantoolctl connect",
"init_config": init_config,
"drop_config": drop_config
}
#"host": "admin:pass@127.0.0.1:3301",
#"service": "tarantoolctl connect",
}
_database_tarantool.update(_base_database_tarantool_local_db)
_database_map = {
'tarantool_db': _database_tarantool
'tarantool': _database_tarantool,
'localmongodb': _database_localmongodb,
}
config = {
'server': {
# Note: this section supports all the Gunicorn settings:
@ -85,7 +98,7 @@ config = {
'version': 'v0.31.5', # look for __tm_supported_versions__
},
# TODO Maybe remove hardcode configs for tarantool (review)
'database': _database_map['tarantool_db'],
'database': _database_map['tarantool'],
'log': {
'file': log_config['handlers']['file']['filename'],
'error_file': log_config['handlers']['errors']['filename'],

View File

@ -9,19 +9,30 @@ from itertools import repeat
import tarantool
import planetmint
import os
from planetmint.backend.exceptions import ConnectionError
from planetmint.backend.utils import get_planetmint_config_value, get_planetmint_config_value_or_key_error
from planetmint.common.exceptions import ConfigurationError
BACKENDS = { # This is path to MongoDBClass
'tarantool_db': 'planetmint.backend.connection_tarantool.TarantoolDB',
'tarantool': 'planetmint.backend.connection_tarantool.TarantoolDB',
}
logger = logging.getLogger(__name__)
class TarantoolDB:
init_config = {
"init_file": "init_db.txt",
"relative_path": os.path.dirname(os.path.abspath(__file__)) + "/backend/tarantool/"
}
drop_config = {
"drop_file": "drop_db.txt", # planetmint/backend/tarantool/init_db.txt
"relative_path": os.path.dirname(os.path.abspath(__file__)) + "/backend/tarantool/"
}
def __init__(self, host: str, port: int, user: str, password: str, reset_database: bool = False):
self.db_connect = tarantool.connect(host=host, port=port, user=user, password=password)
if reset_database:
@ -40,23 +51,25 @@ class TarantoolDB:
def drop_database(self):
from planetmint.backend.tarantool.utils import run
config = get_planetmint_config_value_or_key_error("ctl_config")
drop_config = config["drop_config"]
f_path = "%s%s" % (drop_config["relative_path"], drop_config["drop_file"])
# config = get_planetmint_config_value_or_key_error("ctl_config")
# drop_config = config["drop_config"]
f_path = "%s%s" % (self.drop_config["relative_path"], self.drop_config["drop_file"])
commands = self.__read_commands(file_path=f_path)
run(commands=commands, config=config)
def init_database(self):
from planetmint.backend.tarantool.utils import run
config = get_planetmint_config_value_or_key_error("ctl_config")
init_config = config["init_config"]
f_path = "%s%s" % (init_config["relative_path"], init_config["init_file"])
# config = get_planetmint_config_value_or_key_error("ctl_config")
# init_config = config["init_config"]
f_path = "%s%s" % (self.init_config["relative_path"], self.init_config["init_file"])
commands = self.__read_commands(file_path=f_path)
run(commands=commands, config=config)
def connect(host: str = None, port: int = None, username: str = "admin", password: str = "pass",
def connect(host: str = None, port: int = None, username: str = None, password: str = None,
backend: str = None, reset_database: bool = False, name=None, max_tries=None,
connection_timeout=None, replicaset=None, ssl=None, login: str = "admin", ctl_config=None,
connection_timeout=None, replicaset=None, ssl=None, login: str = None, ctl_config=None,
ca_cert=None, certfile=None, keyfile=None, keyfile_passphrase=None, reconnect_delay=None,
crlfile=None, connect_now=True, encoding=None):
backend = backend or get_planetmint_config_value_or_key_error('backend') # TODO Rewrite Configs
@ -73,7 +86,10 @@ def connect(host: str = None, port: int = None, username: str = "admin", passwor
'Planetmint currently supports {}'.format(backend, BACKENDS.keys()))
except (ImportError, AttributeError) as exc:
raise ConfigurationError('Error loading backend `{}`'.format(backend)) from exc
print(host)
print(port)
print(username)
logger.debug('Connection: {}'.format(Class))
return Class(host=host, port=port, user=username, password=password, reset_database=reset_database)

View File

@ -5,7 +5,7 @@
"""Query implementation for MongoDB"""
from pymongo import DESCENDING
#from pymongo import DESCENDING
from secrets import token_hex
from operator import itemgetter

View File

@ -318,12 +318,11 @@ def create_parser():
help='Prepare the config file.')
config_parser.add_argument('backend',
choices=['tarantool_db'],
default='tarantool_db',
const='tarantool_db',
choices=['tarantool', 'localmongodb'],
default='tarantool',
const='tarantool',
nargs='?',
help='The backend to use. It can only be '
'"tarantool_db", currently.')
help='The backend to use. Tarantool is default.')
# parser for managing elections
election_parser = subparsers.add_parser('election',

View File

@ -83,7 +83,7 @@ install_requires = [
'gunicorn==20.1.0',
'jsonschema==3.2.0',
'logstats==0.3.0',
'packaging>=20.9',
'packaging>=20.9',
# TODO Consider not installing the db drivers, or putting them in extras.
'pymongo==3.11.4',
'tarantool==0.7.1',
@ -91,9 +91,10 @@ install_requires = [
'pyyaml==5.4.1',
'requests==2.25.1',
'setproctitle==1.2.2',
'ptvsd'
]
if sys.version_info < (3, 6):
if sys.version_info < (3, 9):
install_requires.append('pysha3~=1.0.2')
setup(

View File

@ -181,7 +181,7 @@ def test_run_configure_when_config_does_exist(monkeypatch,
@pytest.mark.skip
@pytest.mark.parametrize('backend', (
'localmongodb',
'tarantool',
))
def test_run_configure_with_backend(backend, monkeypatch, mock_write_config):
import planetmint

View File

@ -48,7 +48,7 @@ def pytest_addoption(parser):
parser.addoption(
'--database-backend',
action='store',
default=os.environ.get('PLANETMINT_DATABASE_BACKEND', 'tarantool_db'),
default=os.environ.get('PLANETMINT_DATABASE_BACKEND', 'tarantool'),
help='Defines the backend to use (available: {})'.format(backends),
)
@ -97,7 +97,7 @@ def _configure_planetmint(request):
test_db_name = '{}_{}'.format(TEST_DB_NAME, xdist_suffix)
# backend = request.config.getoption('--database-backend')
backend = "tarantool_db"
backend = "tarantool"
config = {
'database': planetmint._database_map[backend],

View File

@ -185,7 +185,7 @@ def test_autoconfigure_read_both_from_file_and_env(monkeypatch, request):
config_utils.autoconfigure()
database_mongodb = {
'backend': 'localmongodb',
'backend': 'tarantool',
'host': DATABASE_HOST,
'port': DATABASE_PORT,
'name': DATABASE_NAME,