#mocking #server #server-response #omaha #protocols #testing

bin+lib mock-omaha-server

Mock-Omaha-Server 是 Omaha 协议服务器端的模拟实现

4个版本 (2个破坏性更新)

新版本 0.3.1 2024年8月19日
0.3.0 2024年8月9日
0.2.0 2024年8月8日
0.1.1 2024年8月6日

#383 in HTTP服务器

Download history 246/week @ 2024-08-03 53/week @ 2024-08-10

每月299次下载

BSD-2-Clause OR Apache-2.0 OR MIT

585KB
12K SLoC

Mock-Omaha-Server

更新时间:2024-08

这是 Omaha 服务器协议的一部分实现,可用于开发基于 omaha-client 库 的应用程序。

操作模式

mock-omaha-server 在测试基于 omaha 客户端库的应用程序时充当对应方。它作为一个独立的 http 服务器,根据请求中的应用 ID 响应客户端请求。在启动模拟服务器时,可以使用 --responses_by_appid 参数通过命令行提供 JSON 结构。此结构包含应用 ID 到响应的映射,例如

{
    "appid_01": {
        "response": "NoUpdate",
        "merkle": "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
        "check_assertion": "UpdatesEnabled",
        "version": "0.1.2.3",
        "codebase": "fuchsia-pkg://omaha.mock.fuchsia.com/",
        "package_path": "update"
    },
    "appid_02": {
        ...
    },
    ...
}

main.rs 中提供了一个默认参数 EXAMPLE_RESPONSES_BY_APPID,如果命令行上没有提供映射,则使用该映射。

示例会话

代码设计为与 omaha-client 库的 "hello-world" 示例无缝工作。因此,在简单 git checkout omaha-client 库存储库 之后的源代码中,以下会话说明了如何与模拟服务器一起工作

$ git clone https://github.com/google/omaha-client.git
[... git clone progress ...]
$ cd omaha-client
$ cargo run
   Compiling omaha_client v0.2.0 (/path/to/omaha-client/omaha-client)
   Compiling mock-omaha-server v0.1.0 (/path/to/omaha-client/mock-omaha-server)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 14.59s
     Running `target/debug/mock-omaha-server`
listening on http://[::]:39205/

请注意,除非使用 --port 开关指定端口,否则它将由库从操作系统获取的任何可用端口选择。此时,模拟 Omaha 服务器正在等待请求,因此现在可以在第二个终端中启动 hello-world 示例,指定其输出中打印的模拟服务器 URL

$ cargo run --example hello-world -- -u http://[::]:39205
[...]
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.09s
     Running `target/debug/examples/hello-world -u 'http://[::]:39205'`
Event: ScheduleChange(
    UpdateCheckSchedule {
        last_update_time: None,
        next_update_time: 2024-08-05 09:23:41.527 UTC (1722849821.527518708) and No Monotonic wait: 100ms,
    },
)
[... after a few seconds ...]
Event: StateChange(
    CheckingForUpdates(
        ScheduledTask,
    ),
)
Event: OmahaServerResponse(
    Response {
        protocol_version: "3.0",

依赖项

~12–24MB
~380K SLoC