diff --git a/src/bin_testnet_scenarios/evm_rollup_upgrade.ml b/src/bin_testnet_scenarios/evm_rollup_upgrade.ml index 5e4e06f317cf14c56c466a0c5d12188357860a32..3f0824b2305037c37591a78940045079d8478b68 100644 --- a/src/bin_testnet_scenarios/evm_rollup_upgrade.ml +++ b/src/bin_testnet_scenarios/evm_rollup_upgrade.ml @@ -197,6 +197,7 @@ let upgrade_kernel ~configuration_path ~testnet () = ~tag:"new_kernel" ~path: (upgrade_config.kernel_dir // (upgrade_config.new_kernel ^ ".wasm")) + () in replace_preimages ~smart_rollup_node ~new_kernel in diff --git a/tezt/lib_riscv_sandbox/tezt_riscv_sandbox.ml b/tezt/lib_riscv_sandbox/tezt_riscv_sandbox.ml index 4af629edde9cd8dbf09eb62d37189e60a908aa6d..c3ffbfd0e4f34e7832ccdc34dd7cfa1f072c7ee4 100644 --- a/tezt/lib_riscv_sandbox/tezt_riscv_sandbox.ml +++ b/tezt/lib_riscv_sandbox/tezt_riscv_sandbox.ml @@ -25,13 +25,13 @@ (*****************************************************************************) let riscv_sandbox = - Uses.make ~tag:"riscv_sandbox" ~path:"./src/riscv/riscv-sandbox" + Uses.make ~tag:"riscv_sandbox" ~path:"./src/riscv/riscv-sandbox" () (* Tell Manifezt that [riscv_sandbox] itself depends on the full contents of the [src/riscv] directory. Manifezt doesn't know how to automatically infer non-OCaml dependency relationships. Also declare a dependency on the RISC-V test suite using the same tag to avoid warnings. *) -let _ = Uses.make ~tag:"riscv_sandbox" ~path:"./src/riscv/" +let _ = Uses.make ~tag:"riscv_sandbox" ~path:"./src/riscv/" () type vm_kind = Pvm | Test diff --git a/tezt/lib_tezos/constant.ml b/tezt/lib_tezos/constant.ml index c7c94d196e76afc598843ad2ef1d11bce7d35961..1680e93efc2f9370aeb9bd6616e91c548a562048 100644 --- a/tezt/lib_tezos/constant.ml +++ b/tezt/lib_tezos/constant.ml @@ -34,58 +34,60 @@ let octez_admin_client = Uses.octez_admin_client let octez_node = Uses.octez_node -let octez_codec = Uses.make ~tag:"codec" ~path:"./octez-codec" +let octez_codec = Uses.make ~tag:"codec" ~path:"./octez-codec" () -let octez_snoop = Uses.make ~tag:"snoop" ~path:"./octez-snoop" +let octez_snoop = Uses.make ~tag:"snoop" ~path:"./octez-snoop" () let octez_protocol_compiler = - Uses.make ~tag:"protocol_compiler" ~path:"./octez-protocol-compiler" + Uses.make ~tag:"protocol_compiler" ~path:"./octez-protocol-compiler" () -let octez_dal_node = Uses.make ~tag:"dal_node" ~path:"./octez-dal-node" +let octez_dal_node = Uses.make ~tag:"dal_node" ~path:"./octez-dal-node" () -let octez_dac_node = Uses.make ~tag:"dac_node" ~path:"./octez-dac-node" +let octez_dac_node = Uses.make ~tag:"dac_node" ~path:"./octez-dac-node" () -let octez_dac_client = Uses.make ~tag:"dac_client" ~path:"./octez-dac-client" +let octez_dac_client = Uses.make ~tag:"dac_client" ~path:"./octez-dac-client" () let octez_smart_rollup_node = - Uses.make ~tag:"smart_rollup_node" ~path:"./octez-smart-rollup-node" + Uses.make ~tag:"smart_rollup_node" ~path:"./octez-smart-rollup-node" () -let octez_evm_node = Uses.make ~tag:"evm_node" ~path:"./octez-evm-node" +let octez_evm_node = Uses.make ~tag:"evm_node" ~path:"./octez-evm-node" () -let octez_dsn_node = Uses.make ~tag:"dsn_node" ~path:"./octez-dsn-node" +let octez_dsn_node = Uses.make ~tag:"dsn_node" ~path:"./octez-dsn-node" () -let octez_signer = Uses.make ~tag:"signer" ~path:"./octez-signer" +let octez_signer = Uses.make ~tag:"signer" ~path:"./octez-signer" () let octez_injector_server = Uses.make ~tag:"injector_server" ~path: "./_build/default/contrib/octez_injector_server/octez_injector_server.exe" + () let smart_rollup_installer = - Uses.make ~tag:"smart_rollup_installer" ~path:"smart-rollup-installer" + Uses.make ~tag:"smart_rollup_installer" ~path:"smart-rollup-installer" () (* The following is unused because even though the WASM debugger is released, there are no tests for it yet, except [tezt/tests/binaries.ml]. However, this test requires the executables it tests to be declared with [Uses.make] so that they are registered in the lookup table of [Uses]. *) let _octez_smart_rollup_wasm_debugger = - Uses.make ~tag:"wasm_debugger" ~path:"./octez-smart-rollup-wasm-debugger" + Uses.make ~tag:"wasm_debugger" ~path:"./octez-smart-rollup-wasm-debugger" () let teztale_archiver = - Uses.make ~tag:"teztale_archiver" ~path:"./octez-teztale-archiver" + Uses.make ~tag:"teztale_archiver" ~path:"./octez-teztale-archiver" () let teztale_server = - Uses.make ~tag:"teztale_server" ~path:"./octez-teztale-server" + Uses.make ~tag:"teztale_server" ~path:"./octez-teztale-server" () module WASM = struct let dal_echo_kernel = - Uses.make ~tag:"dal_echo_kernel" ~path:"dal_echo_kernel.wasm" + Uses.make ~tag:"dal_echo_kernel" ~path:"dal_echo_kernel.wasm" () let debug_kernel = Uses.make ~tag:"debug_kernel" ~path:"etherlink/kernel_evm/kernel/tests/resources/debug_kernel.wasm" + () (* Note: this should probably depend on the protocol, and thus be in the [Protocol] module? *) @@ -94,19 +96,27 @@ module WASM = struct ~tag:"echo" ~path: "src/proto_alpha/lib_protocol/test/integration/wasm_kernel/echo.wasm" + () - let evm_kernel = Uses.make ~tag:"evm_kernel" ~path:"evm_kernel.wasm" + let evm_kernel = + Uses.make + ~how_to_build:"make -f etherlink.mk build" + ~tag:"evm_kernel" + ~path:"evm_kernel.wasm" + () let failed_migration = Uses.make ~tag:"failed_migration" ~path:"etherlink/kernel_evm/kernel/tests/resources/failed_migration.wasm" + () let mainnet_evm_kernel = Uses.make ~tag:"mainnet_evm_kernel" ~path: "etherlink/kernel_evm/kernel/tests/resources/mainnet_evm_kernel.wasm" + () let mainnet_evm_commit = "4f4457e2527cb227a90bb1c56d3a83f39c0f78fd" @@ -115,12 +125,14 @@ module WASM = struct ~tag:"ghostnet_evm_kernel" ~path: "etherlink/kernel_evm/kernel/tests/resources/ghostnet_evm_kernel.wasm" + () let ghostnet_evm_commit = "af7909023768bc4aad3120bec7bea4a64a576047" - let tx_kernel = Uses.make ~tag:"tx_kernel" ~path:"tx_kernel.wasm" + let tx_kernel = Uses.make ~tag:"tx_kernel" ~path:"tx_kernel.wasm" () - let tx_kernel_dal = Uses.make ~tag:"tx_kernel_dal" ~path:"tx_kernel_dal.wasm" + let tx_kernel_dal = + Uses.make ~tag:"tx_kernel_dal" ~path:"tx_kernel_dal.wasm" () end (* TODO: tezos/tezos#4803 diff --git a/tezt/lib_tezos/protocol.ml b/tezt/lib_tezos/protocol.ml index d975f96f49c87b33a793d73881d090350b87d9e5..a6a64adff94c3b22711bd59e777dc48d538055db 100644 --- a/tezt/lib_tezos/protocol.ml +++ b/tezt/lib_tezos/protocol.ml @@ -88,6 +88,7 @@ let protocol_dependent_uses ~tag ~path = Uses.make ~tag:(tag ^ String.lowercase_ascii protocol) ~path:(path ^ protocol) + () in (* Make sure [Uses.lookup] knows about all executables even before tests actually registers themselves. *) diff --git a/tezt/lib_wrapper/tezt_wrapper.ml b/tezt/lib_wrapper/tezt_wrapper.ml index 5c3aa3bcf3252b16b49ababb6c315d9f90f05bde..e8c51efbbda8cf76260bfc52b812f6953eab80c7 100644 --- a/tezt/lib_wrapper/tezt_wrapper.ml +++ b/tezt/lib_wrapper/tezt_wrapper.ml @@ -17,7 +17,7 @@ let error_mode_for_useless_use = ref Warn let error_mode_for_non_existing_use = ref Fail module Uses = struct - type t = {tag : string; path : string} + type t = {tag : string; path : string; how_to_build : string option} (* Filled by [make] and read by [lookup]. *) let known_paths : t String_map.t ref = ref String_map.empty @@ -35,8 +35,8 @@ module Uses = struct (function None -> Some uses | Some _ as x -> x) !known_paths - let make ~tag ~path = - let uses = {tag; path} in + let make ?how_to_build ~tag ~path () = + let uses = {tag; path; how_to_build} in add_to_known_paths path uses ; uses @@ -50,13 +50,14 @@ module Uses = struct let lookup path = String_map.find_opt (canonicalize_path path) !known_paths - let octez_node = make ~tag:"node" ~path:"./octez-node" + let octez_node = make ~tag:"node" ~path:"./octez-node" () - let octez_client = make ~tag:"client" ~path:"./octez-client" + let octez_client = make ~tag:"client" ~path:"./octez-client" () - let octez_admin_client = make ~tag:"admin_client" ~path:"./octez-admin-client" + let octez_admin_client = + make ~tag:"admin_client" ~path:"./octez-admin-client" () - let octez_baker_alpha = make ~tag:"baker_alpha" ~path:"./octez-baker-alpha" + let octez_baker_alpha = make ~tag:"baker_alpha" ~path:"./octez-baker-alpha" () let register_meta_test () = Regression.register @@ -106,15 +107,24 @@ let wrap ~file ~title ~tags ?(uses = []) ?(uses_node = true) (match uses_that_do_not_exist with | [] -> () | _ :: _ -> - let paths = - Fun.flip List.map uses_that_do_not_exist @@ fun uses -> uses.path + let error_details = + List.map + (fun Uses.{path; how_to_build; _} -> + sf + "'%s' which does not exist%s" + path + (match how_to_build with + | None -> "" + | Some how_to_build -> sf " (try '%s')" how_to_build)) + uses_that_do_not_exist + |> String.concat ", " in error !error_mode_for_non_existing_use - "In %S, test %S requires %s which do(es) not exist." + "In %S, test %S requires %s." file title - (String.concat ", " (List.map (sf "'%s'") paths))) ; + error_details) ; (* Set hook so that tests can only call [Uses.path] on allowed paths. *) (Uses.path_handler := fun uses -> diff --git a/tezt/lib_wrapper/tezt_wrapper.mli b/tezt/lib_wrapper/tezt_wrapper.mli index c03e311d1ec4de69cecb0241e293c9fcb4802af1..e457f93ea439bb35107100e019c185e378614e0d 100644 --- a/tezt/lib_wrapper/tezt_wrapper.mli +++ b/tezt/lib_wrapper/tezt_wrapper.mli @@ -17,7 +17,7 @@ module Uses : sig For instance, you can define: {[ - let data = Uses.make ~tag:"data" ~path:"data/file.dat" + let data = Uses.make ~tag:"data" ~path:"data/file.dat" () ]} You would then: - declare your test with [~uses:[data]]; @@ -40,8 +40,19 @@ module Uses : sig (** Make a test dependency. Multiple paths can be associated with the same tag, - and the same paths can be associated with different tags. *) - val make : tag:string -> path:string -> t + and the same paths can be associated with different tags. + + [how_to_build], if set, is printed to the user should the + dependency be missing, and should contain instructions on how to + build the dependency. Example: + {[ + Uses.make + ~how_to_build:"make -f etherlink.ml build" + ~tag:"evm_kernel" + ~path:"evm_kernel.wasm" + () + ]} *) + val make : ?how_to_build:string -> tag:string -> path:string -> unit -> t (** Get the path of a test dependency. *) val path : t -> string diff --git a/tezt/tests/cloud/dal.ml b/tezt/tests/cloud/dal.ml index 2c706603ba9b8f3d18df0ecadebaf160de4b2f47..cf9978ca46da1ff07d4105f63740962b371ed6c5 100644 --- a/tezt/tests/cloud/dal.ml +++ b/tezt/tests/cloud/dal.ml @@ -261,8 +261,9 @@ module Teztale = struct {login; password = login} let run_server - ?(path = Uses.(path (make ~tag:"codec" ~path:"./octez-teztale-server"))) - agent = + ?(path = + Uses.(path (make ~tag:"codec" ~path:"./octez-teztale-server" ()))) agent + = let* server = Teztale.Server.run ~path agent () in let address = match Agent.point agent with @@ -274,8 +275,9 @@ module Teztale = struct let wait_server t = Teztale.Server.wait_for_readiness t.server let add_archiver - ?(path = Uses.(path (make ~tag:"codec" ~path:"./octez-teztale-archiver"))) - t agent ~node_port = + ?(path = + Uses.(path (make ~tag:"codec" ~path:"./octez-teztale-archiver" ()))) t + agent ~node_port = let user = fresh_user () in let feed : Teztale.interface list = [{address = t.address; port = t.server.conf.interface.port}] diff --git a/tezt/tests/riscv_sandbox.ml b/tezt/tests/riscv_sandbox.ml index 19935837902e518a1102b8441d29022f2ac027a6..d48eb7821ee1aa19ed427601e8da1e50c1bb5284 100644 --- a/tezt/tests/riscv_sandbox.ml +++ b/tezt/tests/riscv_sandbox.ml @@ -32,15 +32,18 @@ *) let hermit_loader = - Uses.make ~tag:"riscv" ~path:"src/riscv/assets/hermit-loader" + Uses.make ~tag:"riscv" ~path:"src/riscv/assets/hermit-loader" () -let dummy_kernel = Uses.make ~tag:"riscv" ~path:"src/riscv/riscv-dummy.elf" +let dummy_kernel = Uses.make ~tag:"riscv" ~path:"src/riscv/riscv-dummy.elf" () let dummy_kernel_inbox = - Uses.make ~tag:"riscv" ~path:"tezt/tests/riscv-tests/dummy-kernel-inbox.json" + Uses.make + ~tag:"riscv" + ~path:"tezt/tests/riscv-tests/dummy-kernel-inbox.json" + () let dummy_kernel_frozen = - Uses.make ~tag:"riscv" ~path:"src/riscv/assets/riscv-dummy.elf" + Uses.make ~tag:"riscv" ~path:"src/riscv/assets/riscv-dummy.elf" () let test_dummy_kernel () = Tezt_riscv_sandbox.run_pvm @@ -61,6 +64,7 @@ let inline_asm_tests = Uses.make ~tag:"riscv" ~path:"src/riscv/tests/inline_asm/rv64-inline-asm-tests" + () let test_inline_asm () = Tezt_riscv_sandbox.run_test ~input:inline_asm_tests () diff --git a/tezt/tests/sc_rollup.ml b/tezt/tests/sc_rollup.ml index 4958c08852fa096a98e37f158fbec36ed857c7e1..e1666322345afb3120404f741f8b68dd4cf25629 100644 --- a/tezt/tests/sc_rollup.ml +++ b/tezt/tests/sc_rollup.ml @@ -6127,8 +6127,11 @@ let register_riscv ~protocols = let kind = "riscv" in let boot_sector = read_riscv_kernel - (Uses.make ~tag:"riscv" ~path:"src/riscv/assets/riscv-dummy.elf") - (Uses.make ~tag:"riscv" ~path:"src/riscv/assets/riscv-dummy.elf.checksum") + (Uses.make ~tag:"riscv" ~path:"src/riscv/assets/riscv-dummy.elf" ()) + (Uses.make + ~tag:"riscv" + ~path:"src/riscv/assets/riscv-dummy.elf.checksum" + ()) in test_origination ~kind protocols ; test_rpcs ~kind ~boot_sector protocols ~kernel_debug_log:true ; @@ -6144,8 +6147,8 @@ let register_riscv_jstz ~protocols = let kind = "riscv" in let boot_sector = read_riscv_kernel - (Uses.make ~tag:"riscv" ~path:"src/riscv/assets/jstz") - (Uses.make ~tag:"riscv" ~path:"src/riscv/assets/jstz.checksum") + (Uses.make ~tag:"riscv" ~path:"src/riscv/assets/jstz" ()) + (Uses.make ~tag:"riscv" ~path:"src/riscv/assets/jstz.checksum" ()) in test_advances_state_with_inbox protocols @@ -6153,7 +6156,7 @@ let register_riscv_jstz ~protocols = ~title:"node advances PVM state with jstz kernel" ~boot_sector ~inbox_file: - (Uses.make ~tag:"riscv" ~path:"tezt/tests/riscv-tests/jstz-inbox.json") + (Uses.make ~tag:"riscv" ~path:"tezt/tests/riscv-tests/jstz-inbox.json" ()) let register ~kind ~protocols = test_origination ~kind protocols ;