// Copyright 2021 Parity Technologies (UK) Ltd. // This file is part of Polkadot. // Polkadot is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // Polkadot is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . //! Various things for testing other crates. //! //! N.B. This is not guarded with some feature flag. Overexposing items here may affect the final //! artifact even for production builds. pub mod worker_common { pub use crate::worker_common::{spawn_with_program_path, SpawnErr}; } /// A function that emulates the stitches together behaviors of the preparation and the execution /// worker in a single synchronous function. pub fn validate_candidate( code: &[u8], params: &[u8], ) -> Result, Box> { use crate::executor_intf::{prevalidate, prepare, execute, TaskExecutor}; let blob = prevalidate(code)?; let artifact = prepare(blob)?; let executor = TaskExecutor::new()?; let result = execute(&artifact, params, executor)?; Ok(result) } /// Use this macro to declare a `fn main() {}` that will check the arguments and dispatch them to /// the appropriate worker, making the executable that can be used for spawning workers. #[macro_export] macro_rules! decl_puppet_worker_main { () => { fn main() { let args = std::env::args().collect::>(); if args.len() < 2 { panic!("wrong number of arguments"); } let subcommand = &args[1]; match subcommand.as_ref() { "sleep" => { std::thread::sleep(std::time::Duration::from_secs(5)); } "prepare-worker" => { let socket_path = &args[2]; $crate::prepare_worker_entrypoint(socket_path); } "execute-worker" => { let socket_path = &args[2]; $crate::execute_worker_entrypoint(socket_path); } other => panic!("unknown subcommand: {}", other), } } }; }