Files
neon/test_runner/regress/test_endpoint_crash.py

45 lines
1.6 KiB
Python

from __future__ import annotations
import pytest
from fixtures.neon_fixtures import NeonEnvBuilder
from fixtures.pg_version import PgVersion
from fixtures.utils import WITH_SANITIZERS, run_only_on_postgres
@pytest.mark.parametrize(
"sql_func",
[
"trigger_panic",
"trigger_segfault",
"💣", # calls `trigger_segfault` internally
],
)
def test_endpoint_crash(neon_env_builder: NeonEnvBuilder, sql_func: str):
"""
Test that triggering crash from neon_test_utils crashes the endpoint
"""
env = neon_env_builder.init_start()
env.create_branch("test_endpoint_crash")
endpoint = env.endpoints.create_start("test_endpoint_crash")
endpoint.safe_psql("CREATE EXTENSION neon_test_utils;")
with pytest.raises(Exception, match="This probably means the server terminated abnormally"):
endpoint.safe_psql(f"SELECT {sql_func}();")
@run_only_on_postgres([PgVersion.V17], "Currently, build vith sanitizers is possible with v17 only")
def test_sanitizers(neon_env_builder: NeonEnvBuilder):
"""
Test that undefined behavior leads to endpoint abort with sanitizers enabled
"""
env = neon_env_builder.init_start()
env.create_branch("test_ubsan")
endpoint = env.endpoints.create_start("test_ubsan")
# Test case based on https://www.postgresql.org/message-id/17167-028026e4ca333817@postgresql.org
if not WITH_SANITIZERS:
endpoint.safe_psql("SELECT 1::int4 << 128")
else:
with pytest.raises(Exception, match="This probably means the server terminated abnormally"):
endpoint.safe_psql("SELECT 1::int4 << 128")