#applications #podman #docker-build #helper #file-path #testing #run

docker-test

一个小型辅助库,用于在 Docker(podman)中构建和运行 Rust 应用程序

7 个不稳定版本 (3 个破坏性更新)

0.5.0 2023年5月17日
0.4.0 2023年4月30日
0.2.0 2022年10月29日
0.1.3 2022年1月18日

#502 in Unix APIs

MPL-2.0 许可证

11KB
193 代码行数,不包括注释

Docker 测试辅助工具

这是一个小型辅助库,用于在 Docker 容器(实际上使用 podman)中构建和运行 Rust 应用程序。其主要用途是测试需要特定文件路径或权限的应用程序,这些路径或权限在本地开发机上执行可能不合适(例如,将 chmod 设置为 root 或启用 setuid)。

目前它主要用于我的特定用例,但可能对其他人也有帮助。

功能标志

  • docker: 使用 docker 而不是 podman

示例

use docker_test::{build::build_image_sync, util::build_and_deploy};

fn build_test_image() -> String {
    let dir = "tests/custom-container";
    let name = "docker-test-self-test-image";
    build_image_sync(dir, name).unwrap()
}

#[test]
fn is_root() {
    let image_name = build_test_image();
    let (container, bin) = build_and_deploy(
        "testproj",
        Some("tests/testproj"),
        None,
        image_name.as_str(),
    )
    .unwrap();
    let out = container.exec(vec![bin.as_str(), "--help"]).unwrap();
    let stdout = String::from_utf8(out.stdout).unwrap();
    assert!(out.status.success());
    assert!(stdout.contains("Hello, docker! My UID is [0]"));
}

#[test]
fn not_root() {
    let image_name = build_test_image();
    let (container, bin) = build_and_deploy(
        "testproj",
        Some("tests/testproj"),
        None,
        image_name.as_str(),
    )
    .unwrap();
    let out = container
        .exec_as("nobody", vec![bin.as_str(), "--help"])
        .unwrap();
    let stdout = String::from_utf8(out.stdout).unwrap();
    assert!(out.status.success());
    assert!(stdout.contains("Hello, docker! My UID is [65534]"));
}

#[test]
fn stock_image() {
    let image_name = "docker.io/rust:1.64.0-slim-bullseye";
    let (container, bin) = build_and_deploy(
        "testproj",
        Some("tests/testproj"),
        None,
        image_name,
    )
    .unwrap();
    let out = container
        .exec_as("nobody", vec![bin.as_str(), "--help"])
        .unwrap();
    let stdout = String::from_utf8(out.stdout).unwrap();
    assert!(out.status.success());
    assert!(stdout.contains("Hello, docker! My UID is [65534]"));
}

依赖项

~2.1–7.5MB
~41K SLoC