summaryrefslogtreecommitdiffstats
path: root/tests/features
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2022-09-21 01:44:43 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2022-09-21 01:44:53 +0000
commit97864fef063b0960fd3df4529c561296e7805e8c (patch)
treee0f84cbf2df15e6c8dafb6161babb551d6b6fda6 /tests/features
parentReleasing debian version 3.4.1-1. (diff)
downloadpgcli-97864fef063b0960fd3df4529c561296e7805e8c.tar.xz
pgcli-97864fef063b0960fd3df4529c561296e7805e8c.zip
Merging upstream version 3.5.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tests/features')
-rw-r--r--tests/features/basic_commands.feature1
-rw-r--r--tests/features/db_utils.py37
-rw-r--r--tests/features/environment.py36
-rw-r--r--tests/features/pgbouncer.feature12
-rw-r--r--tests/features/steps/basic_commands.py2
-rw-r--r--tests/features/steps/crud_database.py2
-rw-r--r--tests/features/steps/pgbouncer.py22
-rw-r--r--tests/features/steps/wrappers.py3
8 files changed, 89 insertions, 26 deletions
diff --git a/tests/features/basic_commands.feature b/tests/features/basic_commands.feature
index 99f893e..cd15306 100644
--- a/tests/features/basic_commands.feature
+++ b/tests/features/basic_commands.feature
@@ -49,7 +49,6 @@ Feature: run the cli,
when we send "\?" command
then we see help output
- @wip
Scenario: run the cli with dsn and password
When we launch dbcli using dsn_password
then we send password
diff --git a/tests/features/db_utils.py b/tests/features/db_utils.py
index 6898394..595c6c2 100644
--- a/tests/features/db_utils.py
+++ b/tests/features/db_utils.py
@@ -1,5 +1,4 @@
-from psycopg2 import connect
-from psycopg2.extensions import AsIs
+from psycopg import connect
def create_db(
@@ -17,13 +16,10 @@ def create_db(
"""
cn = create_cn(hostname, password, username, "postgres", port)
- # ISOLATION_LEVEL_AUTOCOMMIT = 0
- # Needed for DB creation.
- cn.set_isolation_level(0)
-
+ cn.autocommit = True
with cn.cursor() as cr:
- cr.execute("drop database if exists %s", (AsIs(dbname),))
- cr.execute("create database %s", (AsIs(dbname),))
+ cr.execute(f"drop database if exists {dbname}")
+ cr.execute(f"create database {dbname}")
cn.close()
@@ -41,13 +37,26 @@ def create_cn(hostname, password, username, dbname, port):
:return: psycopg2.connection
"""
cn = connect(
- host=hostname, user=username, database=dbname, password=password, port=port
+ host=hostname, user=username, dbname=dbname, password=password, port=port
)
- print(f"Created connection: {cn.dsn}.")
+ print(f"Created connection: {cn.info.get_parameters()}.")
return cn
+def pgbouncer_available(hostname="localhost", password=None, username="postgres"):
+ cn = None
+ try:
+ cn = create_cn(hostname, password, username, "pgbouncer", 6432)
+ return True
+ except:
+ print("Pgbouncer is not available.")
+ finally:
+ if cn:
+ cn.close()
+ return False
+
+
def drop_db(hostname="localhost", username=None, password=None, dbname=None, port=None):
"""
Drop database.
@@ -58,12 +67,11 @@ def drop_db(hostname="localhost", username=None, password=None, dbname=None, por
"""
cn = create_cn(hostname, password, username, "postgres", port)
- # ISOLATION_LEVEL_AUTOCOMMIT = 0
# Needed for DB drop.
- cn.set_isolation_level(0)
+ cn.autocommit = True
with cn.cursor() as cr:
- cr.execute("drop database if exists %s", (AsIs(dbname),))
+ cr.execute(f"drop database if exists {dbname}")
close_cn(cn)
@@ -74,5 +82,6 @@ def close_cn(cn=None):
:param connection: psycopg2.connection
"""
if cn:
+ cn_params = cn.info.get_parameters()
cn.close()
- print(f"Closed connection: {cn.dsn}.")
+ print(f"Closed connection: {cn_params}.")
diff --git a/tests/features/environment.py b/tests/features/environment.py
index 215c85c..6cc8e14 100644
--- a/tests/features/environment.py
+++ b/tests/features/environment.py
@@ -111,7 +111,11 @@ def before_all(context):
context.conf["dbname"],
context.conf["port"],
)
-
+ context.pgbouncer_available = dbutils.pgbouncer_available(
+ hostname=context.conf["host"],
+ password=context.conf["pass"],
+ username=context.conf["user"],
+ )
context.fixture_data = fixutils.read_fixture_files()
# use temporary directory as config home
@@ -145,7 +149,7 @@ def after_all(context):
context.conf["port"],
)
- # Remove temp config direcotry
+ # Remove temp config directory
shutil.rmtree(context.env_config_home)
# Restore env vars.
@@ -164,7 +168,19 @@ def before_scenario(context, scenario):
if scenario.name == "list databases":
# not using the cli for that
return
- wrappers.run_cli(context)
+ currentdb = None
+ if "pgbouncer" in scenario.feature.tags:
+ if context.pgbouncer_available:
+ os.environ["PGDATABASE"] = "pgbouncer"
+ os.environ["PGPORT"] = "6432"
+ currentdb = "pgbouncer"
+ else:
+ scenario.skip()
+ else:
+ # set env vars back to normal test database
+ os.environ["PGDATABASE"] = context.conf["dbname"]
+ os.environ["PGPORT"] = context.conf["port"]
+ wrappers.run_cli(context, currentdb=currentdb)
wrappers.wait_prompt(context)
@@ -172,13 +188,17 @@ def after_scenario(context, scenario):
"""Cleans up after each scenario completes."""
if hasattr(context, "cli") and context.cli and not context.exit_sent:
# Quit nicely.
- if not context.atprompt:
+ if not getattr(context, "atprompt", False):
dbname = context.currentdb
- context.cli.expect_exact(f"{dbname}> ", timeout=15)
- context.cli.sendcontrol("c")
- context.cli.sendcontrol("d")
+ context.cli.expect_exact(f"{dbname}>", timeout=5)
+ try:
+ context.cli.sendcontrol("c")
+ context.cli.sendcontrol("d")
+ except Exception as x:
+ print("Failed cleanup after scenario:")
+ print(x)
try:
- context.cli.expect_exact(pexpect.EOF, timeout=15)
+ context.cli.expect_exact(pexpect.EOF, timeout=5)
except pexpect.TIMEOUT:
print(f"--- after_scenario {scenario.name}: kill cli")
context.cli.kill(signal.SIGKILL)
diff --git a/tests/features/pgbouncer.feature b/tests/features/pgbouncer.feature
new file mode 100644
index 0000000..14cc5ad
--- /dev/null
+++ b/tests/features/pgbouncer.feature
@@ -0,0 +1,12 @@
+@pgbouncer
+Feature: run pgbouncer,
+ call the help command,
+ exit the cli
+
+ Scenario: run "show help" command
+ When we send "show help" command
+ then we see the pgbouncer help output
+
+ Scenario: run the cli and exit
+ When we send "ctrl + d"
+ then dbcli exits
diff --git a/tests/features/steps/basic_commands.py b/tests/features/steps/basic_commands.py
index a7c99ee..7c87814 100644
--- a/tests/features/steps/basic_commands.py
+++ b/tests/features/steps/basic_commands.py
@@ -69,7 +69,7 @@ def step_ctrl_d(context):
context.cli.sendline(r"\pset pager off")
wrappers.wait_prompt(context)
context.cli.sendcontrol("d")
- context.cli.expect(pexpect.EOF, timeout=15)
+ context.cli.expect(pexpect.EOF, timeout=5)
context.exit_sent = True
diff --git a/tests/features/steps/crud_database.py b/tests/features/steps/crud_database.py
index 3f5d0e7..87cdc85 100644
--- a/tests/features/steps/crud_database.py
+++ b/tests/features/steps/crud_database.py
@@ -59,7 +59,7 @@ def step_see_prompt(context):
Wait to see the prompt.
"""
db_name = getattr(context, "currentdb", context.conf["dbname"])
- wrappers.expect_exact(context, f"{db_name}> ", timeout=5)
+ wrappers.expect_exact(context, f"{db_name}>", timeout=5)
context.atprompt = True
diff --git a/tests/features/steps/pgbouncer.py b/tests/features/steps/pgbouncer.py
new file mode 100644
index 0000000..f156982
--- /dev/null
+++ b/tests/features/steps/pgbouncer.py
@@ -0,0 +1,22 @@
+"""
+Steps for behavioral style tests are defined in this module.
+Each step is defined by the string decorating it.
+This string is used to call the step in "*.feature" file.
+"""
+
+from behave import when, then
+import wrappers
+
+
+@when('we send "show help" command')
+def step_send_help_command(context):
+ context.cli.sendline("show help")
+
+
+@then("we see the pgbouncer help output")
+def see_pgbouncer_help(context):
+ wrappers.expect_exact(
+ context,
+ "SHOW HELP|CONFIG|DATABASES|POOLS|CLIENTS|SERVERS|USERS|VERSION",
+ timeout=3,
+ )
diff --git a/tests/features/steps/wrappers.py b/tests/features/steps/wrappers.py
index 0ca8366..6180517 100644
--- a/tests/features/steps/wrappers.py
+++ b/tests/features/steps/wrappers.py
@@ -70,4 +70,5 @@ def run_cli(context, run_args=None, prompt_check=True, currentdb=None):
def wait_prompt(context):
"""Make sure prompt is displayed."""
- expect_exact(context, "{0}> ".format(context.conf["dbname"]), timeout=5)
+ prompt_str = "{0}>".format(context.currentdb)
+ expect_exact(context, [prompt_str + " ", prompt_str, pexpect.EOF], timeout=3)