Skip to content

Commit

Permalink
Add Rust bindings unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
gumb0 committed Feb 29, 2024
1 parent 435e290 commit 5e57100
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 10 deletions.
90 changes: 81 additions & 9 deletions bindings/rust/evmc-vm/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -347,11 +347,7 @@ impl<'a> ExecutionContext<'a> {
std::ptr::null() as *const u8
};
let code = message.code();
let code_size = if let Some(code) = code {
code.len()
} else {
0
};
let code_size = if let Some(code) = code { code.len() } else { 0 };
let code_data = if let Some(code) = code {
code.as_ptr()
} else {
Expand Down Expand Up @@ -551,10 +547,7 @@ impl From<&ffi::evmc_message> for ExecutionMessage {
} else if message.code_size == 0 {
None
} else {
Some(from_buf_raw::<u8>(
message.code,
message.code_size,
))
Some(from_buf_raw::<u8>(message.code, message.code_size))
},
}
}
Expand Down Expand Up @@ -752,6 +745,42 @@ mod tests {
assert_eq!(*ret.code_address(), code_address);
}

#[test]
fn message_new_with_code() {
let recipient = Address { bytes: [32u8; 20] };
let sender = Address { bytes: [128u8; 20] };
let value = Uint256 { bytes: [0u8; 32] };
let create2_salt = Bytes32 { bytes: [255u8; 32] };
let code_address = Address { bytes: [64u8; 20] };
let code = vec![0x5f, 0x5f, 0xfd];

let ret = ExecutionMessage::new(
MessageKind::EVMC_CALL,
44,
66,
4466,
recipient,
sender,
None,
value,
create2_salt,
code_address,
Some(&code),
);

assert_eq!(ret.kind(), MessageKind::EVMC_CALL);
assert_eq!(ret.flags(), 44);
assert_eq!(ret.depth(), 66);
assert_eq!(ret.gas(), 4466);
assert_eq!(*ret.recipient(), recipient);
assert_eq!(*ret.sender(), sender);
assert_eq!(*ret.value(), value);
assert_eq!(*ret.create2_salt(), create2_salt);
assert_eq!(*ret.code_address(), code_address);
assert!(ret.code().is_some());
assert_eq!(*ret.code().unwrap(), code);
}

#[test]
fn message_from_ffi() {
let recipient = Address { bytes: [32u8; 20] };
Expand Down Expand Up @@ -788,6 +817,7 @@ mod tests {
assert_eq!(*ret.value(), msg.value);
assert_eq!(*ret.create2_salt(), msg.create2_salt);
assert_eq!(*ret.code_address(), msg.code_address);
assert!(ret.code().is_none());
}

#[test]
Expand Down Expand Up @@ -828,6 +858,48 @@ mod tests {
assert_eq!(*ret.value(), msg.value);
assert_eq!(*ret.create2_salt(), msg.create2_salt);
assert_eq!(*ret.code_address(), msg.code_address);
assert!(ret.code().is_none());
}

#[test]
fn message_from_ffi_with_code() {
let recipient = Address { bytes: [32u8; 20] };
let sender = Address { bytes: [128u8; 20] };
let value = Uint256 { bytes: [0u8; 32] };
let create2_salt = Bytes32 { bytes: [255u8; 32] };
let code_address = Address { bytes: [64u8; 20] };
let code = vec![0x5f, 0x5f, 0xfd];

let msg = ffi::evmc_message {
kind: MessageKind::EVMC_CALL,
flags: 44,
depth: 66,
gas: 4466,
recipient,
sender,
input_data: std::ptr::null(),
input_size: 0,
value,
create2_salt,
code_address,
code: code.as_ptr(),
code_size: code.len(),
};

let ret: ExecutionMessage = (&msg).into();

assert_eq!(ret.kind(), msg.kind);
assert_eq!(ret.flags(), msg.flags);
assert_eq!(ret.depth(), msg.depth);
assert_eq!(ret.gas(), msg.gas);
assert_eq!(*ret.recipient(), msg.recipient);
assert_eq!(*ret.sender(), msg.sender);
assert!(ret.input().is_none());
assert_eq!(*ret.value(), msg.value);
assert_eq!(*ret.create2_salt(), msg.create2_salt);
assert_eq!(*ret.code_address(), msg.code_address);
assert!(ret.code().is_some());
assert_eq!(*ret.code().unwrap(), code);
}

unsafe extern "C" fn get_dummy_tx_context(
Expand Down
5 changes: 4 additions & 1 deletion bindings/rust/evmc-vm/src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,10 @@ mod tests {
);
assert_eq!(MessageKind::EVMC_CREATE, ffi::evmc_call_kind::EVMC_CREATE);
assert_eq!(MessageKind::EVMC_CREATE2, ffi::evmc_call_kind::EVMC_CREATE2);
assert_eq!(MessageKind::EVMC_EOFCREATE, ffi::evmc_call_kind::EVMC_EOFCREATE);
assert_eq!(
MessageKind::EVMC_EOFCREATE,
ffi::evmc_call_kind::EVMC_EOFCREATE
);
}

#[test]
Expand Down

0 comments on commit 5e57100

Please sign in to comment.