mirror of
https://github.com/neondatabase/neon.git
synced 2025-12-27 16:12:56 +00:00
I made the check at launcher level with the perspective of generally moving election (decision who offloads) there. Also log timeline 'active' changes.
51 lines
1.6 KiB
Python
51 lines
1.6 KiB
Python
from fixtures.log_helper import log
|
|
from fixtures.neon_fixtures import NeonEnv, NeonEnvBuilder, NeonPageserverHttpClient
|
|
import pytest
|
|
|
|
|
|
def check_tenant(env: NeonEnv, pageserver_http: NeonPageserverHttpClient):
|
|
tenant_id, timeline_id = env.neon_cli.create_tenant()
|
|
pg = env.postgres.create_start('main', tenant_id=tenant_id)
|
|
# we rely upon autocommit after each statement
|
|
res_1 = pg.safe_psql_many(queries=[
|
|
'CREATE TABLE t(key int primary key, value text)',
|
|
'INSERT INTO t SELECT generate_series(1,100000), \'payload\'',
|
|
'SELECT sum(key) FROM t',
|
|
])
|
|
|
|
assert res_1[-1][0] == (5000050000, )
|
|
# TODO check detach on live instance
|
|
log.info("stopping compute")
|
|
pg.stop()
|
|
log.info("compute stopped")
|
|
|
|
pg.start()
|
|
res_2 = pg.safe_psql('SELECT sum(key) FROM t')
|
|
assert res_2[0] == (5000050000, )
|
|
|
|
pg.stop()
|
|
pageserver_http.timeline_detach(tenant_id, timeline_id)
|
|
|
|
|
|
@pytest.mark.parametrize('num_timelines,num_safekeepers', [(3, 1)])
|
|
def test_normal_work(neon_env_builder: NeonEnvBuilder, num_timelines: int, num_safekeepers: int):
|
|
"""
|
|
Basic test:
|
|
* create new tenant with a timeline
|
|
* write some data
|
|
* ensure that it was successfully written
|
|
* restart compute
|
|
* check that the data is there
|
|
* stop compute
|
|
* detach timeline
|
|
|
|
Repeat check for several tenants/timelines.
|
|
"""
|
|
|
|
neon_env_builder.num_safekeepers = num_safekeepers
|
|
env = neon_env_builder.init_start()
|
|
pageserver_http = env.pageserver.http_client()
|
|
|
|
for _ in range(num_timelines):
|
|
check_tenant(env, pageserver_http)
|