mirror of
https://github.com/neondatabase/neon.git
synced 2025-12-22 21:59:59 +00:00
## Problem `TYPE_CHECKING` is used inconsistently across Python tests. ## Summary of changes - Update `ruff`: 0.7.0 -> 0.11.2 - Enable TC (flake8-type-checking): https://docs.astral.sh/ruff/rules/#flake8-type-checking-tc - (auto)fix all new issues
107 lines
3.6 KiB
Python
107 lines
3.6 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING
|
|
|
|
import pytest
|
|
from fixtures.common_types import TimelineId
|
|
|
|
if TYPE_CHECKING:
|
|
from fixtures.neon_fixtures import NeonEnvBuilder
|
|
from fixtures.port_distributor import PortDistributor
|
|
|
|
|
|
# Test that neon cli is able to start and stop all processes with the user defaults.
|
|
# Repeats the example from README.md as close as it can
|
|
def test_neon_cli_basics(neon_env_builder: NeonEnvBuilder, port_distributor: PortDistributor):
|
|
env = neon_env_builder.init_configs()
|
|
# Skipping the init step that creates a local tenant in Pytest tests
|
|
try:
|
|
env.neon_cli.start()
|
|
env.create_tenant(tenant_id=env.initial_tenant, set_default=True)
|
|
|
|
main_branch_name = "main"
|
|
pg_port = port_distributor.get_port()
|
|
external_http_port = port_distributor.get_port()
|
|
internal_http_port = port_distributor.get_port()
|
|
env.neon_cli.endpoint_create(
|
|
main_branch_name,
|
|
pg_port,
|
|
external_http_port,
|
|
internal_http_port,
|
|
endpoint_id="ep-basic-main",
|
|
tenant_id=env.initial_tenant,
|
|
pg_version=env.pg_version,
|
|
)
|
|
env.neon_cli.endpoint_start("ep-basic-main")
|
|
|
|
branch_name = "migration-check"
|
|
env.neon_cli.timeline_branch(
|
|
tenant_id=env.initial_tenant,
|
|
timeline_id=TimelineId.generate(),
|
|
new_branch_name=branch_name,
|
|
)
|
|
pg_port = port_distributor.get_port()
|
|
external_http_port = port_distributor.get_port()
|
|
internal_http_port = port_distributor.get_port()
|
|
env.neon_cli.endpoint_create(
|
|
branch_name,
|
|
pg_port,
|
|
external_http_port,
|
|
internal_http_port,
|
|
endpoint_id=f"ep-{branch_name}",
|
|
tenant_id=env.initial_tenant,
|
|
pg_version=env.pg_version,
|
|
)
|
|
env.neon_cli.endpoint_start(f"ep-{branch_name}")
|
|
finally:
|
|
env.neon_cli.stop()
|
|
|
|
|
|
def test_neon_two_primary_endpoints_fail(
|
|
neon_env_builder: NeonEnvBuilder, port_distributor: PortDistributor
|
|
):
|
|
"""
|
|
Two primary endpoints with same tenant and timeline will not run together
|
|
"""
|
|
env = neon_env_builder.init_start()
|
|
branch_name = "main"
|
|
|
|
pg_port = port_distributor.get_port()
|
|
external_http_port = port_distributor.get_port()
|
|
internal_http_port = port_distributor.get_port()
|
|
env.neon_cli.endpoint_create(
|
|
branch_name,
|
|
pg_port,
|
|
external_http_port,
|
|
internal_http_port,
|
|
endpoint_id="ep1",
|
|
tenant_id=env.initial_tenant,
|
|
pg_version=env.pg_version,
|
|
)
|
|
|
|
pg_port = port_distributor.get_port()
|
|
external_http_port = port_distributor.get_port()
|
|
internal_http_port = port_distributor.get_port()
|
|
# ep1 is not running so create will succeed
|
|
env.neon_cli.endpoint_create(
|
|
branch_name,
|
|
pg_port,
|
|
external_http_port,
|
|
internal_http_port,
|
|
endpoint_id="ep2",
|
|
tenant_id=env.initial_tenant,
|
|
pg_version=env.pg_version,
|
|
)
|
|
|
|
env.neon_cli.endpoint_start("ep1")
|
|
|
|
expected_message = f'attempting to create a duplicate primary endpoint on tenant {env.initial_tenant}, timeline {env.initial_timeline}: endpoint "ep1" exists already. please don\'t do this, it is not supported.'
|
|
with pytest.raises(RuntimeError):
|
|
assert expected_message in env.neon_cli.endpoint_start("ep2").stderr
|
|
|
|
env.neon_cli.endpoint_stop("ep1")
|
|
# ep1 is stopped so create ep2 will succeed
|
|
env.neon_cli.endpoint_start("ep2")
|
|
# cleanup
|
|
env.neon_cli.endpoint_stop("ep2")
|