6 个版本

0.2.4 2024 年 8 月 13 日
0.2.3 2024 年 6 月 10 日
0.2.2 2023 年 6 月 10 日
0.2.1 2023 年 3 月 8 日
0.1.0 2022 年 6 月 11 日

#80测试

Download history 141/week @ 2024-06-10 2/week @ 2024-06-17 3/week @ 2024-07-08 4/week @ 2024-07-22 124/week @ 2024-08-12

每月 128 次下载

MIT 许可证

98KB
2K SLoC

avr-tester — crates-badge docs-badge

AVR 微控制器固件的功能测试框架,由 simavr 提供。

简单来说,几秒钟内对你的微控制器固件进行黑盒测试!

入门指南

为你的项目测试创建一个专属的 crate

$ cargo new yourproject-tests --lib

... 将 avr-tester 添加为其依赖项

# yourproject-tests/Cargo.toml

[dependencies]
avr-tester = "0.2"

... 然后,就像这样,开始编写测试

// yourproject-tests/src/lib.rs

use avr_tester::*;

fn avr() -> AvrTester {
    AvrTester::atmega328p()
        .with_clock_of_16_mhz()
        .load("../../yourproject/target/atmega328p/release/yourproject.elf")
}

// Assuming `yourproject` implements a ROT-13 encoder:

#[test]
fn short_text() {
    let mut avr = avr();

    // Let's give our firmware a moment to initialize:
    avr.run_for_ms(1);

    // Now, let's send the string:
    avr.uart0().write("Hello, World!");

    // ... give the AVR a moment to retrieve it & send back, encoded:
    avr.run_for_ms(1);

    // ... and, finally, let's assert the outcome:
    assert_eq!("Uryyb, Jbeyq!", avr.uart0().read::<String>());
}

#[test]
fn long_text() {
    let mut avr = avr();

    avr.run_for_ms(1);
    avr.uart0().write("Lorem ipsum dolor sit amet, consectetur adipiscing elit");
    avr.run_for_ms(10);

    assert_eq!(
        "Yberz vcfhz qbybe fvg nzrg, pbafrpgrghe nqvcvfpvat ryvg",
        avr.uart0().read::<String>(),
    );
}

... 测试完成后,只需在 yourproject-tests 内运行 cargo test :-)

请注意,由于 AvrTester 模拟实际的 AVR,你不需要对 yourproject 进行任何修改 - 它可以使用定时器、GPIO 等等,一切应该都能正常工作™。

实际上,yourproject 甚至不需要用 Rust 编写 - 你可以为用 C、Zig 或其他任何语言编写的固件创建基于 Rust 的测试!

示例

需求与支持的平台

见:simavr-ffi

路线图

以下功能似乎由 simavr 支持,但尚未在 AvrTester 中公开

(你的固件可以使用这些功能,但你将无法测试它们。)

注意事项

  • 触发 AVR 的睡眠模式将导致 Rust 代码恐慌,因为唤醒 AVR 的唯一方法是触发中断,而这些功能目前还不支持。

贡献

欢迎拉取请求!

测试

AvrTester 的集成测试位于 avr-tester/tests - 你可以使用以下命令运行它们

$ cd avr-tester
$ cargo test

请注意,为了使这些测试正常工作,你可能需要一些额外的依赖项

... 在 Nix(Linux / MacOS)上

$ nix-shell
# and then `cargo test`

... 在 Ubuntu 上

$ sudo apt install avr-libc gcc-avr
# and then `cargo test`

许可证

版权所有 (c) 2022 Patryk Wychowaniec [email protected].
遵循 MIT 许可协议。

依赖项

~3.5–6MB
~63K SLoC