Skip to content

Commit c3c32c6

Browse files
committed
Archive Node Test: implement live upgrade test
1 parent f7cc8f9 commit c3c32c6

File tree

4 files changed

+82
-3
lines changed

4 files changed

+82
-3
lines changed

src/test/archive/archive_node_tests/archive_node_tests.ml

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
open Core
22
open Mina_automation_runner
33

4+
let logger = Logger.create ()
5+
46
let () =
57
Backtrace.elide := false ;
6-
Async.Scheduler.set_record_backtraces true
8+
Async.Scheduler.set_record_backtraces true ;
9+
let random_seed =
10+
Time.(now () |> to_span_since_epoch |> Span.to_ms) |> Int.of_float
11+
in
12+
[%log info] "Initializing random with seed"
13+
~metadata:[ ("seed", `Int random_seed) ] ;
14+
Random.init random_seed
715

816
let () =
917
let open Alcotest in
@@ -32,4 +40,13 @@ let () =
3240
( module Mina_automation_fixture.Archive.Make_FixtureWithBootstrap
3341
(Upgrade_archive) ) )
3442
] )
43+
; ( "live_upgrade_archive"
44+
, [ test_case
45+
"Recreate database from precomputed blocks. Meanwhile run upgrade \
46+
script randomly at some time"
47+
`Quick
48+
(Runner.run_blocking
49+
( module Mina_automation_fixture.Archive.Make_FixtureWithBootstrap
50+
(Live_upgrade_archive) ) )
51+
] )
3552
]
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
open Async
2+
open Core
3+
open Mina_automation
4+
open Mina_automation_fixture.Archive
5+
open Common
6+
7+
(* NOTE:
8+
To run this test, several preparation is needed
9+
- ensure we have this test, replayer & archive node build with devnet profile
10+
- ensure we have a data base instance up
11+
- Run the following:
12+
```
13+
MINA_TEST_POSTGRES_URI=postgres://postgres:xxxx@localhost:5432 \
14+
MINA_TEST_NETWORK_DATA=./src/test/archive/sample_db \
15+
./_build/default/src/test/archive/archive_node_tests/archive_node_tests.exe \
16+
test live_upgrade_archive
17+
```
18+
*)
19+
20+
type t = Mina_automation_fixture.Archive.after_bootstrap
21+
22+
let test_case (test_data : t) =
23+
let open Deferred.Let_syntax in
24+
let daemon = Daemon.default () in
25+
let archive_uri = test_data.archive.config.postgres_uri in
26+
let temp_dir = test_data.temp_dir in
27+
let%bind precomputed_blocks =
28+
unpack_precomputed_blocks ~temp_dir test_data.network_data
29+
in
30+
let logger = Logger.create () in
31+
let log_file = temp_dir ^ "/live_upgrade.log" in
32+
let upgrade_path =
33+
Archive.Scripts.filepath `Upgrade
34+
|> Option.value_exn ~message:"Failed to find upgrade script"
35+
in
36+
let upgrade_script_finished = Ivar.create () in
37+
(let%bind () = after (Time.Span.of_min (Random.float_range 0. 5.)) in
38+
[%log info] "Starting upgrade script" ;
39+
let%map result =
40+
Psql.run_script ~connection:(Psql.Conn_str archive_uri) upgrade_path
41+
in
42+
[%log info] "Finished executing upgrade script"
43+
~metadata:[ ("result", `String result) ] ;
44+
Ivar.fill upgrade_script_finished () )
45+
|> Deferred.don't_wait_for ;
46+
Archive.Process.start_logging test_data.archive ~log_file ;
47+
48+
let%bind () =
49+
Daemon.archive_blocks_from_files daemon.executor
50+
~archive_address:test_data.archive.config.server_port ~format:`Precomputed
51+
precomputed_blocks
52+
in
53+
[%log info] "Loaded all precomputed blocks" ;
54+
let%bind () = Ivar.read upgrade_script_finished in
55+
let%bind () =
56+
assert_replayer_run_against_last_block
57+
~replayer_input_file_path:
58+
(Network_data.replayer_input_file_path test_data.network_data)
59+
archive_uri temp_dir
60+
in
61+
62+
Deferred.Or_error.return Mina_automation_fixture.Intf.Passed

src/test/archive/archive_node_tests/upgrade_archive.ml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ open Common
1212
```
1313
MINA_TEST_POSTGRES_URI=postgres://postgres:xxxx@localhost:5432 \
1414
MINA_TEST_NETWORK_DATA=./src/test/archive/sample_db \
15-
DUNE_PROFILE=devnet \
16-
dune exec src/test/archive/archive_node_tests/archive_node_tests.exe -- \
15+
./_build/default/src/test/archive/archive_node_tests/archive_node_tests.exe \
1716
test upgrade_archive
1817
```
1918
*)

src/test/mina_automation/daemon.ml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ type t = { config : Config.t; executor : Executor.t }
193193
let archive_blocks_from_files t ~archive_address ~format ?(sleep = 5) blocks =
194194
Deferred.List.iter blocks ~f:(fun block ->
195195
let%bind _ = archive_blocks t ~archive_address ~format [ block ] () in
196+
(* WARN: live upgrade test expect this sleep to be present so we can emulate a race condition *)
196197
after (Time.Span.of_sec (Float.of_int sleep)) )
197198

198199
let of_config config = { config; executor = Executor.AutoDetect }

0 commit comments

Comments
 (0)