Files
neon/test_runner/batch_fuzz/test_fuzz_safekeeper.py
2022-04-20 23:00:43 -04:00

40 lines
1.4 KiB
Python

from contextlib import closing
import pytest
from fixtures.zenith_fixtures import ZenithEnv, PgBin, ZenithEnvBuilder, DEFAULT_BRANCH_NAME, AdversarialProposerBin
from fixtures.benchmark_fixture import MetricReport, ZenithBenchmarker
# TODO PR execution plan:
# 1. Write an adversarial proposer that successfully sends greeting
# 1. Make pg connection
# 2. Send a FeMessage::CopyData that contains ('g' as char as u8 as u64) in LittleEndian
# 2. Send Elected, and see what happens
# 3. Add TODOs, merge the harness into main, improve later
def test_fuzz_safekeeper(zenith_env_builder: ZenithEnvBuilder,
adversarial_proposer_bin: AdversarialProposerBin):
zenith_env_builder.num_safekeepers = 3
env = zenith_env_builder.init_start()
env.zenith_cli.create_branch('test_fuzz_safekeeper')
pg = env.postgres.create_start('test_fuzz_safekeeper')
timeline = pg.safe_psql("SHOW zenith.zenith_timeline")[0][0]
output = adversarial_proposer_bin.say_hi(env.initial_tenant.hex, timeline)
print(output)
# TODO:
# 1. Start an adversarial proposer (new rust binary) that tries to take over
# 2. Kill pg node, let the proposer take over
# 3. Start multiple adversarial proposers
# 4. Run for a while, checking safekeeper invariants
# TODO:
# 1. Explore fuzzing techniques, look into https://docs.rs/stateright/latest/stateright/
# 2. Simulate network delay between nodes, both random and deliberate