diff --git a/programs/bpf/Cargo.lock b/programs/bpf/Cargo.lock index 1e5f8b88ed..3b1120c892 100644 --- a/programs/bpf/Cargo.lock +++ b/programs/bpf/Cargo.lock @@ -1227,6 +1227,7 @@ version = "0.19.0-pre0" dependencies = [ "solana-bpf-rust-128bit-dep 0.19.0-pre0", "solana-sdk 0.19.0-pre0", + "solana-sdk-bpf-test 0.19.0-pre0", ] [[package]] @@ -1234,6 +1235,7 @@ name = "solana-bpf-rust-128bit-dep" version = "0.19.0-pre0" dependencies = [ "solana-sdk 0.19.0-pre0", + "solana-sdk-bpf-test 0.19.0-pre0", ] [[package]] @@ -1241,6 +1243,7 @@ name = "solana-bpf-rust-alloc" version = "0.19.0-pre0" dependencies = [ "solana-sdk 0.19.0-pre0", + "solana-sdk-bpf-test 0.19.0-pre0", ] [[package]] @@ -1249,6 +1252,7 @@ version = "0.19.0-pre0" dependencies = [ "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "solana-sdk 0.19.0-pre0", + "solana-sdk-bpf-test 0.19.0-pre0", ] [[package]] @@ -1256,6 +1260,7 @@ name = "solana-bpf-rust-external-spend" version = "0.19.0-pre0" dependencies = [ "solana-sdk 0.19.0-pre0", + "solana-sdk-bpf-test 0.19.0-pre0", ] [[package]] @@ -1263,6 +1268,7 @@ name = "solana-bpf-rust-iter" version = "0.19.0-pre0" dependencies = [ "solana-sdk 0.19.0-pre0", + "solana-sdk-bpf-test 0.19.0-pre0", ] [[package]] @@ -1271,6 +1277,7 @@ version = "0.19.0-pre0" dependencies = [ "solana-bpf-rust-many-args-dep 0.19.0-pre0", "solana-sdk 0.19.0-pre0", + "solana-sdk-bpf-test 0.19.0-pre0", ] [[package]] @@ -1278,6 +1285,7 @@ name = "solana-bpf-rust-many-args-dep" version = "0.19.0-pre0" dependencies = [ "solana-sdk 0.19.0-pre0", + "solana-sdk-bpf-test 0.19.0-pre0", ] [[package]] @@ -1285,6 +1293,7 @@ name = "solana-bpf-rust-noop" version = "0.19.0-pre0" dependencies = [ "solana-sdk 0.19.0-pre0", + "solana-sdk-bpf-test 0.19.0-pre0", ] [[package]] @@ -1292,6 +1301,7 @@ name = "solana-bpf-rust-panic" version = "0.19.0-pre0" dependencies = [ "solana-sdk 0.19.0-pre0", + "solana-sdk-bpf-test 0.19.0-pre0", ] [[package]] @@ -1300,6 +1310,7 @@ version = "0.19.0-pre0" dependencies = [ "solana-bpf-rust-param-passing-dep 0.19.0-pre0", "solana-sdk 0.19.0-pre0", + "solana-sdk-bpf-test 0.19.0-pre0", ] [[package]] @@ -1307,6 +1318,7 @@ name = "solana-bpf-rust-param-passing-dep" version = "0.19.0-pre0" dependencies = [ "solana-sdk 0.19.0-pre0", + "solana-sdk-bpf-test 0.19.0-pre0", ] [[package]] @@ -1314,6 +1326,7 @@ name = "solana-bpf-rust-sysval" version = "0.19.0-pre0" dependencies = [ "solana-sdk 0.19.0-pre0", + "solana-sdk-bpf-test 0.19.0-pre0", ] [[package]] @@ -1460,6 +1473,10 @@ dependencies = [ "untrusted 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "solana-sdk-bpf-test" +version = "0.19.0-pre0" + [[package]] name = "solana-stake-api" version = "0.19.0-pre0" diff --git a/programs/bpf/build.rs b/programs/bpf/build.rs index b257ff17b5..440e2a45da 100644 --- a/programs/bpf/build.rs +++ b/programs/bpf/build.rs @@ -39,9 +39,8 @@ fn rerun_if_changed(files: &[&str], directories: &[&str], excludes: &[&str]) { fn main() { let bpf_c = !env::var("CARGO_FEATURE_BPF_C").is_err(); if bpf_c { - let install_dir = "OUT_DIR=../target/".to_string() - + &env::var("PROFILE").unwrap() - + &"/bpf".to_string(); + let install_dir = + "OUT_DIR=../target/".to_string() + &env::var("PROFILE").unwrap() + &"/bpf".to_string(); println!("cargo:warning=(not a warning) Building C-based BPF programs"); assert!(Command::new("make") diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index 00b8b79680..f7f966f8a4 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -15,6 +15,9 @@ edition = "2018" solana-sdk = { path = "../../../../sdk/", version = "0.19.0-pre0", default-features = false } solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "0.19.0-pre0" } +[dev_dependencies] +solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "0.19.0-pre0" } + [features] program = ["solana-sdk/program"] default = ["program"] diff --git a/programs/bpf/rust/128bit/src/lib.rs b/programs/bpf/rust/128bit/src/lib.rs index f4792bbdbb..4f380af222 100644 --- a/programs/bpf/rust/128bit/src/lib.rs +++ b/programs/bpf/rust/128bit/src/lib.rs @@ -49,3 +49,15 @@ pub extern "C" fn entrypoint(_input: *mut u8) -> u32 { SUCCESS } + +#[cfg(test)] +mod test { + use super::*; + // Pulls in the stubs requried for `info!()` + solana_sdk_bpf_test::stubs!(); + + #[test] + fn test_entrypoint() { + assert_eq!(SUCCESS, entrypoint(std::ptr::null_mut())); + } +} diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index 91513a511c..d55f62f620 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -14,6 +14,9 @@ edition = "2018" [dependencies] solana-sdk = { path = "../../../../sdk/", version = "0.19.0-pre0", default-features = false } +[dev_dependencies] +solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "0.19.0-pre0" } + [features] program = ["solana-sdk/program"] default = ["program"] diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index 7852dc59d2..1f9a1b143f 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -14,6 +14,9 @@ edition = "2018" [dependencies] solana-sdk = { path = "../../../../sdk/", version = "0.19.0-pre0", default-features = false } +[dev_dependencies] +solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "0.19.0-pre0" } + [features] program = ["solana-sdk/program"] default = ["program"] diff --git a/programs/bpf/rust/alloc/src/lib.rs b/programs/bpf/rust/alloc/src/lib.rs index 58afa6e6f3..8a823c9f97 100644 --- a/programs/bpf/rust/alloc/src/lib.rs +++ b/programs/bpf/rust/alloc/src/lib.rs @@ -102,3 +102,15 @@ pub extern "C" fn entrypoint(_input: *mut u8) -> u32 { SUCCESS } + +#[cfg(test)] +mod test { + use super::*; + // Pulls in the stubs requried for `info!()` + solana_sdk_bpf_test::stubs!(); + + #[test] + fn test_entrypoint() { + assert_eq!(SUCCESS, entrypoint(std::ptr::null_mut())); + } +} diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index 1f3db01bb2..df31f5204d 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -15,6 +15,9 @@ edition = "2018" byteorder = { version = "1", default-features = false } solana-sdk = { path = "../../../../sdk/", version = "0.19.0-pre0", default-features = false } +[dev_dependencies] +solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "0.19.0-pre0" } + [features] program = ["solana-sdk/program"] default = ["program"] diff --git a/programs/bpf/rust/dep_crate/src/lib.rs b/programs/bpf/rust/dep_crate/src/lib.rs index 2c903c3bd7..101accf7da 100644 --- a/programs/bpf/rust/dep_crate/src/lib.rs +++ b/programs/bpf/rust/dep_crate/src/lib.rs @@ -16,3 +16,15 @@ pub extern "C" fn entrypoint(_input: *mut u8) -> u32 { SUCCESS } + +#[cfg(test)] +mod test { + use super::*; + // Pulls in the stubs requried for `info!()` + solana_sdk_bpf_test::stubs!(); + + #[test] + fn test_entrypoint() { + assert_eq!(SUCCESS, entrypoint(std::ptr::null_mut())); + } +} diff --git a/programs/bpf/rust/do.sh b/programs/bpf/rust/do.sh index cef601362a..440c715f93 100755 --- a/programs/bpf/rust/do.sh +++ b/programs/bpf/rust/do.sh @@ -28,17 +28,17 @@ perform_action() { set -e case "$1" in build) - "$sdkDir"/bpf/rust/build.sh "$2" + "$sdkDir"/bpf/rust/build.sh "$2" - so_path="$targetDir/$profile/" - so_name="solana_bpf_rust_${3%/}" - if [ -f "$so_path/${so_name}.so" ]; then - cp "$so_path/${so_name}.so" "$so_path/${so_name}_debug.so" - "$sdkDir"/bpf/dependencies/llvm-native/bin/llvm-objcopy --strip-all "$so_path/${so_name}.so" "$so_path/$so_name.so" + so_path="$targetDir/$profile/" + so_name="solana_bpf_rust_${3%/}" + if [ -f "$so_path/${so_name}.so" ]; then + cp "$so_path/${so_name}.so" "$so_path/${so_name}_debug.so" + "$sdkDir"/bpf/dependencies/llvm-native/bin/llvm-objcopy --strip-all "$so_path/${so_name}.so" "$so_path/$so_name.so" fi ;; clean) - "$sdkDir"/bpf/rust/clean.sh "$2" + "$sdkDir"/bpf/rust/clean.sh "$2" ;; test) ( @@ -77,17 +77,17 @@ perform_action() { ls \ -la \ "$so" \ - > "${dump}-mangled.txt" + >"${dump}-mangled.txt" greadelf \ -aW \ "$so" \ - >> "${dump}-mangled.txt" + >>"${dump}-mangled.txt" ../"$sdkDir"/bpf/dependencies/llvm-native/bin/llvm-objdump \ -print-imm-hex \ --source \ --disassemble \ "$so" \ - >> "${dump}-mangled.txt" + >>"${dump}-mangled.txt" sed \ s/://g \ < "${dump}-mangled.txt" \ @@ -114,7 +114,7 @@ set -e if [ "$#" -ne 2 ]; then # Build all projects - for project in */ ; do + for project in */; do perform_action "$1" "$PWD/$project" "$project" done else diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index 0ed30bbf30..c6bb73aa50 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -14,6 +14,9 @@ edition = "2018" [dependencies] solana-sdk = { path = "../../../../sdk/", version = "0.19.0-pre0", default-features = false } +[dev_dependencies] +solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "0.19.0-pre0" } + [features] program = ["solana-sdk/program"] default = ["program"] diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index 894e7dc90e..37cafc405a 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -14,6 +14,9 @@ edition = "2018" [dependencies] solana-sdk = { path = "../../../../sdk/", version = "0.19.0-pre0", default-features = false } +[dev_dependencies] +solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "0.19.0-pre0" } + [features] program = ["solana-sdk/program"] default = ["program"] diff --git a/programs/bpf/rust/iter/src/lib.rs b/programs/bpf/rust/iter/src/lib.rs index 87cc22aa96..94f9ae835a 100644 --- a/programs/bpf/rust/iter/src/lib.rs +++ b/programs/bpf/rust/iter/src/lib.rs @@ -18,3 +18,15 @@ pub extern "C" fn entrypoint(_input: *mut u8) -> u32 { SUCCESS } + +#[cfg(test)] +mod test { + use super::*; + // Pulls in the stubs requried for `info!()` + solana_sdk_bpf_test::stubs!(); + + #[test] + fn test_entrypoint() { + assert_eq!(SUCCESS, entrypoint(std::ptr::null_mut())); + } +} diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index ade1662972..07a3e9ea29 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -15,6 +15,9 @@ edition = "2018" solana-sdk = { path = "../../../../sdk/", version = "0.19.0-pre0", default-features = false } solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "0.19.0-pre0" } +[dev_dependencies] +solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "0.19.0-pre0" } + [features] program = ["solana-sdk/program"] default = ["program"] diff --git a/programs/bpf/rust/many_args/src/lib.rs b/programs/bpf/rust/many_args/src/lib.rs index 9b5ec2e1f4..51322bc3d7 100644 --- a/programs/bpf/rust/many_args/src/lib.rs +++ b/programs/bpf/rust/many_args/src/lib.rs @@ -26,3 +26,15 @@ pub extern "C" fn entrypoint(_input: *mut u8) -> u32 { SUCCESS } + +#[cfg(test)] +mod test { + use super::*; + // Pulls in the stubs requried for `info!()` + solana_sdk_bpf_test::stubs!(); + + #[test] + fn test_entrypoint() { + assert_eq!(SUCCESS, entrypoint(std::ptr::null_mut())); + } +} diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index 6d4ba5ed13..f797c104d4 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -14,6 +14,9 @@ edition = "2018" [dependencies] solana-sdk = { path = "../../../../sdk/", version = "0.19.0-pre0", default-features = false } +[dev_dependencies] +solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "0.19.0-pre0" } + [features] program = ["solana-sdk/program"] default = ["program"] diff --git a/programs/bpf/rust/many_args_dep/src/lib.rs b/programs/bpf/rust/many_args_dep/src/lib.rs index 5ce425ccab..199584b4fc 100644 --- a/programs/bpf/rust/many_args_dep/src/lib.rs +++ b/programs/bpf/rust/many_args_dep/src/lib.rs @@ -50,8 +50,9 @@ pub fn many_args_sret( #[cfg(test)] mod test { - extern crate std; use super::*; + // Pulls in the stubs requried for `info!()` + solana_sdk_bpf_test::stubs!(); #[test] fn test_many_args() { diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index 1ed31ef7f3..d19c2fb470 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -14,6 +14,9 @@ edition = "2018" [dependencies] solana-sdk = { path = "../../../../sdk/", version = "0.19.0-pre0", default-features = false } +[dev_dependencies] +solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "0.19.0-pre0" } + [features] program = ["solana-sdk/program"] default = ["program"] diff --git a/programs/bpf/rust/noop/src/lib.rs b/programs/bpf/rust/noop/src/lib.rs index d1ed6eca61..c4c455bc47 100644 --- a/programs/bpf/rust/noop/src/lib.rs +++ b/programs/bpf/rust/noop/src/lib.rs @@ -60,6 +60,8 @@ fn process_instruction(program_id: &Pubkey, accounts: &mut [AccountInfo], data: #[cfg(test)] mod test { use super::*; + // Pulls in the stubs requried for `info!()` + solana_sdk_bpf_test::stubs!(); #[test] fn test_return_sstruct() { diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index d317c62035..ef304bc774 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -14,6 +14,9 @@ edition = "2018" [dependencies] solana-sdk = { path = "../../../../sdk/", version = "0.19.0-pre0", default-features = false } +[dev_dependencies] +solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "0.19.0-pre0" } + [features] program = ["solana-sdk/program"] default = ["program"] diff --git a/programs/bpf/rust/param_passing/Cargo.toml b/programs/bpf/rust/param_passing/Cargo.toml index 08dd4f4e29..68ceb11945 100644 --- a/programs/bpf/rust/param_passing/Cargo.toml +++ b/programs/bpf/rust/param_passing/Cargo.toml @@ -15,6 +15,9 @@ edition = "2018" solana-sdk = { path = "../../../../sdk/", version = "0.19.0-pre0", default-features = false } solana-bpf-rust-param-passing-dep = { path = "../param_passing_dep", version = "0.19.0-pre0" } +[dev_dependencies] +solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "0.19.0-pre0" } + [features] program = ["solana-sdk/program"] default = ["program"] diff --git a/programs/bpf/rust/param_passing/src/lib.rs b/programs/bpf/rust/param_passing/src/lib.rs index 750b32237c..5e550d1aa3 100644 --- a/programs/bpf/rust/param_passing/src/lib.rs +++ b/programs/bpf/rust/param_passing/src/lib.rs @@ -23,3 +23,15 @@ pub extern "C" fn entrypoint(_input: *mut u8) -> u32 { SUCCESS } + +#[cfg(test)] +mod test { + use super::*; + // Pulls in the stubs requried for `info!()` + solana_sdk_bpf_test::stubs!(); + + #[test] + fn test_entrypoint() { + assert_eq!(SUCCESS, entrypoint(std::ptr::null_mut())); + } +} diff --git a/programs/bpf/rust/param_passing_dep/Cargo.toml b/programs/bpf/rust/param_passing_dep/Cargo.toml index 8d0cbdb5dc..6d0f53a22d 100644 --- a/programs/bpf/rust/param_passing_dep/Cargo.toml +++ b/programs/bpf/rust/param_passing_dep/Cargo.toml @@ -14,6 +14,9 @@ edition = "2018" [dependencies] solana-sdk = { path = "../../../../sdk/", version = "0.19.0-pre0", default-features = false } +[dev_dependencies] +solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "0.19.0-pre0" } + [features] program = ["solana-sdk/program"] default = ["program"] diff --git a/programs/bpf/rust/param_passing_dep/src/lib.rs b/programs/bpf/rust/param_passing_dep/src/lib.rs index 08f177cbb2..14665a9f6c 100644 --- a/programs/bpf/rust/param_passing_dep/src/lib.rs +++ b/programs/bpf/rust/param_passing_dep/src/lib.rs @@ -2,6 +2,7 @@ extern crate solana_sdk; +#[derive(Debug)] pub struct Data<'a> { pub twentyone: u64, pub twentytwo: u64, @@ -11,6 +12,7 @@ pub struct Data<'a> { pub array: &'a [u8], } +#[derive(PartialEq, Debug)] pub struct TestDep { pub thirty: u32, } @@ -21,3 +23,24 @@ impl<'a> TestDep { } } } + +#[cfg(test)] +mod test { + use super::*; + // Pulls in the stubs requried for `info!()` + solana_sdk_bpf_test::stubs!(); + + #[test] + fn test_dep() { + let array = [0xA, 0xB, 0xC, 0xD, 0xE, 0xF]; + let data = Data { + twentyone: 21u64, + twentytwo: 22u64, + twentythree: 23u64, + twentyfour: 24u64, + twentyfive: 25u32, + array: &array, + }; + assert_eq!(TestDep { thirty: 30 }, TestDep::new(&data, 1, 2, 3, 4, 5)); + } +} diff --git a/programs/bpf/rust/sysval/Cargo.toml b/programs/bpf/rust/sysval/Cargo.toml index 2590033737..fefee86292 100644 --- a/programs/bpf/rust/sysval/Cargo.toml +++ b/programs/bpf/rust/sysval/Cargo.toml @@ -14,6 +14,9 @@ edition = "2018" [dependencies] solana-sdk = { path = "../../../../sdk/", version = "0.19.0-pre0", default-features = false } +[dev_dependencies] +solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/test", version = "0.19.0-pre0" } + [features] program = ["solana-sdk/program"] default = ["program"] diff --git a/programs/bpf/tests/programs.rs b/programs/bpf/tests/programs.rs index b179bc73f6..7ac88f0135 100644 --- a/programs/bpf/tests/programs.rs +++ b/programs/bpf/tests/programs.rs @@ -83,7 +83,7 @@ mod bpf { use solana_sdk::instruction::{AccountMeta, Instruction}; use solana_sdk::pubkey::Pubkey; use solana_sdk::signature::{Keypair, KeypairUtil}; - use solana_sdk::sysvar::{clock, fees, rewards, slot_hashes, stake_history, rent}; + use solana_sdk::sysvar::{clock, fees, rent, rewards, slot_hashes, stake_history}; use std::io::Read; use std::sync::Arc; @@ -132,7 +132,7 @@ mod bpf { AccountMeta::new(rewards::id(), false), AccountMeta::new(slot_hashes::id(), false), AccountMeta::new(stake_history::id(), false), - AccountMeta::new(rent::id(), false) + AccountMeta::new(rent::id(), false), ]; let instruction = Instruction::new(program_id, &1u8, account_metas); let result = bank_client.send_instruction(&mint_keypair, instruction); diff --git a/sdk/bpf/rust/test/.gitignore b/sdk/bpf/rust/test/.gitignore new file mode 100644 index 0000000000..e1e121d124 --- /dev/null +++ b/sdk/bpf/rust/test/.gitignore @@ -0,0 +1,3 @@ +/target/ +/farf/ +Cargo.lock diff --git a/sdk/bpf/rust/test/Cargo.toml b/sdk/bpf/rust/test/Cargo.toml new file mode 100644 index 0000000000..c05fa02b4d --- /dev/null +++ b/sdk/bpf/rust/test/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "solana-sdk-bpf-test" +version = "0.19.0-pre0" +description = "Solana BPF SDK test utilities" +authors = ["Solana Maintainers "] +repository = "https://github.com/solana-labs/solana" +license = "Apache-2.0" +homepage = "https://solana.com/" +edition = "2018" + +[workspace] +members = [] diff --git a/sdk/src/program_test.rs b/sdk/bpf/rust/test/src/lib.rs similarity index 65% rename from sdk/src/program_test.rs rename to sdk/bpf/rust/test/src/lib.rs index ac68cd1eda..bbe0e76f91 100644 --- a/sdk/src/program_test.rs +++ b/sdk/bpf/rust/test/src/lib.rs @@ -11,3 +11,15 @@ pub unsafe fn sol_log_(message: *const u8, length: u64) { pub fn sol_log_64_(arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u64) { std::println!("{} {} {} {} {}", arg1, arg2, arg3, arg4, arg5); } + +#[macro_export] +macro_rules! stubs { + () => { + #[test] + fn pull_in_externs() { + use $crate::*; + unsafe { sol_log_("sol_log_".as_ptr(), 8) }; + sol_log_64_(1, 2, 3, 4, 5); + } + }; +} diff --git a/sdk/src/lib.rs b/sdk/src/lib.rs index 63c133edf1..70877e44b5 100644 --- a/sdk/src/lib.rs +++ b/sdk/src/lib.rs @@ -25,7 +25,6 @@ pub mod timing; pub mod account_info; pub mod entrypoint; pub mod log; -pub mod program_test; // Modules not usable by on-chain programs #[cfg(not(feature = "program"))] diff --git a/sdk/src/log.rs b/sdk/src/log.rs index c72371d291..1da0d7b3b3 100644 --- a/sdk/src/log.rs +++ b/sdk/src/log.rs @@ -27,26 +27,35 @@ macro_rules! info { /// Prints a string to stdout /// /// @param message - Message to print +#[cfg(feature = "program")] pub fn sol_log(message: &str) { unsafe { sol_log_(message.as_ptr(), message.len() as u64); } } +#[cfg(feature = "program")] extern "C" { fn sol_log_(message: *const u8, length: u64); } +#[cfg(not(feature = "program"))] +pub fn sol_log(_message: &str) {} /// Prints 64 bit values represented as hexadecimal to stdout /// /// @param argx - integer arguments to print + +#[cfg(feature = "program")] pub fn sol_log_64(arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u64) { unsafe { sol_log_64_(arg1, arg2, arg3, arg4, arg5); } } +#[cfg(feature = "program")] extern "C" { fn sol_log_64_(arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u64); } +#[cfg(not(feature = "program"))] +pub fn sol_log_64(_arg1: u64, _arg2: u64, _arg3: u64, _arg4: u64, _arg5: u64) {} /// Prints the hexadecimal representation of a slice /// @@ -65,7 +74,7 @@ pub fn sol_log_slice(slice: &[u8]) { #[allow(dead_code)] pub fn sol_log_params(accounts: &[AccountInfo], data: &[u8]) { for (i, account) in accounts.iter().enumerate() { - sol_log("SolKeyedAccount"); + sol_log("AccountInfo"); sol_log_64(0, 0, 0, 0, i as u64); sol_log("- Is signer"); sol_log_64(0, 0, 0, 0, account.is_signer as u64);