Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug]: marker_uitest doesn't work in a workspace with rust-toolchain.toml file that uses 1.71 #298

Open
Veetaha opened this issue Oct 21, 2023 · 1 comment
Labels
C-bug Category: Something isn't working

Comments

@Veetaha
Copy link
Contributor

Veetaha commented Oct 21, 2023

Summary

I've been integrating marker into my work project. It's been quite seamless so far, but when I started testing my lints I found that a simple cargo test -p lint-crate doesn't work. The workspace I have the lint crate defined in uses 1.71 stable rust toolchain in rust-toolchain file.

Here is the error that I'm getting

Details
 cargo test -p elastio-lints
   Compiling elastio-lints v0.28.43-dev (/home/veetaha/work/elastio/common/elastio-lints)
    Finished test [unoptimized] target(s) in 0.81s
     Running unittests src/lib.rs (target/debug/deps/elastio_lints-ca81c15328620075)

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s

     Running tests/uitest.rs (target/debug/deps/uitest-3b6f89e9813dc3ab)
/home/veetaha/.rustup/toolchains/nightly-2023-08-24-x86_64-unknown-linux-gnu/bin/marker_rustc_driver: error while loading shared libraries: librustc_driver-00c03654e9ecf095.so: cannot open shared object file: No such file or directory
thread 'main' panicked at '
===========================================================

Error: Unable to start Marker's driver

UI tests need to be executed with the nightly version of the driver

* Try setting the version in a `rust-toolchain.toml` file, like this:
    ```
    [toolchain]
    channel = "nightly-2023-08-24"
    ```

* Try setting the channel when invoking the tests, like this:
    ```
    cargo +nightly-2023-08-24 test"
    ```

