#holochain #sandbox #directory #run #root-directory #conductor #holo

bin+lib holochain_cli_sandbox

一个库和 CLI 工具,用于帮助创建、运行和交互式使用沙箱化的 Holochain 导航环境,用于测试和开发目的。

184 次发布

0.4.0-dev.20 2024 年 8 月 23 日
0.4.0-dev.152024 年 7 月 31 日
0.3.0-beta-dev.422024 年 3 月 27 日
0.3.0-beta-dev.292022 年 12 月 22 日
0.0.3 Jul 29, 2021

#25魔法豆

Download history 138/week @ 2024-05-05 165/week @ 2024-05-12 139/week @ 2024-05-19 170/week @ 2024-05-26 346/week @ 2024-06-02 302/week @ 2024-06-09 143/week @ 2024-06-16 103/week @ 2024-06-23 205/week @ 2024-06-30 175/week @ 2024-07-07 331/week @ 2024-07-14 118/week @ 2024-07-21 742/week @ 2024-07-28 109/week @ 2024-08-04 208/week @ 2024-08-11 204/week @ 2024-08-18

1,271 每月下载
用于 2 crates

Apache-2.0AGPL-3.0 WITH mif-exception

3MB
26K SLoC

holochain_cli_sandbox

一个库和 CLI 工具,用于帮助创建、运行和交互式使用沙箱化的 Holochain 导航环境,用于测试和开发目的。

CLI

命令行工具 hc sandbox 可以轻松运行您正在开发或他人发送给您的小程序。它被设计为使用合理的默认设置,但在需要时也提供可配置性。沙箱默认存储在系统临时目录的子目录中,并在您生成沙箱时,其路径引用将保存在当前工作目录的 .hc 文件中。如果您希望将沙箱持久化到更永久的位置,您可以指定根目录和/或沙箱目录的名称。

安装

快速安装

按照Holochain开发者门户上的快速入门指南,安装所有Holochain开发工具,包括hc CLI和官方扩展。

通过Cargo安装

要求
构建

您可以通过crates.io安装hc-sandbox CLI工具

cargo install holochain_cli_sandbox

或者您也可以安装整个hc CLI工具,其中包含作为子命令的hc-sandbox

cargo install holochain_cli

以下示例假设您已安装了完整的hc而不是仅仅安装hc-sandbox

常见用法

最佳起点是

hc sandbox --help

这将比这个readme更更新

运行

此命令可用于生成和运行导体沙箱

hc sandbox run --help
# or shorter
hc sandbox r -h

生成

生成新的导体沙箱并将hApps安装到其中

在包含您的捆绑hApp的文件夹中(见关于hc-bundle命令的文档),您可以使用以下命令生成和运行一个新的沙箱:

hc sandbox generate
# or shorter
hc sandbox g

您还可以一次生成多个沙箱

hc sandbox generate --num-sandboxes 5

此命令将在您的系统临时目录中创建随机命名的目录,并将它们的路径存储在您当前工作目录中的.hc文件中。如果您之前已创建了沙箱,新沙箱的路径将被附加到.hc文件的末尾。请注意,如果您的系统定期清理其临时目录,路径可能最终指向不存在的沙箱。

您还可以使用--root选项(根目录必须事先存在)指定持久目录以在其中创建沙箱,以及使用--directories选项指定单个沙箱的目录名称。确保目录名称的数量与您尝试创建的沙箱数量相匹配;如果您没有指定足够的目录名称,其余的将被自动生成。

# a randomly named sandbox directory in the following directory
hc sandbox generate --root my-sandboxes/
# three explicitly named sandboxes in the system temp directory
hc sandbox generate --num-sandboxes 3 --directories alice,bob,carol

虽然这些目录对于创建测试固定值很有用,但它们在其他机器上以及在不同测试运行中的有用性有限,因为生成的导体配置具有机器相关的路径,并且数据库在每次运行时都会积累数据。

最后,您可以通过最后的network子命令指定沙箱将使用哪种网络传输类型来相互通信。

hc sandbox generate network quic

