mirror of
https://github.com/saymrwulf/xous-core.git
synced 2026-11-08 04:56:43 +00:00
we have to keep all the targets around, because hosted mode also uses rand, which won't resolve correctly unless we also have the host's target available, unfortunately (trust me, tried to do a version stripped down just for xous...)
50 lines
1.3 KiB
Rust
50 lines
1.3 KiB
Rust
// Test that a custom handler works on wasm32-unknown-unknown
|
|
#![cfg(all(
|
|
target_arch = "wasm32",
|
|
target_os = "unknown",
|
|
feature = "custom",
|
|
not(feature = "js")
|
|
))]
|
|
|
|
use wasm_bindgen_test::wasm_bindgen_test as test;
|
|
#[cfg(feature = "test-in-browser")]
|
|
wasm_bindgen_test::wasm_bindgen_test_configure!(run_in_browser);
|
|
|
|
use core::{
|
|
num::NonZeroU32,
|
|
sync::atomic::{AtomicU8, Ordering},
|
|
};
|
|
use getrandom::{getrandom, register_custom_getrandom, Error};
|
|
|
|
fn len7_err() -> Error {
|
|
NonZeroU32::new(Error::INTERNAL_START + 7).unwrap().into()
|
|
}
|
|
|
|
fn super_insecure_rng(buf: &mut [u8]) -> Result<(), Error> {
|
|
// Length 7 buffers return a custom error
|
|
if buf.len() == 7 {
|
|
return Err(len7_err());
|
|
}
|
|
// Otherwise, increment an atomic counter
|
|
static COUNTER: AtomicU8 = AtomicU8::new(0);
|
|
for b in buf {
|
|
*b = COUNTER.fetch_add(1, Ordering::Relaxed);
|
|
}
|
|
Ok(())
|
|
}
|
|
|
|
register_custom_getrandom!(super_insecure_rng);
|
|
|
|
#[test]
|
|
fn custom_rng_output() {
|
|
let mut buf = [0u8; 4];
|
|
assert_eq!(getrandom(&mut buf), Ok(()));
|
|
assert_eq!(buf, [0, 1, 2, 3]);
|
|
assert_eq!(getrandom(&mut buf), Ok(()));
|
|
assert_eq!(buf, [4, 5, 6, 7]);
|
|
}
|
|
|
|
#[test]
|
|
fn rng_err_output() {
|
|
assert_eq!(getrandom(&mut [0; 7]), Err(len7_err()));
|
|
}
|