===========================================================
', /home/veetaha/.cargo/registry/src/index.crates.io-6f17d22bba15001f/marker_uitest-0.3.0/src/lib.rs:257:9
stack backtrace:
   0:     0x55a7b8d32a81 - std::backtrace_rs::backtrace::libunwind::trace::h6aeaf83abc038fe6
                               at /rustc/8ede3aae28fe6e4d52b38157d7bfe0d3bceef225/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
   1:     0x55a7b8d32a81 - std::backtrace_rs::backtrace::trace_unsynchronized::h4f9875212db0ad97
                               at /rustc/8ede3aae28fe6e4d52b38157d7bfe0d3bceef225/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x55a7b8d32a81 - std::sys_common::backtrace::_print_fmt::h3f820027e9c39d3b
                               at /rustc/8ede3aae28fe6e4d52b38157d7bfe0d3bceef225/library/std/src/sys_common/backtrace.rs:65:5
   3:     0x55a7b8d32a81 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hded4932df41373b3
                               at /rustc/8ede3aae28fe6e4d52b38157d7bfe0d3bceef225/library/std/src/sys_common/backtrace.rs:44:22
   4:     0x55a7b8d5c72f - core::fmt::rt::Argument::fmt::hc8ead7746b2406d6
                               at /rustc/8ede3aae28fe6e4d52b38157d7bfe0d3bceef225/library/core/src/fmt/rt.rs:138:9
   5:     0x55a7b8d5c72f - core::fmt::write::hb1cb56105a082ad9
                               at /rustc/8ede3aae28fe6e4d52b38157d7bfe0d3bceef225/library/core/src/fmt/mod.rs:1094:21
   6:     0x55a7b8d2eff1 - std::io::Write::write_fmt::h797fda7085c97e57
                               at /rustc/8ede3aae28fe6e4d52b38157d7bfe0d3bceef225/library/std/src/io/mod.rs:1713:15
   7:     0x55a7b8d32895 - std::sys_common::backtrace::_print::h492d3c92d7400346
                               at /rustc/8ede3aae28fe6e4d52b38157d7bfe0d3bceef225/library/std/src/sys_common/backtrace.rs:47:5
   8:     0x55a7b8d32895 - std::sys_common::backtrace::print::hf74aa2eef05af215
                               at /rustc/8ede3aae28fe6e4d52b38157d7bfe0d3bceef225/library/std/src/sys_common/backtrace.rs:34:9
   9:     0x55a7b8d347b7 - std::panicking::default_hook::{{closure}}::h8cad394227ea3de8
  10:     0x55a7b8d345a4 - std::panicking::default_hook::h249cc184fec99a8a
                               at /rustc/8ede3aae28fe6e4d52b38157d7bfe0d3bceef225/library/std/src/panicking.rs:288:9
  11:     0x55a7b8d34cdc - std::panicking::rust_panic_with_hook::h82ebcd5d5ed2fad4
                               at /rustc/8ede3aae28fe6e4d52b38157d7bfe0d3bceef225/library/std/src/panicking.rs:705:13
  12:     0x55a7b8d34bd7 - std::panicking::begin_panic_handler::{{closure}}::h810bed8ecbe66f1a
                               at /rustc/8ede3aae28fe6e4d52b38157d7bfe0d3bceef225/library/std/src/panicking.rs:597:13
  13:     0x55a7b8d32eb6 - std::sys_common::backtrace::__rust_end_short_backtrace::h1410008071796261
                               at /rustc/8ede3aae28fe6e4d52b38157d7bfe0d3bceef225/library/std/src/sys_common/backtrace.rs:151:18
  14:     0x55a7b8d34922 - rust_begin_unwind
                               at /rustc/8ede3aae28fe6e4d52b38157d7bfe0d3bceef225/library/std/src/panicking.rs:593:5
  15:     0x55a7b8d5a103 - core::panicking::panic_fmt::ha0a42a25e0cf258d
                               at /rustc/8ede3aae28fe6e4d52b38157d7bfe0d3bceef225/library/core/src/panicking.rs:67:14
  16:     0x55a7b89942f5 - core::panicking::panic_display::h59aedf1a58ab8206
  17:     0x55a7b899005d - marker_uitest::verify_driver::h59bc9ad5a43a5df5
  18:     0x55a7b898e196 - marker_uitest::create_ui_test_config::ha499303f3a921a17
  19:     0x55a7b8984be4 - uitest::main::hb45b62ded66aaa8d
  20:     0x55a7b8987b23 - core::ops::function::FnOnce::call_once::h867139df5e8dcac0
  21:     0x55a7b8984f66 - std::sys_common::backtrace::__rust_begin_short_backtrace::h7aa1576e7aea9372
  22:     0x55a7b8987989 - std::rt::lang_start::{{closure}}::h83d40923d1ff81b9
  23:     0x55a7b8d28185 - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::h5ce27e764c284c0a
                               at /rustc/8ede3aae28fe6e4d52b38157d7bfe0d3bceef225/library/core/src/ops/function.rs:284:13
  24:     0x55a7b8d28185 - std::panicking::try::do_call::h4c1fc390ae241991
                               at /rustc/8ede3aae28fe6e4d52b38157d7bfe0d3bceef225/library/std/src/panicking.rs:500:40
  25:     0x55a7b8d28185 - std::panicking::try::h4d36e7eaed86af72
                               at /rustc/8ede3aae28fe6e4d52b38157d7bfe0d3bceef225/library/std/src/panicking.rs:464:19
  26:     0x55a7b8d28185 - std::panic::catch_unwind::h41cfb4dd65282b1e
                               at /rustc/8ede3aae28fe6e4d52b38157d7bfe0d3bceef225/library/std/src/panic.rs:142:14
  27:     0x55a7b8d28185 - std::rt::lang_start_internal::{{closure}}::hfed411c1c5fdb925
                               at /rustc/8ede3aae28fe6e4d52b38157d7bfe0d3bceef225/library/std/src/rt.rs:148:48
  28:     0x55a7b8d28185 - std::panicking::try::do_call::h6893f6f32a464342
                               at /rustc/8ede3aae28fe6e4d52b38157d7bfe0d3bceef225/library/std/src/panicking.rs:500:40
  29:     0x55a7b8d28185 - std::panicking::try::h52b7102f469a0567
                               at /rustc/8ede3aae28fe6e4d52b38157d7bfe0d3bceef225/library/std/src/panicking.rs:464:19
  30:     0x55a7b8d28185 - std::panic::catch_unwind::h62120054677916b5
                               at /rustc/8ede3aae28fe6e4d52b38157d7bfe0d3bceef225/library/std/src/panic.rs:142:14
  31:     0x55a7b8d28185 - std::rt::lang_start_internal::hd66bf6b7da144005
                               at /rustc/8ede3aae28fe6e4d52b38157d7bfe0d3bceef225/library/std/src/rt.rs:148:20
  32:     0x55a7b8987967 - std::rt::lang_start::hb44b6dea8d65c1f8
  33:     0x55a7b8984f45 - main
  34:     0x7f84418c1d90 - __libc_start_call_main
                               at ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
  35:     0x7f84418c1e40 - __libc_start_main_impl
                               at ./csu/../csu/libc-start.c:392:3
  36:     0x55a7b89807e5 - _start
  37:                0x0 - <unknown>
