// 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; use core::num::NonZeroU32; 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> { // `getrandom` guarantees it will not call any implementation if the output // buffer is empty. assert!(!buf.is_empty()); // Length 7 buffers return a custom error if buf.len() == 7 { return Err(len7_err()); } // Otherwise, fill bytes based on input length let mut start = buf.len() as u8; for b in buf { *b = start; start = start.wrapping_mul(3); } Ok(()) } register_custom_getrandom!(super_insecure_rng); use getrandom::getrandom as getrandom_impl; mod common; #[test] fn custom_rng_output() { let mut buf = [0u8; 4]; assert_eq!(getrandom(&mut buf), Ok(())); assert_eq!(buf, [4, 12, 36, 108]); let mut buf = [0u8; 3]; assert_eq!(getrandom(&mut buf), Ok(())); assert_eq!(buf, [3, 9, 27]); } #[test] fn rng_err_output() { assert_eq!(getrandom(&mut [0; 7]), Err(len7_err())); }