Files
neon/test_runner/regress/test_extensions.py
Jere Vaara 3532ae76ef compute_ctl: Add endpoint that allows extensions to be installed (#9344)
Adds endpoint to install extensions:

**POST** `/extensions`
```
{"extension":"pg_sessions_jwt","database":"neondb","version":"1.0.0"}
```

Will be used by `local-proxy`.
Example, for the JWT authentication to work the database needs to have
the pg_session_jwt extension and also to enable JWT to work in RLS
policies.

---------

Co-authored-by: Conrad Ludgate <conradludgate@gmail.com>
2024-10-18 15:07:36 +03:00

51 lines
1.7 KiB
Python

from logging import info
from fixtures.neon_fixtures import NeonEnv
def test_extensions(neon_simple_env: NeonEnv):
"""basic test for the extensions endpoint testing installing extensions"""
env = neon_simple_env
env.create_branch("test_extensions")
endpoint = env.endpoints.create_start("test_extensions")
extension = "neon_test_utils"
database = "test_extensions"
endpoint.safe_psql("CREATE DATABASE test_extensions")
with endpoint.connect(dbname=database) as pg_conn:
with pg_conn.cursor() as cur:
cur.execute(
"SELECT default_version FROM pg_available_extensions WHERE name = 'neon_test_utils'"
)
res = cur.fetchone()
assert res is not None
version = res[0]
with pg_conn.cursor() as cur:
cur.execute(
"SELECT extname, extversion FROM pg_extension WHERE extname = 'neon_test_utils'",
)
res = cur.fetchone()
assert not res, "The 'neon_test_utils' extension is installed"
client = endpoint.http_client()
install_res = client.extensions(extension, version, database)
info("Extension install result: %s", res)
assert install_res["extension"] == extension and install_res["version"] == version
with endpoint.connect(dbname=database) as pg_conn:
with pg_conn.cursor() as cur:
cur.execute(
"SELECT extname, extversion FROM pg_extension WHERE extname = 'neon_test_utils'",
)
res = cur.fetchone()
assert res is not None
(db_extension_name, db_extension_version) = res
assert db_extension_name == extension and db_extension_version == version