Skip to content

Mocking not working when used with rayon::join #121

@nikola-vidic

Description

@nikola-vidic

Hello together,
with version 0.4.0 tests ran all fine when I mocked functions that were run in parallel with rayon.
With the update to 0.5.0 the same tests don't run any more.

Here is a code snippet that works with 0.4.0 but not with 0.5.0.

#![allow(unused)]

fn some_string() -> String {
    "some test".into()
}

fn some_other_string() -> String {
    "some other test".into()
}

fn join_both_function_with_rayon() -> (String, String) {
    rayon::join(some_string, some_other_string)
}

#[cfg(test)]
mod tests {
    use super::*;
    use injectorpp::interface::injector::{CallCountVerifier, FuncPtr, InjectorPP};

    #[test]
    fn test_join_both_function() {
        let mut injector = InjectorPP::new();

        injector
            .when_called(injectorpp::func!(fn (super::some_other_string)() -> String))
            .will_execute(injectorpp::fake!(
                func_type: fn() -> String,
                returns: "test".into()
            ));

        injector
            .when_called(injectorpp::func!(fn (super::some_string)() -> String))
            .will_execute(injectorpp::fake!(
                func_type: fn() -> String,
                returns: "test".into()
            ));

        let var = join_both_function_with_rayon();
        assert_eq!(var, ("test".to_string(), "test".to_string()));
    }
}

Steps to reproduce

cargo new injectorpp-test --lib; cd injectorpp-test 
cargo add injectorpp rayon

// add snippet from above to lib.rs
cargo test

Errors with version 0.5.0

Compiling injectorpp-test v0.1.0 (/home/vidic_n/injectorpp-test)
    Finished `test` profile [unoptimized + debuginfo] target(s) in 0.34s
     Running unittests src/lib.rs (target/debug/deps/injectorpp_test-e914dc7eceacf30d)

running 1 test
test tests::test_join_both_function ... FAILED

failures:

---- tests::test_join_both_function stdout ----

thread 'tests::test_join_both_function' (6200) panicked at src/lib.rs:39:9:
assertion `left == right` failed
  left: ("some test", "some other test")
 right: ("test", "test")