您还可以使用--run选项在同一个命令中生成和运行。传递给-r的参数是逗号分隔的端口号列表,用于绑定沙箱的应用程序API WebSocket,其中0表示应该自动选择端口号。再次提醒,确保端口号的数量与要运行的沙箱数量相匹配;如果没有指定足够的端口号,剩余的沙箱将不会运行。

hc sandbox generate --num-sandboxes 5 --run 0,9500,9501,0,0 ./elemental-chat.happ

作为一个完整的示例,这将在一个名为my-sandboxes的子目录中生成并运行五个命名沙箱,应用程序ID设置为my-app,使用当前目录中的elemental-chat.happ,并配置为使用localhost的QUIC网络。

当您当前工作目录中只有一个hApp时,您不需要指定hApp的文件名。

hc sandbox generate \
    --app-id "my-app" \
    --num-sandboxes 5 \
    --root my-sandboxes/ \
    --directories alice,bob,carol,dave,eve \
    --run 0,0,0,0,0 \
    ./elemental-chat.happ \
    network quic

创建

创建“空”的沙箱;即没有安装应用的沙箱。这可以用于测试通过管理员API控制导体的程序实现,例如应用程序启动器。大多数hc generate的选项也适用于hc create

hc sandbox create \
    --num-sandboxes 5 \
    --root my-sandboxes/ \
    --directories alice,bob,carol,dave,eve \
    --run 0,0,0,0,0 \
    network quic

调用

允许在一个或多个正在运行的沙箱上调用导体管理员API API。尽管API函数接收MessagePack序列化数据作为输入,但此命令允许您方便地以命令行参数的形式传递它们。要获取所有可用管理员API函数的列表,请运行

hc sandbox call --help
[... options and flags ...]
SUBCOMMANDS:
    add-admin-ws     Calls AdminRequest::AddAdminInterfaces and adds another admin interface
    add-agents       Calls AdminRequest::AddAgentInfo. _Unimplemented_
    add-app-ws       Calls AdminRequest::AttachAppInterface and adds another app interface
    disable-app      Calls AdminRequest::DisableApp and disables the installed app
    dump-state       Calls AdminRequest::DumpState and dumps the current cell's state. TODO: Add pretty print. TODO:
                     Default to dumping all cell state
    enable-app       Calls AdminRequest::EnableApp and activates the installed app
    help             Prints this message or the help of the given subcommand(s)
    install-app      Calls AdminRequest::InstallApp and installs a new app
    list-agents      Calls AdminRequest::RequestAgentInfo and pretty prints the agent info on this conductor
    list-app-ws      Calls AdminRequest::ListAppInterfaces
    list-apps        Calls AdminRequest::ListApps
    list-cells       Calls AdminRequest::ListCellIds
    list-dnas        Calls AdminRequest::ListDnas
    new-agent        Calls AdminRequest::GenerateAgentPubKey
    register-dna     Calls AdminRequest::RegisterDna and registers a Dna. You can only use a path or a hash not both
    uninstall-app    Calls AdminRequest::UninstallApp

有关函数输入参数的信息,请运行

hc sandbox call <api-function> --help
# for example:
hc sandbox call disable-app --help
hc-sandbox-call-disable-app 0.1.3
Calls AdminRequest::DisableApp and disables the installed app

USAGE:
    hc sandbox call disable-app <app-id>

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

ARGS:
    <app-id>    The InstalledAppId to disable

列出和清理

这些命令允许您列出当前目录(从.hc文件)中持久化的沙箱。您可以使用索引

hc sandbox list

输出

hc-sandbox:
Sandboxes contained in `.hc`
0: /tmp/KOXgKVLBVvoxe8iKD4iSS
1: /tmp/m8VHwwt93Uh-nF-vr6nf6
2: /tmp/t6adQomMLI5risj8K2Tsd

然后调用或运行单个沙箱(或子集)

hc sandbox r -i=0,2

您可以使用以下命令删除所有沙箱:

hc sandbox clean

这将删除当前工作目录中.hc文件中引用的沙箱目录,以及.hc文件本身。

此crate还可以用作库,以便您可以创建更复杂的沙箱/管理员调用。请参阅文档

cargo doc --open

和示例。

依赖项

77–115MB
~2M SLoC