跳到主要内容

运行单元测试

直接在操作系统中编译 Kmesh 需要特定的 OS 版本。因此,为了让所有操作系统都能运行 Kmesh 的单元测试(UT),Kmesh 提供了两种方法。一种是在 Docker 中运行 Go 单元测试,另一种是在本地运行 Go 单元测试。

不支持的内核版本的开发者可以通过脚本在 Docker 中运行 Go 单元测试。支持版本的开发者可以通过脚本在本地运行 Go 单元测试。

cd $(Kmesh root directory)

# 通过 Docker 运行 Kmesh 单元测试
./hack/run-ut.sh --docker

# 在本地运行 Kmesh 单元测试
./hack/run-ut.sh --local

或者,您可以通过 make test 执行测试:

# 通过 Docker 运行 Kmesh 单元测试
make test RUN_IN_CONTAINER=1

# 在本地运行 Kmesh 单元测试
make test RUN_IN_CONTAINER=0

单元测试

本节描述 Kmesh 的单元测试设置,以便开发人员可以不使用脚本运行单元测试。

由于 Kmesh 使用 eBPF,您在运行与 Kmesh 相关的单元测试时需要设置一些环境变量。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib:$ROOT_DIR/api/v2-c:$ROOT_DIR/bpf/deserialization_to_bpf_map
export PKG_CONFIG_PATH=$ROOT_DIR/mk

设置 LD_LIBRARY_PATH 以便系统可以找到 .so 文件。

设置 PKG_CONFIG_PATH 以便系统可以找到 Kmesh 编译的 .pc 文件。

除此之外,您还可能遇到 C 头文件未找到的错误。可以通过设置 C_INCLUDE_PATH 来解决此类错误。Kmesh 所需的头文件保存在 bpf 文件夹中。

注意 多个头文件 问题。

除了上述问题,由于 Kmesh 单元测试使用 gomonkey,在 Go 编译优化过程中可能会出现 monkey 的函数被内联的情况。

我们可以通过在 go test 执行时添加以下参数来解决这个问题:

-gcflags="all=-N -l"