diff --git a/control_plane/src/endpoint.rs b/control_plane/src/endpoint.rs index f33d494316..6f32ababdf 100644 --- a/control_plane/src/endpoint.rs +++ b/control_plane/src/endpoint.rs @@ -499,7 +499,7 @@ impl Endpoint { // in spec, but we don't have a way to do that yet in the python tests. // NEW HACK: we enable the anon custom extension for everyone! this is of course just for testing // how will we do it for real? - custom_extensions: Some(vec!["anon".to_string()]), + custom_extensions: Some(vec!["anon".to_string(), self.tenant_id.to_string()]), }; let spec_path = self.endpoint_path().join("spec.json"); std::fs::write(spec_path, serde_json::to_string_pretty(&spec)?)?; diff --git a/test_runner/regress/test_download_extensions.py b/test_runner/regress/test_download_extensions.py index 71e4341836..69ac81ab42 100644 --- a/test_runner/regress/test_download_extensions.py +++ b/test_runner/regress/test_download_extensions.py @@ -1,3 +1,4 @@ +import json import os from contextlib import closing from io import BytesIO @@ -248,3 +249,48 @@ def test_remote_extensions( log.info(f"Deleted {file}") except FileNotFoundError: log.info(f"{file} does not exist, so cannot be deleted") + + +""" +This tests against the actual infra for real S3 +Note in particular that we don't need to set up a bucket (real or mock) +because we are testing the files already uploaded as part of CI/CD +""" + + +def test_remote_extensions_in_bucket(neon_env_builder: NeonEnvBuilder): + neon_env_builder.enable_remote_storage( + remote_storage_kind=RemoteStorageKind.REAL_S3, + test_name="test_remote_extensions_in_bucket", + enable_remote_extensions=False, # we don't enable remote extensions here; instead we use the real bucket + ) + neon_env_builder.num_safekeepers = 3 + env = neon_env_builder.init_start() + tenant_id, _ = env.neon_cli.create_tenant() + env.neon_cli.create_timeline("test_remote_extensions_in_bucket", tenant_id=tenant_id) + + # Start a compute node and check that it can download the extensions + # and use them to CREATE EXTENSION and LOAD 'library.so' + remote_ext_config = { + "bucket": "neon-dev-extensions-us-east-2", + "region": "us-east-2", + "endpoint": None, + "prefix": "5412197734", # build tag + } + endpoint = env.endpoints.create_start( + "test_remote_extensions_in_bucket", + tenant_id=tenant_id, + remote_ext_config=json.dumps(remote_ext_config), + # config_lines=["shared_preload_libraries='anon, neon'"], + ) + with closing(endpoint.connect()) as conn: + with conn.cursor() as cur: + try: + cur.execute("CREATE EXTENSION anon") + except Exception as e: + # Check that this errors, but for the right reason + # (that it is missing dependencies, not that files failed to download) + log.info(e) + assert 'required extension "pgcrypto" is not installed' in str(e) + + log.info("Please MANUALLY cleanup any downloaded files")