// 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())); }