stack backtrace:
   0:     0x63c76c337f52 - std::backtrace_rs::backtrace::libunwind::trace::hff358a60abf734fc
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/../../backtrace/src/backtrace/libunwind.rs:117:9
   1:     0x63c76c337f52 - std::backtrace_rs::backtrace::trace_unsynchronized::h3b121f916dd95ec6
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/../../backtrace/src/backtrace/mod.rs:66:14
   2:     0x63c76c337f52 - std::sys::backtrace::_print_fmt::hde0a62ded68798e9
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:74:9
   3:     0x63c76c337f52 - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::h93773fc827e3113d
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:44:26
   4:     0x63c76c34814a - core::fmt::rt::Argument::fmt::h01eff69902dad97f
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/fmt/rt.rs:152:76
   5:     0x63c76c34814a - core::fmt::write::hed7b5c73d82ecb7c
   6:     0x63c76c3069d6 - std::io::default_write_fmt::h2f696ff5b8bbaa4b
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/io/mod.rs:639:11
   7:     0x63c76c3069d6 - std::io::Write::write_fmt::h5e66814db8a9cfce
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/io/mod.rs:1994:13
   8:     0x63c76c3172c9 - std::sys::backtrace::BacktraceLock::print::h8b1d6fcc5a56d1a3
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:47:9
   9:     0x63c76c3172c9 - std::panicking::default_hook::{{closure}}::h2be84df4f189ae36
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:292:27
  10:     0x63c76c317161 - std::panicking::default_hook::hf0ea8939246f43a9
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:316:9
  11:     0x63c76c2c52ee - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h02d35e3888986252
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/alloc/src/boxed.rs:2220:9
  12:     0x63c76c2c52ee - test::test_main_with_exit_callback::{{closure}}::h939640a27d647173
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:145:21
  13:     0x63c76c3175f2 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::hc9df09ff391af3e7
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/alloc/src/boxed.rs:2220:9
  14:     0x63c76c3175f2 - std::panicking::panic_with_hook::hb4bd9ac1123582a0
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:833:13
  15:     0x63c76c317388 - std::panicking::panic_handler::{{closure}}::hde00dd15f5637fe2
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:698:13
  16:     0x63c76c3128a9 - std::sys::backtrace::__rust_end_short_backtrace::hb72197fa777c1785
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:182:18
  17:     0x63c76c2fb7fd - __rustc[4425a7e20b4c8619]::rust_begin_unwind
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:689:5
  18:     0x63c76c34f61c - core::panicking::panic_fmt::ha59b517dd231f4da
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/panicking.rs:80:14
  19:     0x63c76c34f4d3 - core::panicking::assert_failed_inner::h3c3301979dc81b81
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/panicking.rs:439:17
  20:     0x63c76c27e6f1 - core::panicking::assert_failed::hd5d2538d5cf6924c
                               at /home/vidic_n/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/panicking.rs:394:5
  21:     0x63c76c280487 - injectorpp_test::tests::test_join_both_function::h241ed3b7130940ad
                               at /home/vidic_n/injectorpp-test/src/lib.rs:39:9
  22:     0x63c76c27e4e7 - injectorpp_test::tests::test_join_both_function::{{closure}}::h60b0b01a4e853958
                               at /home/vidic_n/injectorpp-test/src/lib.rs:21:33
  23:     0x63c76c27ea06 - core::ops::function::FnOnce::call_once::he52ab73107f99b11
                               at /home/vidic_n/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ops/function.rs:250:5
  24:     0x63c76c2c50ab - core::ops::function::FnOnce::call_once::hddb3cd395c36bfbb
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/ops/function.rs:250:5
  25:     0x63c76c2c50ab - test::__rust_begin_short_backtrace::h0b6a7601d9750bfa
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:663:18
  26:     0x63c76c2d8aba - test::run_test_in_process::{{closure}}::h444209903f00b347
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:686:74
  27:     0x63c76c2d8aba - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::hfb3ba8f46e537649
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/panic/unwind_safe.rs:274:9
  28:     0x63c76c2d8aba - std::panicking::catch_unwind::do_call::h1672a45911fcf9dc
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:581:40
  29:     0x63c76c2d8aba - std::panicking::catch_unwind::h0fadaee22787a6dd
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:544:19
  30:     0x63c76c2d8aba - std::panic::catch_unwind::hc47ad190f2c8e188
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panic.rs:359:14
  31:     0x63c76c2d8aba - test::run_test_in_process::hcd7faaf934f29999
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:686:27
  32:     0x63c76c2d8aba - test::run_test::{{closure}}::hddc4550da4871867
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:607:43
  33:     0x63c76c2b2f14 - test::run_test::{{closure}}::h98ae26689f13ed94
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/test/src/lib.rs:637:41
  34:     0x63c76c2b2f14 - std::sys::backtrace::__rust_begin_short_backtrace::h3ec4d1f21ad44588
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/backtrace.rs:166:18
  35:     0x63c76c2b68b2 - std::thread::lifecycle::spawn_unchecked::{{closure}}::{{closure}}::hd8bf2c73d479939f
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/thread/lifecycle.rs:91:13
  36:     0x63c76c2b68b2 - <core::panic::unwind_safe::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::h3b4248f358af2491
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/panic/unwind_safe.rs:274:9
  37:     0x63c76c2b68b2 - std::panicking::catch_unwind::do_call::hda10a64f4b8daebe
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:581:40
  38:     0x63c76c2b68b2 - std::panicking::catch_unwind::h659e5ee8336ec8c7
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panicking.rs:544:19
  39:     0x63c76c2b68b2 - std::panic::catch_unwind::h9d4d66a538912c18
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/panic.rs:359:14
  40:     0x63c76c2b68b2 - std::thread::lifecycle::spawn_unchecked::{{closure}}::h7557906bb51d79f1
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/thread/lifecycle.rs:89:26
  41:     0x63c76c2b68b2 - core::ops::function::FnOnce::call_once{{vtable.shim}}::h9e460d1d7fc83d35
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/core/src/ops/function.rs:250:5
  42:     0x63c76c30db3f - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h61282da819d64ea9
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/alloc/src/boxed.rs:2206:9
  43:     0x63c76c30db3f - std::sys::thread::unix::Thread::new::thread_start::h982f9ea829d1b5fb
                               at /rustc/4a4ef493e3a1488c6e321570238084b38948f6db/library/std/src/sys/thread/unix.rs:127:17
  44:     0x76d69ce1097a - <unknown>
  45:     0x76d69ce942bc - <unknown>
  46:                0x0 - <unknown>


failures:
    tests::test_join_both_function

test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.01s

error: test failed, to rerun pass `--lib`

Or is there another way to make this work again?

Thank you

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions