On Thu, Jul 20, 2023 at 8:40 AM David Gow <davidgow@xxxxxxxxxx> wrote: > > The only difference with user-space tests is that instead of using > `#[cfg(test)]`, `#[kunit_tests(kunit_test_suit_name)]` is used. I may be missing something, but this does not appear to map the `assert*!`s to the KUnit APIs, is that correct? (i.e. like we do for `rustdoc`-tests). I made an assertion fail, and it seems to use the standard library macros, thus panicking and ending up in `BUG()` (rather than a failed test): rust_kernel: panicked at 'assertion failed: `(left == right)` left: `true`, right: `false`', rust/kernel/kunit.rs:329:1 ------------[ cut here ]------------ kernel BUG at rust/helpers.c:34! Then the test times out eventually and things break: # rust_test_kunit_kunit_tests: try timed out ------------[ cut here ]------------ refcount_t: addition on 0; use-after-free. > + // Add `#[cfg(CONFIG_KUNIT)]` before the module declaration. > + let config_kunit = "#[cfg(CONFIG_KUNIT)]".to_owned().parse().unwrap(); > + tokens.insert( > + 0, > + TokenTree::Group(Group::new(Delimiter::None, config_kunit)), > + ); I wonder about compile-time here with this approach. As far as I understand, having the `cfg` explicitly outside the proc macro would avoid invoking it. Do we know the potential compile-time impact, especially when we will have many tests? ventually it would be ideal to have an approach closer to the `rustdoc` one, where the compiler finds the tests for us and we generate the needed code in the build system, i.e. outside a proc macro. Cheers, Miguel