• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Test that a custom handler works on wasm32-unknown-unknown
2 #![cfg(all(
3     target_arch = "wasm32",
4     target_os = "unknown",
5     feature = "custom",
6     not(feature = "js")
7 ))]
8 
9 use wasm_bindgen_test::wasm_bindgen_test as test;
10 
11 use core::num::NonZeroU32;
12 use getrandom::{getrandom, register_custom_getrandom, Error};
13 
len7_err() -> Error14 fn len7_err() -> Error {
15     NonZeroU32::new(Error::INTERNAL_START + 7).unwrap().into()
16 }
17 
super_insecure_rng(buf: &mut [u8]) -> Result<(), Error>18 fn super_insecure_rng(buf: &mut [u8]) -> Result<(), Error> {
19     // `getrandom` guarantees it will not call any implementation if the output
20     // buffer is empty.
21     assert!(!buf.is_empty());
22     // Length 7 buffers return a custom error
23     if buf.len() == 7 {
24         return Err(len7_err());
25     }
26     // Otherwise, fill bytes based on input length
27     let mut start = buf.len() as u8;
28     for b in buf {
29         *b = start;
30         start = start.wrapping_mul(3);
31     }
32     Ok(())
33 }
34 
35 register_custom_getrandom!(super_insecure_rng);
36 
37 use getrandom::getrandom as getrandom_impl;
38 mod common;
39 
40 #[test]
custom_rng_output()41 fn custom_rng_output() {
42     let mut buf = [0u8; 4];
43     assert_eq!(getrandom(&mut buf), Ok(()));
44     assert_eq!(buf, [4, 12, 36, 108]);
45 
46     let mut buf = [0u8; 3];
47     assert_eq!(getrandom(&mut buf), Ok(()));
48     assert_eq!(buf, [3, 9, 27]);
49 }
50 
51 #[test]
rng_err_output()52 fn rng_err_output() {
53     assert_eq!(getrandom(&mut [0; 7]), Err(len7_err()));
54 }
55