mirror of
https://github.com/neondatabase/neon.git
synced 2026-01-03 19:42:55 +00:00
Changes for 1.6 were merged and deployed two months ago https://github.com/neondatabase/neon/blob/main/pgxn/neon/neon--1.6--1.5.sql. In order to deploy https://github.com/neondatabase/neon/pull/12183, we need 1.6 to be default, otherwise we can't use prewarm API on read-only replica (`ALTER EXTENSION` won't work) and we need it for promotion
102 lines
4.3 KiB
Python
102 lines
4.3 KiB
Python
from __future__ import annotations
|
|
|
|
import time
|
|
from contextlib import closing
|
|
from typing import TYPE_CHECKING
|
|
|
|
from fixtures.log_helper import log
|
|
|
|
if TYPE_CHECKING:
|
|
from fixtures.neon_fixtures import NeonEnvBuilder
|
|
|
|
|
|
# Verify that the neon extension is installed and has the correct version.
|
|
def test_neon_extension(neon_env_builder: NeonEnvBuilder):
|
|
env = neon_env_builder.init_start()
|
|
env.create_branch("test_create_extension_neon")
|
|
|
|
endpoint_main = env.endpoints.create("test_create_extension_neon")
|
|
# don't skip pg_catalog updates - it runs CREATE EXTENSION neon
|
|
endpoint_main.respec(skip_pg_catalog_updates=False)
|
|
endpoint_main.start()
|
|
|
|
with closing(endpoint_main.connect()) as conn:
|
|
with conn.cursor() as cur:
|
|
cur.execute("SELECT extversion from pg_extension where extname='neon'")
|
|
# If this fails, it means the extension is either not installed
|
|
# or was updated and the version is different.
|
|
#
|
|
# IMPORTANT:
|
|
# If the version has changed, the test should be updated.
|
|
# Ensure that the default version is also updated in the neon.control file
|
|
assert cur.fetchone() == ("1.6",)
|
|
cur.execute("SELECT * from neon.NEON_STAT_FILE_CACHE")
|
|
res = cur.fetchall()
|
|
log.info(res)
|
|
assert len(res) == 1
|
|
assert len(res[0]) == 5
|
|
|
|
|
|
# Verify that the neon extension can be upgraded/downgraded.
|
|
def test_neon_extension_compatibility(neon_env_builder: NeonEnvBuilder):
|
|
env = neon_env_builder.init_start()
|
|
env.create_branch("test_neon_extension_compatibility")
|
|
|
|
endpoint_main = env.endpoints.create("test_neon_extension_compatibility")
|
|
# don't skip pg_catalog updates - it runs CREATE EXTENSION neon
|
|
endpoint_main.respec(skip_pg_catalog_updates=False)
|
|
endpoint_main.start()
|
|
|
|
with closing(endpoint_main.connect()) as conn:
|
|
with conn.cursor() as cur:
|
|
cur.execute("SELECT extversion from pg_extension where extname='neon'")
|
|
# IMPORTANT:
|
|
# If the version has changed, the test should be updated.
|
|
# Ensure that the default version is also updated in the neon.control file
|
|
assert cur.fetchone() == ("1.6",)
|
|
cur.execute("SELECT * from neon.NEON_STAT_FILE_CACHE")
|
|
all_versions = ["1.6", "1.5", "1.4", "1.3", "1.2", "1.1", "1.0"]
|
|
current_version = "1.6"
|
|
for idx, begin_version in enumerate(all_versions):
|
|
for target_version in all_versions[idx + 1 :]:
|
|
if current_version != begin_version:
|
|
cur.execute(
|
|
f"ALTER EXTENSION neon UPDATE TO '{begin_version}'; -- {current_version}->{begin_version}"
|
|
)
|
|
current_version = begin_version
|
|
# downgrade
|
|
cur.execute(
|
|
f"ALTER EXTENSION neon UPDATE TO '{target_version}'; -- {begin_version}->{target_version}"
|
|
)
|
|
# upgrade
|
|
cur.execute(
|
|
f"ALTER EXTENSION neon UPDATE TO '{begin_version}'; -- {target_version}->{begin_version}"
|
|
)
|
|
|
|
|
|
# Verify that the neon extension can be auto-upgraded to the latest version.
|
|
def test_neon_extension_auto_upgrade(neon_env_builder: NeonEnvBuilder):
|
|
env = neon_env_builder.init_start()
|
|
env.create_branch("test_neon_extension_auto_upgrade")
|
|
|
|
endpoint_main = env.endpoints.create("test_neon_extension_auto_upgrade")
|
|
# don't skip pg_catalog updates - it runs CREATE EXTENSION neon
|
|
endpoint_main.respec(skip_pg_catalog_updates=False)
|
|
endpoint_main.start()
|
|
|
|
with closing(endpoint_main.connect()) as conn:
|
|
with conn.cursor() as cur:
|
|
cur.execute("ALTER EXTENSION neon UPDATE TO '1.0';")
|
|
cur.execute("SELECT extversion from pg_extension where extname='neon'")
|
|
assert cur.fetchone() == ("1.0",) # Ensure the extension gets downgraded
|
|
|
|
endpoint_main.stop()
|
|
time.sleep(1)
|
|
endpoint_main.start()
|
|
time.sleep(1)
|
|
|
|
with closing(endpoint_main.connect()) as conn:
|
|
with conn.cursor() as cur:
|
|
cur.execute("SELECT extversion from pg_extension where extname='neon'")
|
|
assert cur.fetchone() != ("1.0",) # Ensure the extension gets upgraded
|