[Bug]: `marker_uitest` doesn't work in a workspace with rust-toolchain.toml file that uses `1.71`
Opened this issue · 1 comments
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