Skip to content

Commit

Permalink
feat(tests): automated migration testing
Browse files Browse the repository at this point in the history
Building on the smoke-test rewrite to use process-compose,
let's script the migration process, so that we can test
current HEAD of the monorepo against a prior tagged version,
and validate that necessary migrations are in place.

One possible approach is to fetch prebuilt binaries from uploaded
artifacts on Github. That's fine for `pd`, but doesn't work for
running the smoke tests, due to client/server incompatibility.
Therefore we'll clone the entire repo in a git-ignored subdir,
and build the old binaries there. Heavy, but reliable.

Updated to use the concise `pd migrate` UX from #4339.
Previously, there were missing AuctionParams, resolved by #4338.
It's imperative that we use the vote-to-halt mechanism to prepare
for the upgrade, otherwise the priv validator state munging will not
work.

feat: migration-test crate

Strictly for running the migration-test suite of integration tests,
very similar in nature to the network-integration tests AKA smoke tests.
tests. Copy/pastes a lot of code from the smokes, which we can always
factor out into reusable utils, but not bothering with that right now.

feat: create and host local migration archive, for join assertion

We need to confirm that post-migration, new-joining nodes can peer
with the network and stream blocks. To do so, we must create and host
a tarball of archived state. We do that locally.
  • Loading branch information
conorsch committed May 29, 2024
1 parent 3a8f005 commit ad5476f
Show file tree
Hide file tree
Showing 17 changed files with 1,451 additions and 7 deletions.
40 changes: 40 additions & 0 deletions .github/workflows/migration.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
---
name: Migration test
on:
pull_request:

jobs:
migration_test:
runs-on: buildjet-32vcpu-ubuntu-2204
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
steps:
- uses: actions/checkout@v4
with:
lfs: true
fetch-tags: true
fetch-depth: 0

- name: Load rust cache
uses: astriaorg/[email protected]
with:
# Cache the git worktree for faster builds
workspaces: |
. -> ./target
./deployments/worktrees/v0.75.0 -> ./deployments/worktrees/v0.75.0/target
- name: Install cometbft binary
run: ./deployments/scripts/install-cometbft

- name: Install process-compose
run: >-
sh -c "$(curl --location https://raw.githubusercontent.com/F1bonacc1/process-compose/main/scripts/get-pc.sh)" --
-d -b ~/bin
- name: Run migration test
run: |
export PATH="$HOME/bin:$PATH"
# debugging cache layers, checking which scripts are visible to CI context
tree deployments/compose/ deployments/scripts/
./deployments/scripts/migration-test v0.75.0
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,11 @@ deployments/relayer/configs/penumbra-local.json

# Logs, and other files from smoke tests
deployments/logs/
deployments/worktrees/
deployments/bin/
crates/bin/pcli/proposal.toml
phase1.bin
crates/test/migration-test/proposal.toml

# Memory profiler, via bytehound or otherwise
*.dat
Expand Down
20 changes: 20 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ members = [
"crates/util/tower-trace",
"crates/view",
"crates/wallet",
"tools/summonerd",
"tools/summonerd", "crates/test/migration-test",
]

# Config for 'cargo dist'
Expand Down
35 changes: 35 additions & 0 deletions crates/test/migration-test/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
[package]
name = "migration-test"
description = "Integration test runner for evaluating Penumbra upgrades"
authors.workspace = true
edition.workspace = true
version.workspace = true
repository.workspace = true
homepage.workspace = true
license.workspace = true

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[features]
# By default, don't enable migration-tests: require explicit opt-in via
# `--features migration-test`.
default = []
migration-test = []

[dependencies]
anyhow = {workspace = true}
directories = {workspace = true}
once_cell = {workspace = true}
penumbra-keys = {workspace = true, default-features = false}
serde = {workspace = true, features = ["derive"]}
serde_json = {workspace = true}
serde_with = {workspace = true, features = ["hex"]}
toml = {workspace = true, features = ["preserve_order"]}
tracing = {workspace = true}
tracing-subscriber = {workspace = true, features = ["env-filter", "ansi"]}

[dev-dependencies]
assert_cmd = {workspace = true}
predicates = "2.1"
regex = {workspace = true}
tempfile = {workspace = true}
410 changes: 410 additions & 0 deletions crates/test/migration-test/files/migration-allocations.csv

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions crates/test/migration-test/src/main.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
fn main() {
println!("Hello, world!");
}
Loading

0 comments on commit ad5476f

Please sign in to comment.