训练营学员

傲来操作系统训练营报告

在ARM平台对stratovirt和grafana进行测试

林圣杰 发布于 # 2024 年第一期

1. stratovirt

源码仓库位于stratovirt

在仓库中,测试文件位于tests/目录下,分为hydroppermod_test两部分,各自的测试文件位于各自目录的tests/目录下。

Cargo会在tests目录下查找集成测试文件,进行集成测试时需要进入hydroppermod_test目录,执行相应cargo test命令。

1.0 自动化脚本

自动测试脚本为autest_stratovirt.sh,已经提交到 gitee 上,地址为autest_stratovirt.sh,通过脚本完成日志目录创建、源码下载、构建、进行测试、保存测试结果。

  • 执行结果

    • 将控制台输出保存到文件中
    • 修改performance_counter_920.sh脚本,将perf执行的相关结果以markdown的表格格式保存下来
  • 小问题

    • 构建stratovirt时,需要以超级用户权限执行make build
    • 要手动执行Makefile中目标build的命令cargo build --workspace --bins --release
    • 要手动设置环境变量STRATOVIRT_BINARY为构建得到的stratovirt可执行文件路径

1.1 mod_test

目前进行集成测试,收集的是单个rs文件的测试信息,文件位于stratovirt/tests/mod_test/tests中,每个rs文件包含若干测试函数。

Test NameStatusRun Details
balloon_test2 passed; 13 failedeline366 ; Failed to open /dev/kvm: Error(13)
block_test0 passed; 21 failedeline366 ; Failed to open /dev/kvm: Error(13)
fwcfg_test0 passed; 15 failedeline366 ; Failed to open /dev/kvm: Error(13)
memory_test0 passed; 14 failedeline366 ; Failed to open /dev/kvm: Error(13)
net_test0 passed; 14 failedeA
pci_test0 passed; 40 failedeline366 ; Failed to open /dev/kvm: Error(13)
pvpanic_test0 passed; 3 failedeline366; Failed to open /dev/kvm: Error(13)
rng_test0 passed; 5 failedeline366 ; Failed to open /dev/kvm: Error(13)
scream_test0 passed; 4 failedeline366 ; Failed to open /dev/kvm: Error(13)
scsi_test0 passed; 14 failedeline 116
serial_test0 passed; 7 failedeline366 ; Failed to open /dev/kvm: Error(13)
usb_camera_test0 passed; 8 failedeline366; Found argument ‘-cameradev’ which wasn’t expected, or isn’t valid in the context. ; Failed to open log file /var/log/mst.log
usb_storage_test0 passed; 15 failedeline366 ; Permission denied (os error 13) Failed to open log file /var/log/mst.log
usb_test0 passed; 43 failedeline366 ; Permission denied (os error 13) Failed to open log file /var/log/mst.log
virtio_gpu_test0 passed; 12 failedeline366
virtio_test0 passed; 28 failedeline366 ; Failed to open /dev/kvm: Error(13)
virtiofs_test0 passed; 25 failedeB
vnc_test0 passed; 9 failedeline366 ; Found argument ‘-vnc’ which wasn’t expected, or isn’t valid in the context.

报错原因及初步分析:

  • 基本上所有测试都fail了
  • eline366: panicked at tests/mod_test/src/libtest.rs:366:82:called Option::unwrap() on a None value
    • 大多因为Failed to open /dev/kvm;同时ARM平台上有/dev/kvm,或许因为没有权限。
    • 在usb的相关测试上遇到的是 os error
  • eA: panicked at tests/mod_test/tests/net_test.rs:349:9:assertion failed: output.status.success()
  • eline 116: panicked at tests/mod_test/src/utils.rs:116:5:assertion failed: output.status.success()
  • eB: panicked at tests/mod_test/tests/virtiofs_test.rs:236:56:called Result::unwrap() on an Err value: NotPresent

1.2 hydropper

遵循README, 只在ARM平台上安装了相关软件包。


2. grafana

源码仓库位于grafana

2.0 自动化脚本

自动测试脚本为autest_grafana.sh,已经提交到 gitee 上,地址为autest_grafana.sh,通过脚本完成日志目录创建、源码下载、构建、进行测试、保存测试结果。

2.1 Run frontend tests

测试命令为yarn test --watchAll

Test Suites: 1 failed, 1 skipped, 1377 passed, 1378 of 1379 total
Tests:       1 failed, 31 skipped, 12970 passed, 13002 total
Snapshots:   366 passed, 366 total
Time:        127.971 s, estimated 133 s
Ran all test suites.

2.2 Run backend tests

在包列表模式下进行测试,对pkg/目录下的包进行测试,该目录包含grafana的后端代码。

  • 每个包的perf执行结果以markdown表格的格式保存在文件table_grafana_backend.md

  • 测试项信息如下

Test NameStatusRun Details
apiok2.693s coverage: 46.7% of statements
busok0.028s coverage: 81.5% of statements
codegenok0.013s coverage: 13.0% of statements
exprok0.205s coverage: 60.3% of statements
middlewareok0.104s coverage: 61.7% of statements
pluginsok0.030s coverage: 33.8% of statements
promlibok0.021s coverage: 60.3% of statements
serverFAIL0.237s coverage: 5.7% of statements
settingok4.102s coverage: 80.6% of statements
utilok0.463s coverage: 63.1% of statements
webok0.007s coverage: 14.1% of statements

收集到每个包的所有测试项的测试信息,之后应当对这些测试项信息进行提取。

2.3 Run SQLite, PostgreSQL and MySQL integration tests

在包列表模式下进行测试。

  • 每个包的perf执行结果以markdown表格的格式保存在文件table_grafana_sql.md

  • 测试项信息如下

Test NameStatusRun Details
apiok2.655s coverage: 46.7% of statements
busok0.030s coverage: 81.5% of statements
codegenok0.015s coverage: 13.0% of statements
exprok0.196s coverage: 60.3% of statements
middlewareok0.109s coverage: 61.7% of statements
pluginsok0.027s coverage: 33.8% of statements
promlibok0.018s coverage: 60.3% of statements
serverFAIL0.231s coverage: 5.7% of statements
settingok3.233s coverage: 80.6% of statements
utilok0.756s coverage: 63.1% of statements
webok0.007s coverage: 14.1% of statements

收集到每个包的所有测试项的测试信息,之后应当对这些测试项信息进行提取。

2.4 Run end-to-end tests

测试命令为yarn e2e

  • 问题

    • 缺少Xvfb依赖, 于是sudo dnf install xorg-x11-server-Xvfb -y
    • 未解决:

    执行yarn e2e, 报错

    Can't run because you've entered an invalid browser name.
    Browser: chrome was not found on your system or is not supported by Cypress.
    Cypress supports the following browsers:
    - electron
    - chrome
    - chromium
    - chrome:canary
    - edge
    - firefox
    You can also use a custom browser: https://on.cypress.io/customize-browsers
    Available browsers found on your system are:
    - electron
    

    执行yarn e2e electron, 报错

    An invalid configuration value was set.
    Expected video to be a boolean.
    Instead the value was:
    

下一步

  • 在ARM平台上继续完成测试,对更细粒度的测试项进行提取,进一步分析失败测试项
  • 待RISC-V平台开放,完成相关测试
  • 学习perf命令、cargo和go的相关测试命令