nano33ble/test/
virtual_rng_test.rs

1// Licensed under the Apache License, Version 2.0 or the MIT License.
2// SPDX-License-Identifier: Apache-2.0 OR MIT
3// Copyright Tock Contributors 2022.
4
5//! Test file for the virtual_rng
6//! To run this test, include the code
7//! ```
8//!    test::virtual_rng_test::run(&base_peripherals.trng);
9//! ```
10
11use capsules_core::rng;
12use capsules_core::test::virtual_rng::TestRng;
13use kernel::hil::rng::Rng;
14use kernel::{debug, static_init};
15
16pub unsafe fn run(trng: &'static nrf52840::trng::Trng) {
17    debug!("Starting virtual_rng get tests:");
18    let rng_obj = static_init!(
19        rng::Entropy32ToRandom<'static, nrf52840::trng::Trng>,
20        rng::Entropy32ToRandom::new(trng)
21    );
22
23    // Create virtual rng mux device
24    let mux = static_init!(
25        capsules_core::virtualizers::virtual_rng::MuxRngMaster<'static>,
26        capsules_core::virtualizers::virtual_rng::MuxRngMaster::new(rng_obj)
27    );
28
29    // Create all devices for the virtual rng
30    let device1 = static_init!(
31        capsules_core::virtualizers::virtual_rng::VirtualRngMasterDevice<'static>,
32        capsules_core::virtualizers::virtual_rng::VirtualRngMasterDevice::new(mux)
33    );
34    let device2 = static_init!(
35        capsules_core::virtualizers::virtual_rng::VirtualRngMasterDevice<'static>,
36        capsules_core::virtualizers::virtual_rng::VirtualRngMasterDevice::new(mux)
37    );
38    let device3 = static_init!(
39        capsules_core::virtualizers::virtual_rng::VirtualRngMasterDevice<'static>,
40        capsules_core::virtualizers::virtual_rng::VirtualRngMasterDevice::new(mux)
41    );
42
43    // Create independent tests for each device
44    let test_device_1 = static_init!(TestRng<'static>, TestRng::new(1, device1));
45
46    let test_device_2 = static_init!(TestRng<'static>, TestRng::new(2, device2));
47
48    let test_device_3 = static_init!(TestRng<'static>, TestRng::new(3, device3));
49
50    // Set clients for each device
51    device1.set_client(test_device_1);
52    device2.set_client(test_device_2);
53    device3.set_client(test_device_3);
54
55    // // Get set number of random values for each device and interleave requests
56    test_device_1.get_random_nums();
57    test_device_2.get_random_nums();
58    test_device_3.get_random_nums();
59}