Почему тесты документации Rust не выполняются в Docker при кросс-компиляции в musl? - PullRequest
2 голосов
/ 18 февраля 2020

Мои тесты документации не выполняются в моей среде Docker, пока все работает на хостах Windows и Ubuntu / Debian.

Я создал минимальный репозиторий Github для демонстрации проблема. Я попробовал две разные версии Rust nightly и Rust stable, debug / release, но все безуспешно. См. Мои Dockerfile и полный вывод сборки .

Пример кода:

/// Fixes string arrays which can also be objects into string arrays
/// # Examples
///
/// ```
/// assert_eq!(cargo_test_doc_docker::add(1, 2), 3);
/// ```
pub fn add(a: i32, b: i32) -> i32 {
    a + b
}

Результат при выполнении в Debian:

arturh@host:~/projects/cargo-test-doc-docker$ cargo test
   Compiling cargo-test-doc-docker v0.1.0 (/home/arturh/projects/cargo-test-doc-docker)
    Finished test [unoptimized + debuginfo] target(s) in 2.39s
     Running target/debug/deps/cargo_test_doc_docker-9d5ae146cd4c3628

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

     Running target/debug/deps/cargo_test_doc_docker-2a696d2579128ce1

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

   Doc-tests cargo-test-doc-docker

running 1 test
test src/lib.rs - add (line 4) ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

Проблема возникает при выполнении сборки на Docker. Это минимальный Dockerfile, который воспроизводит проблему:

FROM ekidd/rust-musl-builder:nightly-2020-01-26-openssl11 as build
COPY --chown=rust:rust . .
RUN cargo test; echo $?

Результат для каждого набора инструментов Rust, который я пробовал:

Step 6/17 : RUN cargo test; echo $?
 ---> Running in b266fc72f3c1
   Compiling cargo-test-doc-docker v0.1.0 (/home/rust/src)
    Finished test [unoptimized + debuginfo] target(s) in 0.32s
     Running target/x86_64-unknown-linux-musl/debug/deps/cargo_test_doc_docker-7b40e7e5b47f49eb

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

     Running target/x86_64-unknown-linux-musl/debug/deps/cargo_test_doc_docker-0bfec9752a7bec14

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

0

Он даже не пытается выполнить какие-либо тесты do c и выходит с нуля, так что это не так легко заметить. Я думаю, это должно быть что-то, что Docker базовое изображение делает, но что бы это могло быть?

Ответы [ 2 ]

2 голосов
/ 19 февраля 2020

Кросс-компиляция

Это логичный, если не удивительно, результат кросс-компиляции.

Чтобы понять почему, представьте, что вы:

  • Компиляция на Linux x64 машина (хост).
  • Цель Windows ARM машина.

Сгенерированный код не может быть выполнен на текущем хосте (Linux x64): он подготовлен для другого ЦП (набор команд) и ОС (системные вызовы).

Поскольку тесты - модульные тесты, интеграционные тесты и тесты документации - также создаются для целевой архитектуры, они не могут или на хосте.


Что делать с тестами?

Если ваш код не имеет специфической c зависимости от конкретной c платформы, то вы можете довольствуйтесь компиляцией для хоста и запустите их.

В противном случае вам потребуется доступ к машине, которая может фактически запускать кросс-скомпилированные двоичные файлы. Вы все еще можете использовать кросс-компиляцию, чтобы ускорить создание этих двоичных файлов, а затем загрузить их на физическую или виртуальную машину для их запуска.

AFAIK Автомобиль go не помогает с последними, поэтому вы ' Вам понадобятся ваши собственные скрипты.

0 голосов
/ 19 февраля 2020

Shepmaster был прав , когда я нацелился на x86_64-unknown- linux -musl, он также не работает локально в Debian:

arturh@host:~/projects/cargo-test-doc-docker$ cargo test --target=x86_64-unknown-linux-musl; echo $?
   Compiling cargo-test-doc-docker v0.1.0 (/home/arturh/projects/cargo-test-doc-docker)
    Finished test [unoptimized + debuginfo] target(s) in 0.28s
     Running target/x86_64-unknown-linux-musl/debug/deps/cargo_test_doc_docker-8dfff5631875d404

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

     Running target/x86_64-unknown-linux-musl/debug/deps/cargo_test_doc_docker-eb877250b708174b

running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out

0

Я думаю, у меня должен быть отдельный этап сборки для тестирования тестов do c с целью x86_64-unknown-linux-gnu.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...