#fastly #compute #local #daemon #service #machine

app viceroy

维多利亚是 Fastly Compute 的本地测试守护程序

44 个版本

新版本 0.11.0 2024 年 8 月 20 日
0.10.2 2024 年 7 月 22 日
0.9.7 2024 年 5 月 24 日
0.9.5 2024 年 3 月 15 日
0.1.0 2020 年 8 月 24 日

#25 in WebAssembly

Download history 51/week @ 2024-04-29 73/week @ 2024-05-06 62/week @ 2024-05-13 209/week @ 2024-05-20 51/week @ 2024-05-27 62/week @ 2024-06-03 65/week @ 2024-06-10 41/week @ 2024-06-17 47/week @ 2024-06-24 90/week @ 2024-07-01 155/week @ 2024-07-08 47/week @ 2024-07-15 229/week @ 2024-07-22 93/week @ 2024-07-29 62/week @ 2024-08-05 82/week @ 2024-08-12

467 每月下载量

Apache-2.0 WITH LLVM-exception

545KB
12K SLoC

维多利亚

维多利亚为与 Fastly Compute 一起工作的开发者提供本地测试。它允许您在本地开发机器上运行针对 Compute API 编写的服务,并允许您配置测试后端以与您的服务通信。

通常通过 Fastly CLI 使用维多利亚,其中它完全集成到 Compute 工作流程中。然而,它也是一个具有自己的 CLI 和可以嵌入到您自己的测试基础设施中的 Rust 库的独立开源工具。

安装

通过 Fastly CLI

如上所述,Compute 的大多数用户应通过 Fastly CLI 进行本地测试,而不是直接与维多利亚一起工作。任何版本 0.34 或以上版本的 CLI 版本 都支持本地测试,工作流程在此 文档化。

作为从 crates.io 的独立工具

要将维多利亚作为独立工具安装,您需要首先安装 Rust(如果您还没有安装)。然后运行 cargo install viceroy,这将下载并构建最新的维多利亚版本。

作为库的使用

可以将其用作 Rust 库。如果您想在同一个代码库中运行集成测试,这将非常有用。我们提供了一个辅助方法 handle_request。在构建或测试您的代码之前,我们建议设置发布标志,例如 cargo test --release 否则,执行将会非常慢。这与 Cranelift 编译器有关,它在调试模式下编译时非常慢。此外,如果您使用 GitHub Actions,别忘了为 Rust 设置一个构建 缓存。这将大大加快您的构建时间。

作为独立工具的使用

注意:Viceroy 独立 CLI 的界面与 Fastly CLI 有所不同。下面的命令行选项描述了独立 Viceroy 界面。

安装后,应可在您的路径上找到 viceroy 命令。唯一的必需参数是编译好的 .wasm 块的路径,可以通过 fastly compute build 构建。Fastly CLI 应将块放在 bin/main.wasm。要测试服务,您可以运行

viceroy bin/main.wasm

这将在默认情况下在 http://127.0.0.1:7676 启动一个本地服务器),可用于对您的 Compute 服务进行本地请求。您可以使用 curl 发送请求,或者您可以通过访问网页浏览器中的 URL 发送简单的 GET 请求。

作为测试运行器的使用

还可以将 Viceroy 用作测试运行器,以以下方式运行 Compute 应用程序的 Rust 单元测试

  1. 确保 viceroy 命令可在您的路径中可用
  2. 将以下内容添加到项目 .cargo/config 文件中
[build]
target = "wasm32-wasi"

[target.wasm32-wasi]
runner = "viceroy run -C fastly.toml -- "
  1. 安装 cargo-nextest
  2. 编写使用 fastly crate 的测试。例如
#[test]
fn test_using_client_request() {
    let client_req = fastly::Request::from_client();
    assert_eq!(client_req.get_method(), Method::GET);
    assert_eq!(client_req.get_path(), "/");
}

#[test]
fn test_using_bodies() {
    let mut body1 = fastly::Body::new();
    body1.write_str("hello, ");
    let mut body2 = fastly::Body::new();
    body2.write_str("Viceroy!");
    body1.append(body2);
    let appended_str = body1.into_string();
    assert_eq!(appended_str, "hello, Viceroy!");
}

#[test]
fn test_a_handler_with_fastly_types() {
    let req = fastly::Request::get("http://example.com/Viceroy");
    let resp = some_handler(req).expect("request succeeds");
    assert_eq!(resp.get_content_type(), Some(TEXT_PLAIN_UTF_8));
    assert_eq!(resp.into_body_str(), "hello, /Viceroy!");
}
  1. 使用 cargo nextest run 运行您的测试
 % cargo nextest run
   Compiling unit-tests-test v0.1.0
    Finished test [unoptimized + debuginfo] target(s) in 1.16s
    Starting 3 tests across 1 binaries
        PASS [   2.106s] unit-tests-test::bin/unit-tests-test tests::test_a_handler_with_fastly_types
        PASS [   2.225s] unit-tests-test::bin/unit-tests-test tests::test_using_bodies
        PASS [   2.223s] unit-tests-test::bin/unit-tests-test tests::test_using_client_request
------------
     Summary [   2.230s] 3 tests run: 3 passed, 0 skipped

需要 cargo-nextest 而不是仅仅使用 cargo test 的原因是为了允许在任一其他测试失败的情况下继续执行测试。在 wasm 中无法从恐慌中恢复,因此一旦出现第一个测试失败,测试执行就会停止。因此,我们需要在每个 wasm 实例中执行每个测试,并将结果汇总以报告总体成功/失败。cargo-nextest 为我们处理那个编排

文档

由于 Fastly CLI 在底层使用 Viceroy,两者除了 CLI 差异之外,其他所有内容都共享文档。您可以在 此处 找到有关本地测试的一般文档,以及有关配置本地测试的文档 此处。有关 Viceroy CLI 的文档可以通过 --help 查看。

扉页

Viceroy

viceroy 是一种蝴蝶,其颜色和图案模仿君主蝴蝶,但体型较小。

依赖关系

~62MB
~1M SLoC