Merging upstream version 1.24.1.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
570aa52ec2
commit
06dd2aeb28
26 changed files with 565 additions and 169 deletions
|
@ -3,11 +3,12 @@ from textwrap import dedent
|
|||
from behave import then, when
|
||||
|
||||
import wrappers
|
||||
from utils import parse_cli_args_to_dict
|
||||
|
||||
|
||||
@when('we run dbcli with {arg}')
|
||||
def step_run_cli_with_arg(context, arg):
|
||||
wrappers.run_cli(context, run_args=arg.split('='))
|
||||
wrappers.run_cli(context, run_args=parse_cli_args_to_dict(arg))
|
||||
|
||||
|
||||
@when('we execute a small query')
|
||||
|
|
71
test/features/steps/connection.py
Normal file
71
test/features/steps/connection.py
Normal file
|
@ -0,0 +1,71 @@
|
|||
import io
|
||||
import os
|
||||
import shlex
|
||||
|
||||
from behave import when, then
|
||||
import pexpect
|
||||
|
||||
import wrappers
|
||||
from test.features.steps.utils import parse_cli_args_to_dict
|
||||
from test.features.environment import MY_CNF_PATH, MYLOGIN_CNF_PATH, get_db_name_from_context
|
||||
from test.utils import HOST, PORT, USER, PASSWORD
|
||||
from mycli.config import encrypt_mylogin_cnf
|
||||
|
||||
|
||||
TEST_LOGIN_PATH = 'test_login_path'
|
||||
|
||||
|
||||
@when('we run mycli with arguments "{exact_args}" without arguments "{excluded_args}"')
|
||||
@when('we run mycli without arguments "{excluded_args}"')
|
||||
def step_run_cli_without_args(context, excluded_args, exact_args=''):
|
||||
wrappers.run_cli(
|
||||
context,
|
||||
run_args=parse_cli_args_to_dict(exact_args),
|
||||
exclude_args=parse_cli_args_to_dict(excluded_args).keys()
|
||||
)
|
||||
|
||||
|
||||
@then('status contains "{expression}"')
|
||||
def status_contains(context, expression):
|
||||
wrappers.expect_exact(context, f'{expression}', timeout=5)
|
||||
|
||||
# Normally, the shutdown after scenario waits for the prompt.
|
||||
# But we may have changed the prompt, depending on parameters,
|
||||
# so let's wait for its last character
|
||||
context.cli.expect_exact('>')
|
||||
context.atprompt = True
|
||||
|
||||
|
||||
@when('we create my.cnf file')
|
||||
def step_create_my_cnf_file(context):
|
||||
my_cnf = (
|
||||
'[client]\n'
|
||||
f'host = {HOST}\n'
|
||||
f'port = {PORT}\n'
|
||||
f'user = {USER}\n'
|
||||
f'password = {PASSWORD}\n'
|
||||
)
|
||||
with open(MY_CNF_PATH, 'w') as f:
|
||||
f.write(my_cnf)
|
||||
|
||||
|
||||
@when('we create mylogin.cnf file')
|
||||
def step_create_mylogin_cnf_file(context):
|
||||
os.environ.pop('MYSQL_TEST_LOGIN_FILE', None)
|
||||
mylogin_cnf = (
|
||||
f'[{TEST_LOGIN_PATH}]\n'
|
||||
f'host = {HOST}\n'
|
||||
f'port = {PORT}\n'
|
||||
f'user = {USER}\n'
|
||||
f'password = {PASSWORD}\n'
|
||||
)
|
||||
with open(MYLOGIN_CNF_PATH, 'wb') as f:
|
||||
input_file = io.StringIO(mylogin_cnf)
|
||||
f.write(encrypt_mylogin_cnf(input_file).read())
|
||||
|
||||
|
||||
@then('we are logged in')
|
||||
def we_are_logged_in(context):
|
||||
db_name = get_db_name_from_context(context)
|
||||
context.cli.expect_exact(f'{db_name}>', timeout=5)
|
||||
context.atprompt = True
|
12
test/features/steps/utils.py
Normal file
12
test/features/steps/utils.py
Normal file
|
@ -0,0 +1,12 @@
|
|||
import shlex
|
||||
|
||||
|
||||
def parse_cli_args_to_dict(cli_args: str):
|
||||
args_dict = {}
|
||||
for arg in shlex.split(cli_args):
|
||||
if '=' in arg:
|
||||
key, value = arg.split('=')
|
||||
args_dict[key] = value
|
||||
else:
|
||||
args_dict[arg] = None
|
||||
return args_dict
|
|
@ -3,6 +3,7 @@ import pexpect
|
|||
import sys
|
||||
import textwrap
|
||||
|
||||
|
||||
try:
|
||||
from StringIO import StringIO
|
||||
except ImportError:
|
||||
|
@ -13,7 +14,7 @@ def expect_exact(context, expected, timeout):
|
|||
timedout = False
|
||||
try:
|
||||
context.cli.expect_exact(expected, timeout=timeout)
|
||||
except pexpect.exceptions.TIMEOUT:
|
||||
except pexpect.TIMEOUT:
|
||||
timedout = True
|
||||
if timedout:
|
||||
# Strip color codes out of the output.
|
||||
|
@ -46,21 +47,43 @@ def expect_pager(context, expected, timeout):
|
|||
context.conf['pager_boundary'], expected), timeout=timeout)
|
||||
|
||||
|
||||
def run_cli(context, run_args=None):
|
||||
def run_cli(context, run_args=None, exclude_args=None):
|
||||
"""Run the process using pexpect."""
|
||||
run_args = run_args or []
|
||||
if context.conf.get('host', None):
|
||||
run_args.extend(('-h', context.conf['host']))
|
||||
if context.conf.get('user', None):
|
||||
run_args.extend(('-u', context.conf['user']))
|
||||
if context.conf.get('pass', None):
|
||||
run_args.extend(('-p', context.conf['pass']))
|
||||
if context.conf.get('dbname', None):
|
||||
run_args.extend(('-D', context.conf['dbname']))
|
||||
if context.conf.get('defaults-file', None):
|
||||
run_args.extend(('--defaults-file', context.conf['defaults-file']))
|
||||
if context.conf.get('myclirc', None):
|
||||
run_args.extend(('--myclirc', context.conf['myclirc']))
|
||||
run_args = run_args or {}
|
||||
rendered_args = []
|
||||
exclude_args = set(exclude_args) if exclude_args else set()
|
||||
|
||||
conf = dict(**context.conf)
|
||||
conf.update(run_args)
|
||||
|
||||
def add_arg(name, key, value):
|
||||
if name not in exclude_args:
|
||||
if value is not None:
|
||||
rendered_args.extend((key, value))
|
||||
else:
|
||||
rendered_args.append(key)
|
||||
|
||||
if conf.get('host', None):
|
||||
add_arg('host', '-h', conf['host'])
|
||||
if conf.get('user', None):
|
||||
add_arg('user', '-u', conf['user'])
|
||||
if conf.get('pass', None):
|
||||
add_arg('pass', '-p', conf['pass'])
|
||||
if conf.get('port', None):
|
||||
add_arg('port', '-P', str(conf['port']))
|
||||
if conf.get('dbname', None):
|
||||
add_arg('dbname', '-D', conf['dbname'])
|
||||
if conf.get('defaults-file', None):
|
||||
add_arg('defaults_file', '--defaults-file', conf['defaults-file'])
|
||||
if conf.get('myclirc', None):
|
||||
add_arg('myclirc', '--myclirc', conf['myclirc'])
|
||||
if conf.get('login_path'):
|
||||
add_arg('login_path', '--login-path', conf['login_path'])
|
||||
|
||||
for arg_name, arg_value in conf.items():
|
||||
if arg_name.startswith('-'):
|
||||
add_arg(arg_name, arg_name, arg_value)
|
||||
|
||||
try:
|
||||
cli_cmd = context.conf['cli_command']
|
||||
except KeyError:
|
||||
|
@ -73,7 +96,7 @@ def run_cli(context, run_args=None):
|
|||
'"'
|
||||
).format(sys.executable)
|
||||
|
||||
cmd_parts = [cli_cmd] + run_args
|
||||
cmd_parts = [cli_cmd] + rendered_args
|
||||
cmd = ' '.join(cmd_parts)
|
||||
context.cli = pexpect.spawnu(cmd, cwd=context.package_root)
|
||||
context.logfile = StringIO()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue