Skip to content

Commit

Permalink
Drop wasmer in favor of wasmtime for tests
Browse files Browse the repository at this point in the history
Since we've transitioned to `wasmtime` for the entirety of our stack, we
should also use it for the tests in this crate. This commit does exactly
that, doing away with the `wasmer` dependency, and replacing it with
`wasmtime`.

This also also helps in figuring out exactly what's wrong with our test
runs, by eliminating the runtime as a factor - it errors in the same way
in both `debug` and `release` modes.

See-also: #105
  • Loading branch information
Eduardo Leegwater Simões committed May 7, 2024
1 parent 361484c commit 4c8710c
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 41 deletions.
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ rusk-abi = { version = "0.12.0-rc.0", default-features = false }

[dev-dependencies]
rand = "^0.8"
wasmer = "=3.1"
wasmtime = "20"

[build-dependencies]
schemafy_lib = "0.6"
83 changes: 43 additions & 40 deletions tests/wallet.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ use phoenix_core::Crossover;
use rusk_abi::ContractId;
use serde::{Deserialize, Serialize};
use serde_json::json;
use wasmer::{imports, Instance, Module, Store, Value};
use wasmtime::{Engine, Instance, Module, Store, Val};

#[test]
fn seed_works() {
Expand Down Expand Up @@ -356,7 +356,7 @@ mod node {
}

pub struct Wallet {
pub store: Store,
pub store: Store<()>,
pub module: Module,
pub instance: Instance,
}
Expand Down Expand Up @@ -386,21 +386,19 @@ impl<'a> CallResult<'a> {

self.wallet
.instance
.exports
.get_memory("memory")
.unwrap()
.view(&self.wallet.store)
.read(self.val as u64, &mut bytes)
.get_memory(&mut self.wallet.store, "memory")
.expect("There should be one memory")
.read(&mut self.wallet.store, self.val as usize, &mut bytes)
.unwrap();

self.wallet
.instance
.exports
.get_function("free_mem")
.unwrap()
.get_func(&mut self.wallet.store, "free_mem")
.expect("free_mem should exist")
.call(
&mut self.wallet.store,
&[Value::I32(self.val as i32), Value::I32(self.aux as i32)],
&[Val::I32(self.val as i32), Val::I32(self.aux as i32)],
&mut [],
)
.unwrap();

Expand Down Expand Up @@ -429,49 +427,54 @@ impl Wallet {
T: Serialize,
{
let bytes = serde_json::to_string(&args).unwrap();
let len = Value::I32(bytes.len() as i32);
let ptr = self

let len_params = [Val::I32(bytes.len() as i32)];
let mut ptr_results = [Val::I32(0)];

let allocate = self
.instance
.exports
.get_function("allocate")
.unwrap()
.call(&mut self.store, &[len.clone()])
.unwrap()[0]
.unwrap_i32();
.get_func(&mut self.store, "allocate")
.expect("allocate should exist");

self.instance
.exports
.get_memory("memory")
.unwrap()
.view(&self.store)
.write(ptr as u64, bytes.as_bytes())
allocate
.call(&mut self.store, &len_params, &mut ptr_results)
.unwrap();

let ptr = Value::I32(ptr);
let result = self
.instance
.exports
.get_function(f)
.unwrap()
.call(&mut self.store, &[ptr, len])
.unwrap()[0]
.unwrap_i64();
self.instance
.get_memory(&mut self.store, "memory")
.expect("There should be one memory")
.write(
&mut self.store,
ptr_results[0].unwrap_i32() as usize,
bytes.as_bytes(),
)
.expect("Writing to memory should succeed");

let params = [ptr_results[0].clone(), len_params[0].clone()];
let mut results = [Val::I64(0)];

CallResult::new(self, result)
self.instance
.get_func(&mut self.store, f)
.expect("allocate should exist")
.call(&mut self.store, &params, &mut results)
.unwrap();

CallResult::new(self, results[0].unwrap_i64())
}
}

impl Default for Wallet {
fn default() -> Self {
const WALLET: &[u8] = include_bytes!("../assets/dusk_wallet_core.wasm");

let mut store = Store::default();
let engine = Engine::default();
let mut store = Store::new(&engine, ());

let module =
Module::new(&store, WALLET).expect("failed to create wasm module");
Module::new(&engine, WALLET).expect("failed to create wasm module");

let import_object = imports! {};
let instance = Instance::new(&mut store, &module, &import_object)
.expect("failed to instanciate the wasm module");
let instance = Instance::new(&mut store, &module, &[])
.expect("failed to instantiate the wasm module");

Self {
store,
Expand Down

0 comments on commit 4c8710c

Please sign in to comment.