fn rng()

in sdk/core/azure_core_test/src/recording.rs [381:418]


    fn rng(&self) -> &Mutex<ChaCha20Rng> {
        // Use ChaCha20 for a deterministic, portable CSPRNG.
        self.rand.get_or_init(|| match self.test_mode {
            TestMode::Live => ChaCha20Rng::from_entropy().into(),
            TestMode::Playback => {
                let variables = self
                    .variables
                    .read()
                    .map_err(read_lock_error)
                    .unwrap_or_else(|err| panic!("{err}"));
                let seed: String = variables
                    .get(RANDOM_SEED_NAME)
                    .map(Into::into)
                    .unwrap_or_else(|| panic!("random seed variable not set"));
                let seed = base64::decode(seed)
                    .unwrap_or_else(|err| panic!("failed to decode random seed: {err}"));
                let seed = seed
                    .first_chunk::<32>()
                    .unwrap_or_else(|| panic!("insufficient random seed variable"));

                ChaCha20Rng::from_seed(*seed).into()
            }
            TestMode::Record => {
                let rng = ChaCha20Rng::from_entropy();
                let seed = rng.get_seed();
                let seed = base64::encode(seed);

                let mut variables = self
                    .variables
                    .write()
                    .map_err(write_lock_error)
                    .unwrap_or_else(|err| panic!("{err}"));
                variables.insert(RANDOM_SEED_NAME.to_string(), Value::from(Some(seed), None));

                rng.into()
            }
        })
    }