diff --git a/ci/test-checks.sh b/ci/test-checks.sh index b90499c1a7..013f178761 100755 --- a/ci/test-checks.sh +++ b/ci/test-checks.sh @@ -12,16 +12,25 @@ export RUSTFLAGS="-D warnings" do_bpf_check() { _ cargo +"$rust_stable" fmt --all -- --check + _ cargo +"$rust_nightly" test --all _ cargo +"$rust_nightly" clippy --all -- --version _ cargo +"$rust_nightly" clippy --all -- --deny=warnings _ cargo +"$rust_stable" audit } ( + ( + cd sdk/bpf/rust/rust-no-std + do_bpf_check + ) ( cd sdk/bpf/rust/rust-utils do_bpf_check ) + ( + cd sdk/bpf/rust/rust-test + do_bpf_check + ) for project in programs/bpf/rust/*/ ; do ( cd "$project" diff --git a/programs/bpf/rust/128bit/Cargo.toml b/programs/bpf/rust/128bit/Cargo.toml index 3a7559256f..4383816142 100644 --- a/programs/bpf/rust/128bit/Cargo.toml +++ b/programs/bpf/rust/128bit/Cargo.toml @@ -13,6 +13,7 @@ edition = "2018" [dependencies] solana-sdk-bpf-utils = { path = "../../../../sdk/bpf/rust/rust-utils", version = "0.17.0" } +solana-sdk-bpf-no-std = { path = "../../../../sdk/bpf/rust/rust-no-std", version = "0.17.0" } solana-bpf-rust-128bit-dep = { path = "../128bit_dep", version = "0.17.0" } [workspace] diff --git a/programs/bpf/rust/128bit/src/lib.rs b/programs/bpf/rust/128bit/src/lib.rs index d2946d8788..c7bfe1a0d2 100644 --- a/programs/bpf/rust/128bit/src/lib.rs +++ b/programs/bpf/rust/128bit/src/lib.rs @@ -3,6 +3,8 @@ #![no_std] #![allow(unused_attributes)] +#[cfg(not(test))] +extern crate solana_sdk_bpf_no_std; extern crate solana_sdk_bpf_utils; use solana_sdk_bpf_utils::info; diff --git a/programs/bpf/rust/128bit_dep/Cargo.toml b/programs/bpf/rust/128bit_dep/Cargo.toml index 0ac7f07665..bec03f9141 100644 --- a/programs/bpf/rust/128bit_dep/Cargo.toml +++ b/programs/bpf/rust/128bit_dep/Cargo.toml @@ -15,5 +15,4 @@ edition = "2018" solana-sdk-bpf-utils = { path = "../../../../sdk/bpf/rust/rust-utils", version = "0.17.0" } [workspace] -members = [] - +members = [] \ No newline at end of file diff --git a/programs/bpf/rust/128bit_dep/src/lib.rs b/programs/bpf/rust/128bit_dep/src/lib.rs index 62a1d969cb..2cedb7dada 100644 --- a/programs/bpf/rust/128bit_dep/src/lib.rs +++ b/programs/bpf/rust/128bit_dep/src/lib.rs @@ -7,3 +7,14 @@ extern crate solana_sdk_bpf_utils; pub fn work(x: u128, y: u128) -> u128 { x + y } + +#[cfg(test)] +mod test { + extern crate std; + use super::*; + + #[test] + fn test_work() { + assert_eq!(3, work(1, 2)); + } +} diff --git a/programs/bpf/rust/alloc/Cargo.toml b/programs/bpf/rust/alloc/Cargo.toml index 2b6cba011d..e33af74aaf 100644 --- a/programs/bpf/rust/alloc/Cargo.toml +++ b/programs/bpf/rust/alloc/Cargo.toml @@ -13,6 +13,7 @@ edition = "2018" [dependencies] solana-sdk-bpf-utils = { path = "../../../../sdk/bpf/rust/rust-utils", version = "0.17.0" } +solana-sdk-bpf-no-std = { path = "../../../../sdk/bpf/rust/rust-no-std", version = "0.17.0" } [workspace] members = [] diff --git a/programs/bpf/rust/alloc/src/lib.rs b/programs/bpf/rust/alloc/src/lib.rs index aadbd25b22..787c3b6156 100644 --- a/programs/bpf/rust/alloc/src/lib.rs +++ b/programs/bpf/rust/alloc/src/lib.rs @@ -4,6 +4,8 @@ #[macro_use] extern crate alloc; +#[cfg(not(test))] +extern crate solana_sdk_bpf_no_std; extern crate solana_sdk_bpf_utils; use alloc::vec::Vec; diff --git a/programs/bpf/rust/dep_crate/Cargo.toml b/programs/bpf/rust/dep_crate/Cargo.toml index b3541915c6..af1179d6b9 100644 --- a/programs/bpf/rust/dep_crate/Cargo.toml +++ b/programs/bpf/rust/dep_crate/Cargo.toml @@ -14,6 +14,7 @@ edition = "2018" [dependencies] byteorder = { version = "1", default-features = false } solana-sdk-bpf-utils = { path = "../../../../sdk/bpf/rust/rust-utils", version = "0.17.0" } +solana-sdk-bpf-no-std = { path = "../../../../sdk/bpf/rust/rust-no-std", version = "0.17.0" } [workspace] members = [] diff --git a/programs/bpf/rust/dep_crate/src/lib.rs b/programs/bpf/rust/dep_crate/src/lib.rs index 0c3b9bbdf9..8b9e92d134 100644 --- a/programs/bpf/rust/dep_crate/src/lib.rs +++ b/programs/bpf/rust/dep_crate/src/lib.rs @@ -3,6 +3,8 @@ #![no_std] #![allow(unused_attributes)] +#[cfg(not(test))] +extern crate solana_sdk_bpf_no_std; extern crate solana_sdk_bpf_utils; use byteorder::{ByteOrder, LittleEndian}; diff --git a/programs/bpf/rust/do.sh b/programs/bpf/rust/do.sh index e00778a6eb..c33dd290a7 100755 --- a/programs/bpf/rust/do.sh +++ b/programs/bpf/rust/do.sh @@ -12,6 +12,7 @@ usage() { echo " Supported actions:" echo " build" echo " clean" + echo " test" echo " clippy" echo " fmt" echo "" @@ -26,6 +27,13 @@ perform_action() { clean) ./../../../sdk/bpf/rust/clean.sh "$2" ;; + test) + ( + cd "$2" + echo "test $2" + cargo +nightly test + ) + ;; clippy) ( cd "$2" diff --git a/programs/bpf/rust/external_spend/Cargo.toml b/programs/bpf/rust/external_spend/Cargo.toml index 89e1ef9162..2d463611f4 100644 --- a/programs/bpf/rust/external_spend/Cargo.toml +++ b/programs/bpf/rust/external_spend/Cargo.toml @@ -13,6 +13,7 @@ edition = "2018" [dependencies] solana-sdk-bpf-utils = { path = "../../../../sdk/bpf/rust/rust-utils", version = "0.17.0" } +solana-sdk-bpf-no-std = { path = "../../../../sdk/bpf/rust/rust-no-std", version = "0.17.0" } [workspace] members = [] diff --git a/programs/bpf/rust/external_spend/src/lib.rs b/programs/bpf/rust/external_spend/src/lib.rs index 4b49498b99..1c3774762e 100644 --- a/programs/bpf/rust/external_spend/src/lib.rs +++ b/programs/bpf/rust/external_spend/src/lib.rs @@ -4,6 +4,8 @@ #![allow(unreachable_code)] #![allow(unused_attributes)] +#[cfg(not(test))] +extern crate solana_sdk_bpf_no_std; extern crate solana_sdk_bpf_utils; use solana_sdk_bpf_utils::entrypoint::*; diff --git a/programs/bpf/rust/iter/Cargo.toml b/programs/bpf/rust/iter/Cargo.toml index bb250fe1b0..5ea8d0c72a 100644 --- a/programs/bpf/rust/iter/Cargo.toml +++ b/programs/bpf/rust/iter/Cargo.toml @@ -13,6 +13,7 @@ edition = "2018" [dependencies] solana-sdk-bpf-utils = { path = "../../../../sdk/bpf/rust/rust-utils", version = "0.17.0" } +solana-sdk-bpf-no-std = { path = "../../../../sdk/bpf/rust/rust-no-std", version = "0.17.0" } [workspace] members = [] diff --git a/programs/bpf/rust/iter/src/lib.rs b/programs/bpf/rust/iter/src/lib.rs index f610b69029..3dee0fe8de 100644 --- a/programs/bpf/rust/iter/src/lib.rs +++ b/programs/bpf/rust/iter/src/lib.rs @@ -3,6 +3,8 @@ #![no_std] #![allow(unused_attributes)] +#[cfg(not(test))] +extern crate solana_sdk_bpf_no_std; extern crate solana_sdk_bpf_utils; use solana_sdk_bpf_utils::info; diff --git a/programs/bpf/rust/many_args/Cargo.toml b/programs/bpf/rust/many_args/Cargo.toml index 732811c6c2..0707413d3b 100644 --- a/programs/bpf/rust/many_args/Cargo.toml +++ b/programs/bpf/rust/many_args/Cargo.toml @@ -13,6 +13,7 @@ edition = "2018" [dependencies] solana-sdk-bpf-utils = { path = "../../../../sdk/bpf/rust/rust-utils", version = "0.17.0" } +solana-sdk-bpf-no-std = { path = "../../../../sdk/bpf/rust/rust-no-std", version = "0.17.0" } solana-bpf-rust-many-args-dep = { path = "../many_args_dep", version = "0.17.0" } [workspace] diff --git a/programs/bpf/rust/many_args/src/lib.rs b/programs/bpf/rust/many_args/src/lib.rs index 43417da641..c9feeaac38 100644 --- a/programs/bpf/rust/many_args/src/lib.rs +++ b/programs/bpf/rust/many_args/src/lib.rs @@ -5,6 +5,8 @@ mod helper; +#[cfg(not(test))] +extern crate solana_sdk_bpf_no_std; extern crate solana_sdk_bpf_utils; use solana_sdk_bpf_utils::info; diff --git a/programs/bpf/rust/many_args_dep/Cargo.toml b/programs/bpf/rust/many_args_dep/Cargo.toml index a0df0cefa1..e0c58e63bb 100644 --- a/programs/bpf/rust/many_args_dep/Cargo.toml +++ b/programs/bpf/rust/many_args_dep/Cargo.toml @@ -14,6 +14,8 @@ edition = "2018" [dependencies] solana-sdk-bpf-utils = { path = "../../../../sdk/bpf/rust/rust-utils", version = "0.17.0" } -[workspace] -members = [] +[dev_dependencies] +solana-sdk-bpf-test = { path = "../../../../sdk/bpf/rust/rust-test", version = "0.17.0" } +[workspace] +members = [] \ No newline at end of file diff --git a/programs/bpf/rust/many_args_dep/src/lib.rs b/programs/bpf/rust/many_args_dep/src/lib.rs index c89891a92f..4cfbd25964 100644 --- a/programs/bpf/rust/many_args_dep/src/lib.rs +++ b/programs/bpf/rust/many_args_dep/src/lib.rs @@ -22,3 +22,27 @@ pub fn many_args( info!(arg6, arg7, arg8, arg9, 0); arg1 + arg2 + arg3 + arg4 + arg5 + arg6 + arg7 + arg8 + arg9 } + +#[cfg(test)] +mod test { + extern crate solana_sdk_bpf_test; + extern crate std; + use super::*; + + #[no_mangle] + pub unsafe fn sol_log_(message: *const u8, length: u64) { + let slice = std::slice::from_raw_parts(message, length as usize); + let string = std::str::from_utf8(&slice).unwrap(); + std::println!("{}", string); + } + + #[no_mangle] + pub fn sol_log_64_(arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u64) { + std::println!("{} {} {} {} {}", arg1, arg2, arg3, arg4, arg5); + } + + #[test] + fn test_many_args() { + assert_eq!(45, many_args(1, 2, 3, 4, 5, 6, 7, 8, 9)); + } +} diff --git a/programs/bpf/rust/noop/Cargo.toml b/programs/bpf/rust/noop/Cargo.toml index 4df4ee3f7e..8c0ab80e2e 100644 --- a/programs/bpf/rust/noop/Cargo.toml +++ b/programs/bpf/rust/noop/Cargo.toml @@ -13,6 +13,7 @@ edition = "2018" [dependencies] solana-sdk-bpf-utils = { path = "../../../../sdk/bpf/rust/rust-utils", version = "0.17.0" } +solana-sdk-bpf-no-std = { path = "../../../../sdk/bpf/rust/rust-no-std", version = "0.17.0" } [workspace] members = [] diff --git a/programs/bpf/rust/noop/src/lib.rs b/programs/bpf/rust/noop/src/lib.rs index edcfb140d3..90d7c9abfd 100644 --- a/programs/bpf/rust/noop/src/lib.rs +++ b/programs/bpf/rust/noop/src/lib.rs @@ -4,12 +4,15 @@ #![allow(unreachable_code)] #![allow(unused_attributes)] +#[cfg(not(test))] +extern crate solana_sdk_bpf_no_std; extern crate solana_sdk_bpf_utils; use solana_sdk_bpf_utils::entrypoint::*; use solana_sdk_bpf_utils::log::*; use solana_sdk_bpf_utils::{entrypoint, info}; +#[derive(Debug, PartialEq)] struct SStruct { x: u64, y: u64, @@ -59,3 +62,13 @@ fn process_instruction(ka: &mut [SolKeyedAccount], info: &SolClusterInfo, data: info!("Success"); true } + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn test_return_sstruct() { + assert_eq!(SStruct { x: 1, y: 2, z: 3 }, return_sstruct()); + } +} diff --git a/programs/bpf/rust/panic/Cargo.toml b/programs/bpf/rust/panic/Cargo.toml index e4fa99b4cc..ee5696d697 100644 --- a/programs/bpf/rust/panic/Cargo.toml +++ b/programs/bpf/rust/panic/Cargo.toml @@ -13,6 +13,7 @@ edition = "2018" [dependencies] solana-sdk-bpf-utils = { path = "../../../../sdk/bpf/rust/rust-utils", version = "0.17.0" } +solana-sdk-bpf-no-std = { path = "../../../../sdk/bpf/rust/rust-no-std", version = "0.17.0" } [workspace] members = [] diff --git a/programs/bpf/rust/panic/src/lib.rs b/programs/bpf/rust/panic/src/lib.rs index 7e76346fe3..2a7d5224f7 100644 --- a/programs/bpf/rust/panic/src/lib.rs +++ b/programs/bpf/rust/panic/src/lib.rs @@ -3,6 +3,8 @@ #![no_std] #![allow(unused_attributes)] +#[cfg(not(test))] +extern crate solana_sdk_bpf_no_std; extern crate solana_sdk_bpf_utils; #[no_mangle] diff --git a/programs/bpf/rust/tick_height/Cargo.toml b/programs/bpf/rust/tick_height/Cargo.toml index ab7f6d0e24..9cfbe7b7b4 100644 --- a/programs/bpf/rust/tick_height/Cargo.toml +++ b/programs/bpf/rust/tick_height/Cargo.toml @@ -13,8 +13,8 @@ edition = "2018" [dependencies] byteorder = { version = "1", default-features = false } - solana-sdk-bpf-utils = { path = "../../../../sdk/bpf/rust/rust-utils", version = "0.17.0" } +solana-sdk-bpf-no-std = { path = "../../../../sdk/bpf/rust/rust-no-std", version = "0.17.0" } [workspace] members = [] diff --git a/programs/bpf/rust/tick_height/src/lib.rs b/programs/bpf/rust/tick_height/src/lib.rs index 220058ba73..2527026d46 100644 --- a/programs/bpf/rust/tick_height/src/lib.rs +++ b/programs/bpf/rust/tick_height/src/lib.rs @@ -3,6 +3,8 @@ #![no_std] #![allow(unreachable_code)] +#[cfg(not(test))] +extern crate solana_sdk_bpf_no_std; extern crate solana_sdk_bpf_utils; use byteorder::{ByteOrder, LittleEndian}; diff --git a/sdk/bpf/rust/rust-no-std/.gitignore b/sdk/bpf/rust/rust-no-std/.gitignore new file mode 100644 index 0000000000..e13de17f65 --- /dev/null +++ b/sdk/bpf/rust/rust-no-std/.gitignore @@ -0,0 +1,3 @@ +/target/ + +Cargo.lock diff --git a/sdk/bpf/rust/rust-no-std/Cargo.toml b/sdk/bpf/rust/rust-no-std/Cargo.toml new file mode 100644 index 0000000000..c8a45cf6bb --- /dev/null +++ b/sdk/bpf/rust/rust-no-std/Cargo.toml @@ -0,0 +1,16 @@ + +[package] +name = "solana-sdk-bpf-no-std" +version = "0.17.0" +description = "Solana BPF SDK Rust no_std support" +authors = ["Solana Maintainers "] +repository = "https://github.com/solana-labs/solana" +license = "Apache-2.0" +homepage = "https://solana.com/" +edition = "2018" + +[dependencies] +solana-sdk-bpf-utils = { path = "../rust-utils" } + +[workspace] +members = [] diff --git a/sdk/bpf/rust/rust-utils/src/allocator.rs b/sdk/bpf/rust/rust-no-std/src/allocator.rs similarity index 94% rename from sdk/bpf/rust/rust-utils/src/allocator.rs rename to sdk/bpf/rust/rust-no-std/src/allocator.rs index fe0b1f1460..02311f76e3 100644 --- a/sdk/bpf/rust/rust-utils/src/allocator.rs +++ b/sdk/bpf/rust/rust-no-std/src/allocator.rs @@ -1,7 +1,7 @@ //! @brief Solana Rust-based BPF program memory allocator shim -use crate::log::*; use core::alloc::{GlobalAlloc, Layout}; +use solana_sdk_bpf_utils::log::*; pub struct Allocator; unsafe impl GlobalAlloc for Allocator { diff --git a/sdk/bpf/rust/rust-no-std/src/lib.rs b/sdk/bpf/rust/rust-no-std/src/lib.rs new file mode 100644 index 0000000000..3f774738e4 --- /dev/null +++ b/sdk/bpf/rust/rust-no-std/src/lib.rs @@ -0,0 +1,20 @@ +//! @brief Solana Rust-based BPF program utility functions and types + +#![no_std] +#![feature(allocator_api)] +#![feature(alloc_error_handler)] +#![feature(panic_info_message)] +#![feature(compiler_builtins_lib)] +#![feature(lang_items)] +#![cfg(not(test))] + +#[lang = "eh_personality"] +extern "C" fn eh_personality() {} + +extern crate compiler_builtins; + +pub mod allocator; +pub mod panic; + +#[global_allocator] +static A: allocator::Allocator = allocator::Allocator; diff --git a/sdk/bpf/rust/rust-utils/src/panic.rs b/sdk/bpf/rust/rust-no-std/src/panic.rs similarity index 98% rename from sdk/bpf/rust/rust-utils/src/panic.rs rename to sdk/bpf/rust/rust-no-std/src/panic.rs index 85a318a995..aa2ec3b46c 100644 --- a/sdk/bpf/rust/rust-utils/src/panic.rs +++ b/sdk/bpf/rust/rust-no-std/src/panic.rs @@ -3,7 +3,6 @@ use core::panic::PanicInfo; use core::ptr; -#[cfg(not(test))] #[panic_handler] fn panic(info: &PanicInfo) -> ! { // Message is ignored for now to avoid incurring formatting program size overhead diff --git a/sdk/bpf/rust/rust-test/.gitignore b/sdk/bpf/rust/rust-test/.gitignore new file mode 100644 index 0000000000..e13de17f65 --- /dev/null +++ b/sdk/bpf/rust/rust-test/.gitignore @@ -0,0 +1,3 @@ +/target/ + +Cargo.lock diff --git a/sdk/bpf/rust/rust-test/Cargo.toml b/sdk/bpf/rust/rust-test/Cargo.toml new file mode 100644 index 0000000000..5bdfff81b8 --- /dev/null +++ b/sdk/bpf/rust/rust-test/Cargo.toml @@ -0,0 +1,13 @@ + +[package] +name = "solana-sdk-bpf-test" +version = "0.17.0" +description = "Solana BPF SDK Rust Cargo test utilities" +authors = ["Solana Maintainers "] +repository = "https://github.com/solana-labs/solana" +license = "Apache-2.0" +homepage = "https://solana.com/" +edition = "2018" + +[workspace] +members = [] \ No newline at end of file diff --git a/sdk/bpf/rust/rust-test/src/lib.rs b/sdk/bpf/rust/rust-test/src/lib.rs new file mode 100644 index 0000000000..ac68cd1eda --- /dev/null +++ b/sdk/bpf/rust/rust-test/src/lib.rs @@ -0,0 +1,13 @@ +//! @brief Solana Rust-based BPF program utility functions and types + +#[no_mangle] +pub unsafe fn sol_log_(message: *const u8, length: u64) { + let slice = std::slice::from_raw_parts(message, length as usize); + let string = std::str::from_utf8(&slice).unwrap(); + std::println!("{}", string); +} + +#[no_mangle] +pub fn sol_log_64_(arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u64) { + std::println!("{} {} {} {} {}", arg1, arg2, arg3, arg4, arg5); +} diff --git a/sdk/bpf/rust/rust-utils/src/entrypoint.rs b/sdk/bpf/rust/rust-utils/src/entrypoint.rs index 3ae78de769..8e866e1dd5 100644 --- a/sdk/bpf/rust/rust-utils/src/entrypoint.rs +++ b/sdk/bpf/rust/rust-utils/src/entrypoint.rs @@ -117,80 +117,3 @@ pub unsafe fn deserialize<'a>( Ok((kas, info, data)) } - -#[cfg(test)] -mod tests { - extern crate std; - - use self::std::ffi::CStr; - use self::std::println; - use self::std::string::String; - use super::*; - use core::mem; - - #[no_mangle] - fn sol_log_(message: *const u8) { - let scenario = get_log_scenario(); - let c_str = unsafe { CStr::from_ptr(message as *const i8) }; - let string = c_str.to_str().unwrap(); - println!("{:?}", string); - } - - #[no_mangle] - fn sol_log_64_(arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u64) { - println!("{:?} {:?} {:?} {:?} {:?}", arg1, arg2, arg3, arg4, arg5); - } - - #[test] - fn test_entrypoint() { - set_log_scenario(4); - set_log_64_scenario(4); - let mut input: [u8; 154] = [ - 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 151, 116, 3, 85, 181, 39, 151, 99, 155, - 29, 208, 191, 255, 191, 11, 161, 4, 43, 104, 189, 202, 240, 231, 111, 146, 255, 199, - 71, 67, 34, 254, 68, 48, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, - 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 190, 103, 191, - 69, 193, 202, 38, 193, 95, 62, 131, 135, 105, 13, 142, 240, 155, 120, 177, 90, 212, 54, - 10, 118, 40, 33, 192, 8, 54, 141, 187, 63, - ]; - - if let Ok((mut ka, info, data)) = deserialize(&mut input[0] as *mut u8) { - let account0 = match mem::replace(&mut ka[0], None) { - Some(mut account0) => account0, - None => { - panic!("Error: account not found"); - } - }; - - for k in ka[1..].iter() { - if let Some(_) = k { - panic!("Too many keyed accounts found"); - } - } - assert_eq!(true, account0.is_signer); - let key: &[u8; SIZE_PUBKEY] = &[ - 151, 116, 3, 85, 181, 39, 151, 99, 155, 29, 208, 191, 255, 191, 11, 161, 4, 43, - 104, 189, 202, 240, 231, 111, 146, 255, 199, 71, 67, 34, 254, 68, - ]; - assert_eq!(SIZE_PUBKEY, account0.key.key.len()); - assert_eq!(key, account0.key.key); - assert_eq!(48, account0.lamports); - assert_eq!(1, account0.data.len()); - let owner = &[0; SIZE_PUBKEY]; - assert_eq!(SIZE_PUBKEY, account0.owner.key.len()); - assert_eq!(owner, account0.owner.key); - let d = [1, 0, 0, 0, 0, 0, 0, 0, 1]; - assert_eq!(9, data.len()); - assert_eq!(d, data); - assert_eq!(1, info.tick_height); - let program_id: &[u8; SIZE_PUBKEY] = &[ - 190, 103, 191, 69, 193, 202, 38, 193, 95, 62, 131, 135, 105, 13, 142, 240, 155, - 120, 177, 90, 212, 54, 10, 118, 40, 33, 192, 8, 54, 141, 187, 63, - ]; - assert_eq!(program_id, info.program_id.key); - } else { - panic!("Failed to deserialize"); - } - } -} diff --git a/sdk/bpf/rust/rust-utils/src/lib.rs b/sdk/bpf/rust/rust-utils/src/lib.rs index a19f97c7d0..6ee7175e9e 100644 --- a/sdk/bpf/rust/rust-utils/src/lib.rs +++ b/sdk/bpf/rust/rust-utils/src/lib.rs @@ -1,20 +1,6 @@ //! @brief Solana Rust-based BPF program utility functions and types #![no_std] -#![feature(allocator_api)] -#![feature(alloc_error_handler)] -#![feature(panic_info_message)] -#![feature(compiler_builtins_lib)] -#![feature(lang_items)] -#[lang = "eh_personality"] -extern "C" fn eh_personality() {} -extern crate compiler_builtins; - -pub mod allocator; pub mod entrypoint; pub mod log; -pub mod panic; - -#[global_allocator] -static A: allocator::Allocator = allocator::Allocator; diff --git a/sdk/bpf/rust/rust-utils/src/log.rs b/sdk/bpf/rust/rust-utils/src/log.rs index 05dcb9f02f..97db3ffea8 100644 --- a/sdk/bpf/rust/rust-utils/src/log.rs +++ b/sdk/bpf/rust/rust-utils/src/log.rs @@ -91,122 +91,3 @@ pub fn sol_log_params(ka: &[SolKeyedAccount], data: &[u8]) { sol_log("Instruction data"); sol_log_slice(data); } - -#[cfg(test)] -mod tests { - extern crate std; - - use self::std::ffi::CStr; - use self::std::println; - use self::std::string::String; - use super::*; - use core::mem; - - static mut _LOG_SCENARIO: u64 = 4; - fn get_log_scenario() -> u64 { - unsafe { _LOG_SCENARIO } - } - fn set_log_scenario(test: u64) { - unsafe { _LOG_SCENARIO = test }; - } - - #[no_mangle] - fn sol_log_(message: *const u8) { - let scenario = get_log_scenario(); - let c_str = unsafe { CStr::from_ptr(message as *const i8) }; - let string = c_str.to_str().unwrap(); - match scenario { - 1 => assert_eq!(string, "This is a test message"), - 2 => assert_eq!(string, "Attempted to log a string that is too long"), - 3 => { - let s: String = ['a'; 126].iter().collect(); - assert_eq!(string, s); - } - 4 => println!("{:?}", string), - _ => panic!("Unknown sol_log test"), - } - } - - static mut _LOG_64_SCENARIO: u64 = 4; - fn get_log_64_scenario() -> u64 { - unsafe { _LOG_64_SCENARIO } - } - fn set_log_64_scenario(test: u64) { - unsafe { _LOG_64_SCENARIO = test }; - } - - #[no_mangle] - fn sol_log_64_(arg1: u64, arg2: u64, arg3: u64, arg4: u64, arg5: u64) { - let scenario = get_log_64_scenario(); - match scenario { - 1 => { - assert_eq!(1, arg1); - assert_eq!(2, arg2); - assert_eq!(3, arg3); - assert_eq!(4, arg4); - assert_eq!(5, arg5); - } - 2 => { - assert_eq!(0, arg1); - assert_eq!(0, arg2); - assert_eq!(0, arg3); - assert_eq!(arg4 + 1, arg5); - } - 3 => { - assert_eq!(0, arg1); - assert_eq!(0, arg2); - assert_eq!(0, arg3); - assert_eq!(arg4 + 1, arg5); - } - 4 => println!("{:?} {:?} {:?} {:?} {:?}", arg1, arg2, arg3, arg4, arg5), - _ => panic!("Unknown sol_log_64 test"), - } - } - - #[test] - fn test_sol_log() { - set_log_scenario(1); - sol_log("This is a test message"); - } - - #[test] - fn test_sol_log_long() { - set_log_scenario(3); - let s: String = ['a'; 256].iter().collect(); - sol_log(&s); - } - - #[test] - fn test_sol_log_max_length() { - set_log_scenario(3); - let s: String = ['a'; 126].iter().collect(); - sol_log(&s); - } - - #[test] - fn test_sol_log_64() { - set_log_64_scenario(1); - sol_log_64(1, 2, 3, 4, 5); - } - - #[test] - fn test_sol_log_key() { - set_log_64_scenario(2); - let key_array = [ - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, - ]; - let key = SolPubkey { key: &key_array }; - sol_log_key(&key); - } - - #[test] - fn test_sol_log_slice() { - set_log_64_scenario(3); - let array = [ - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, - ]; - sol_log_slice(&array); - } -}