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