error: test failed, to rerun pass `-p elastio-lints --test uitest`

Cause

The problem occurs because the test process is invoked with both the RUSTUP_TOOLCHAIN and LD_LIBRARY_PATH that point to the 1.71.0 toolchain in this case. The marker_uitest needs to make sure to ignore these variables by invoking the driver via rustup run {marker-nightly-toolchain} marker_rustc_driver command.

Workaround

I've come up with a workaround for this issue, but I'd like this to be fixed in marker_uitest.

use marker_uitest::ui_test;
use std::env;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // FIXME: The toolchain juggling is the workaround for https://github.com/rust-marker/marker/issues/298
    let toolchain = "nightly-2023-08-24";
    std::env::set_var("RUSTUP_TOOLCHAIN", toolchain);

    let output = std::process::Command::new("rustup")
        .args(&["run", toolchain, "rustc", "--print", "sysroot"])
        .output()?;

    let sysroot = String::from_utf8(output.stdout).unwrap();
    let sysroot = sysroot.trim();

    if !output.status.success() {
        let stderr = String::from_utf8(output.stderr).unwrap();
        panic!(
            "Failed to get sysroot for marker rustc driver.\n\
            -- stdout --\n\
            {sysroot}\n\
            -- stderr --\n\
            {stderr}",
        );
    }

    env::set_var(
        "LD_LIBRARY_PATH",
        format!(
            "{sysroot}/lib:{}",
            env::var("LD_LIBRARY_PATH").unwrap_or_default()
        ),
    );

    let config = marker_uitest::simple_ui_test_config!()?;

    ui_test::run_tests_generic(
        vec![config],
        ui_test::default_file_filter,
        ui_test::default_per_file_config,
        ui_test::status_emitter::Text::quiet(),
    )?;

    Ok(())
}

Reproducer

Create a file rust-toolchain with 1.71.0 inside of it.

Initialize an dummy lint crate inside of the workspace.

Use the following code for the sample lint crate in tests/uitest.rs file:

use marker_uitest::ui_test;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let config = marker_uitest::simple_ui_test_config!()?;

    ui_test::run_tests_generic(
        vec![config],
        ui_test::default_file_filter,
        ui_test::default_per_file_config,
        ui_test::status_emitter::Text::quiet(),
    )?;

    Ok(())
}

Run cargo test

Version

cargo-marker 0.3.0
@Veetaha Veetaha added C-bug Category: Something isn't working S-needs-triage Status: This issue needs triage labels Oct 21, 2023
@xFrednet
Copy link
Member

Yep, this is sadly a limitation rn. We might want to ask ui_test if they want to support setting the toolchain, before we hack around it in Marker's wrapper.

@xFrednet xFrednet removed the S-needs-triage Status: This issue needs triage label Nov 14, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C-bug Category: Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants