diff --git a/Cargo.toml b/Cargo.toml index c4802c1ba..07881e624 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -121,7 +121,7 @@ members = [ "zk-token-sdk", ] -exclude = ["programs/sbf"] +exclude = ["programs/sbf", "svm/tests/example-programs"] # This prevents a Travis CI error when building for Windows. resolver = "2" diff --git a/svm/src/transaction_processor.rs b/svm/src/transaction_processor.rs index fbf0a8266..db5a8ac92 100644 --- a/svm/src/transaction_processor.rs +++ b/svm/src/transaction_processor.rs @@ -1195,19 +1195,26 @@ mod tests { } } - #[test] - fn test_load_program_from_bytes() { + fn load_test_program() -> Vec { let mut dir = env::current_dir().unwrap(); dir.push("tests"); + dir.push("example-programs"); + dir.push("hello-solana"); dir.push("hello_solana_program.so"); let mut file = File::open(dir.clone()).expect("file not found"); let metadata = fs::metadata(dir).expect("Unable to read metadata"); let mut buffer = vec![0; metadata.len() as usize]; file.read_exact(&mut buffer).expect("Buffer overflow"); + buffer + } + + #[test] + fn test_load_program_from_bytes() { + let buffer = load_test_program(); let mut metrics = LoadProgramMetrics::default(); let loader = bpf_loader_upgradeable::id(); - let size = metadata.len() as usize; + let size = buffer.len(); let slot = 2; let environment = ProgramRuntimeEnvironment::new(BuiltinProgram::new_mock()); @@ -1303,13 +1310,7 @@ mod tests { ); assert_eq!(result, Arc::new(loaded_program)); - let mut dir = env::current_dir().unwrap(); - dir.push("tests"); - dir.push("hello_solana_program.so"); - let mut file = File::open(dir.clone()).expect("file not found"); - let metadata = fs::metadata(dir).expect("Unable to read metadata"); - let mut buffer = vec![0; metadata.len() as usize]; - file.read_exact(&mut buffer).expect("buffer overflow"); + let buffer = load_test_program(); account_data.set_data(buffer); mock_bank @@ -1376,13 +1377,7 @@ mod tests { ); assert_eq!(result, Arc::new(loaded_program)); - let mut dir = env::current_dir().unwrap(); - dir.push("tests"); - dir.push("hello_solana_program.so"); - let mut file = File::open(dir.clone()).expect("file not found"); - let metadata = fs::metadata(dir).expect("Unable to read metadata"); - let mut buffer = vec![0; metadata.len() as usize]; - file.read_exact(&mut buffer).expect("buffer overflow"); + let mut buffer = load_test_program(); let mut header = bincode::serialize(&state).unwrap(); let mut complement = vec![ 0; @@ -1461,13 +1456,7 @@ mod tests { vec![0; std::cmp::max(0, LoaderV4State::program_data_offset() - header.len())]; header.append(&mut complement); - let mut dir = env::current_dir().unwrap(); - dir.push("tests"); - dir.push("hello_solana_program.so"); - let mut file = File::open(dir.clone()).expect("file not found"); - let metadata = fs::metadata(dir).expect("Unable to read metadata"); - let mut buffer = vec![0; metadata.len() as usize]; - file.read_exact(&mut buffer).expect("buffer overflow"); + let mut buffer = load_test_program(); header.append(&mut buffer); account_data.set_data(header); diff --git a/svm/tests/example-programs/hello-solana/Cargo.toml b/svm/tests/example-programs/hello-solana/Cargo.toml new file mode 100644 index 000000000..09995d8c6 --- /dev/null +++ b/svm/tests/example-programs/hello-solana/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "hello-solana-program" +version = "2.0.0" +edition = "2021" + +[dependencies] +solana-program = { path = "../../../../sdk/program", version = "=2.0.0" } + +[lib] +crate-type = ["cdylib", "rlib"] + +[workspace] \ No newline at end of file diff --git a/svm/tests/hello_solana_program.so b/svm/tests/example-programs/hello-solana/hello_solana_program.so similarity index 100% rename from svm/tests/hello_solana_program.so rename to svm/tests/example-programs/hello-solana/hello_solana_program.so diff --git a/svm/tests/example-programs/hello-solana/src/lib.rs b/svm/tests/example-programs/hello-solana/src/lib.rs new file mode 100644 index 000000000..249179a66 --- /dev/null +++ b/svm/tests/example-programs/hello-solana/src/lib.rs @@ -0,0 +1,15 @@ +use solana_program::{ + account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, msg, pubkey::Pubkey, +}; + +entrypoint!(process_instruction); + +fn process_instruction( + _program_id: &Pubkey, + _accounts: &[AccountInfo], + _instruction_data: &[u8], +) -> ProgramResult { + msg!("Hello, Solana!"); + + Ok(()) +} diff --git a/svm/tests/integration_test.rs b/svm/tests/integration_test.rs index 45409a3b1..1b8d1c08c 100644 --- a/svm/tests/integration_test.rs +++ b/svm/tests/integration_test.rs @@ -188,8 +188,8 @@ fn prepare_transactions( // Loading the program file let mut dir = env::current_dir().unwrap(); dir.push("tests"); - // File compiled from - // https://github.com/solana-developers/program-examples/blob/feb82f254a4633ce2107d06060f2d0558dc987f5/basics/hello-solana/native/program/src/lib.rs + dir.push("example-programs"); + dir.push("hello-solana"); dir.push("hello_solana_program.so"); let mut file = File::open(dir.clone()).expect("file not found"); let metadata = fs::metadata(dir).expect("Unable to read metadata");