mirror of
https://github.com/neondatabase/neon.git
synced 2025-12-28 00:23:00 +00:00
Instead of having a lot of separate fixtures for setting up the page server, the compute nodes, the safekeepers etc., have one big ZenithEnv object that encapsulates the whole environment. Every test either uses a shared "zenith_simple_env" fixture, which contains the default setup of a pageserver with no authentication, and no safekeepers. Tests that want to use safekeepers or authentication set up a custom test-specific ZenithEnv fixture. Gathering information about the whole environment into one object makes some things simpler. For example, when a new compute node is created, you no longer need to pass the 'wal_acceptors' connection string as argument to the 'postgres.create_start' function. The 'create_start' function fetches that information directly from the ZenithEnv object.
108 lines
3.7 KiB
Python
108 lines
3.7 KiB
Python
import json
|
|
import uuid
|
|
|
|
from psycopg2.extensions import cursor as PgCursor
|
|
from fixtures.zenith_fixtures import ZenithEnv
|
|
from typing import cast
|
|
|
|
pytest_plugins = ("fixtures.zenith_fixtures")
|
|
|
|
|
|
def helper_compare_branch_list(page_server_cur: PgCursor, env: ZenithEnv, initial_tenant: str):
|
|
"""
|
|
Compare branches list returned by CLI and directly via API.
|
|
Filters out branches created by other tests.
|
|
"""
|
|
|
|
page_server_cur.execute(f'branch_list {initial_tenant}')
|
|
branches_api = sorted(
|
|
map(lambda b: cast(str, b['name']), json.loads(page_server_cur.fetchone()[0])))
|
|
branches_api = [b for b in branches_api if b.startswith('test_cli_') or b in ('empty', 'main')]
|
|
|
|
res = env.zenith_cli(["branch"])
|
|
res.check_returncode()
|
|
branches_cli = sorted(map(lambda b: b.split(':')[-1].strip(), res.stdout.strip().split("\n")))
|
|
branches_cli = [b for b in branches_cli if b.startswith('test_cli_') or b in ('empty', 'main')]
|
|
|
|
res = env.zenith_cli(["branch", f"--tenantid={initial_tenant}"])
|
|
res.check_returncode()
|
|
branches_cli_with_tenant_arg = sorted(
|
|
map(lambda b: b.split(':')[-1].strip(), res.stdout.strip().split("\n")))
|
|
branches_cli_with_tenant_arg = [
|
|
b for b in branches_cli if b.startswith('test_cli_') or b in ('empty', 'main')
|
|
]
|
|
|
|
assert branches_api == branches_cli == branches_cli_with_tenant_arg
|
|
|
|
|
|
def test_cli_branch_list(zenith_simple_env: ZenithEnv):
|
|
env = zenith_simple_env
|
|
page_server_conn = env.pageserver.connect()
|
|
page_server_cur = page_server_conn.cursor()
|
|
|
|
# Initial sanity check
|
|
helper_compare_branch_list(page_server_cur, env, env.initial_tenant)
|
|
|
|
# Create a branch for us
|
|
res = env.zenith_cli(["branch", "test_cli_branch_list_main", "empty"])
|
|
assert res.stderr == ''
|
|
helper_compare_branch_list(page_server_cur, env, env.initial_tenant)
|
|
|
|
# Create a nested branch
|
|
res = env.zenith_cli(["branch", "test_cli_branch_list_nested", "test_cli_branch_list_main"])
|
|
assert res.stderr == ''
|
|
helper_compare_branch_list(page_server_cur, env, env.initial_tenant)
|
|
|
|
# Check that all new branches are visible via CLI
|
|
res = env.zenith_cli(["branch"])
|
|
assert res.stderr == ''
|
|
branches_cli = sorted(map(lambda b: b.split(':')[-1].strip(), res.stdout.strip().split("\n")))
|
|
|
|
assert 'test_cli_branch_list_main' in branches_cli
|
|
assert 'test_cli_branch_list_nested' in branches_cli
|
|
|
|
|
|
def helper_compare_tenant_list(page_server_cur: PgCursor, env: ZenithEnv):
|
|
page_server_cur.execute(f'tenant_list')
|
|
tenants_api = sorted(
|
|
map(lambda t: cast(str, t['id']), json.loads(page_server_cur.fetchone()[0])))
|
|
|
|
res = env.zenith_cli(["tenant", "list"])
|
|
assert res.stderr == ''
|
|
tenants_cli = sorted(map(lambda t: t.split()[0], res.stdout.splitlines()))
|
|
|
|
assert tenants_api == tenants_cli
|
|
|
|
|
|
def test_cli_tenant_list(zenith_simple_env: ZenithEnv):
|
|
env = zenith_simple_env
|
|
page_server_conn = env.pageserver.connect()
|
|
page_server_cur = page_server_conn.cursor()
|
|
|
|
# Initial sanity check
|
|
helper_compare_tenant_list(page_server_cur, env)
|
|
|
|
# Create new tenant
|
|
tenant1 = uuid.uuid4().hex
|
|
res = env.zenith_cli(["tenant", "create", tenant1])
|
|
res.check_returncode()
|
|
|
|
# check tenant1 appeared
|
|
helper_compare_tenant_list(page_server_cur, env)
|
|
|
|
# Create new tenant
|
|
tenant2 = uuid.uuid4().hex
|
|
res = env.zenith_cli(["tenant", "create", tenant2])
|
|
res.check_returncode()
|
|
|
|
# check tenant2 appeared
|
|
helper_compare_tenant_list(page_server_cur, env)
|
|
|
|
res = env.zenith_cli(["tenant", "list"])
|
|
res.check_returncode()
|
|
tenants = sorted(map(lambda t: t.split()[0], res.stdout.splitlines()))
|
|
|
|
assert env.initial_tenant in tenants
|
|
assert tenant1 in tenants
|
|
assert tenant2 in tenants
|