第1四半期の今回の報告では「FreeBSD Test Suite」という取り組みについても説明がありました。「 FreeBSD Test Suite」はFreeBSDで動作するユーザランドのコマンドやライブラリが適切に動作するかどうかを包括的にテストするための仕組みであり、そのテストコードの集まりということになります。主にFreeBSDの開発者向けの機能で、開発中に取り込んだ変更でほかのソフトウェアへ影響が出ていないかどうかを自動的にチェックする仕組みとなります。FreeBSD Test SuiteのコードはHEADまたは最新のSTABLEに取り込まれています。リリースに含まれるのは10.1-RELEASEや11.0-RELEASE以降ということになります。
しかし、この機能はFreeBSDをエンタープライズユースで使う場合にも利用できる機能です。調達したハードウェアで適切にFreeBSDが動作するかどうか、負荷試験のみならずこのテストキットを実行することで動作状況を確認できます。運用前にこうしたチェックを実施しておくと、運用後に発生したトラブルがハードウェアによるものなのかソフトウェアによるものなのかの切り分けに役立つようになります。
FreeBSD Test Suiteを有効にするには/etc/src.confファイルに「WITH_TESTS=YES」という設定を追加してmake buildworld buildkernel && make installkernel installworldを実行する必要があります。テスト関連のコードは/usr/testにインストールされます。
図 /usr/tests以下にインストールされた統合試験環境
# tree /usr/tests | head -30
/usr/tests
|-- Kyuafile
|-- bin
| |-- Kyuafile
| |-- date
| | |-- Kyuafile
| | `-- legacy_test
| |-- mv
| | |-- Kyuafile
| | `-- legacy_test
| |-- pax
| | |-- Kyuafile
| | `-- legacy_test
| |-- pkill
| | |-- Kyuafile
| | |-- pgrep-F_test
| | |-- pgrep-LF_test
| | |-- pgrep-P_test
| | |-- pgrep-U_test
| | |-- pgrep-_g_test
| | |-- pgrep-_s_test
| | |-- pgrep-g_test
| | |-- pgrep-i_test
| | |-- pgrep-j_test
| | |-- pgrep-l_test
| | |-- pgrep-n_test
| | |-- pgrep-o_test
| | |-- pgrep-q_test
| | |-- pgrep-s_test
| | |-- pgrep-t_test
#
FreeBSD Test SuiteはKyuaおよびATFで開発されていますので、利用するには次のようにKyuaをインストールします。試験によってはPerlも使われるので、必要な場合はPerlもインストールしておいてください。
図 Kyuaをインストール
# pkg install -y kyua
Updating repository catalogue
The following 1 packages will be installed:
Installing kyua: 20140215,1
The installation will require 372 B more space
0 B to be downloaded
Checking integrity... done
[1/1] Installing kyua-20140215,1... done
#
/usr/tests/に移動して「kyua test」と実行すると試験が実行されます。執筆現在のFreeBSD Test Suiteに登録されているテストの数は500強ほどで、数分から数十分ほどで試験は完了します。試験にはこれまで/usr/src/tools/regression/に登録されていたものも取り込まれています。今後はFreeBSD Test Suiteで包括的に試験を実施することになりそうです。
図 試験の実行
# cd /usr/test/
# kyua test
bin/date/legacy_test:main -> passed [0.242s]
bin/mv/legacy_test:main -> passed [0.521s]
bin/pax/legacy_test:main -> skipped: Required program '/usr/local/bin/perl' not found [0.000s]
bin/pkill/pgrep-F_test:main -> passed [0.395s]
bin/pkill/pgrep-LF_test:main -> passed [0.703s]
bin/pkill/pgrep-P_test:main -> passed [0.457s]
bin/pkill/pgrep-U_test:main -> passed [0.844s]
bin/pkill/pgrep-_g_test:main -> passed [0.732s]
bin/pkill/pgrep-_s_test:main -> passed [0.147s]
bin/pkill/pgrep-g_test:main -> passed [1.032s]
…略…
usr.sbin/etcupdate/fbsdid_test:main -> passed [1.085s]
usr.sbin/etcupdate/ignore_test:main -> passed [0.555s]
usr.sbin/etcupdate/preworld_test:main -> passed [0.508s]
usr.sbin/etcupdate/tests_test:main -> passed [5.390s]
usr.sbin/etcupdate/tzsetup_test:main -> passed [1.085s]
usr.sbin/newsyslog/legacy_test:main -> passed [42.592s]
usr.sbin/sa/legacy_test:main -> passed [0.489s]
504/509 passed (5 failed)
Committed action 1
#
試験結果は次のようにreportサブコマンドで出力させます。
図 試験結果の報告
# kyua report
===> Skipped tests
bin/pax/legacy_test:main -> skipped: Required program '/usr/local/bin/perl' not found [0.000s]
lib/atf/libatf-c++/pkg_config_test:build -> skipped: Required program 'pkg-config' not found in PATH [0.000s]
lib/atf/libatf-c++/pkg_config_test:version -> skipped: Required program 'pkg-config' not found in PATH [0.000s]
lib/atf/libatf-c/pkg_config_test:build -> skipped: Required program 'pkg-config' not found in PATH [0.000s]
lib/atf/libatf-c/pkg_config_test:version -> skipped: Required program 'pkg-config' not found in PATH [0.000s]
sbin/growfs/legacy_test:main -> skipped: Required program '/usr/local/bin/perl' not found [0.000s]
sbin/ifconfig/fibs_test:process_fib -> skipped: Required configuration property 'fibs' not defined [0.000s]
sbin/mdconfig/legacy_test:main -> skipped: Required program '/usr/local/bin/perl' not found [0.000s]
sys/kern/kern_descrip_test:kern_maxfiles__increase -> skipped: Required configuration property 'allow_sysctl_side_effects' not defined [0.000s]
sys/netinet/fibs_test:arpresolve_checks_interface_fib -> skipped: Required configuration property 'fibs' not defined [0.000s]
sys/netinet/fibs_test:default_route_with_multiple_fibs_on_same_subnet -> skipped: Required configuration property 'fibs' not defined [0.000s]
sys/netinet/fibs_test:loopback_and_network_routes_on_nondefault_fib -> skipped: Required configuration property 'fibs' not defined [0.000s]
sys/netinet/fibs_test:src_addr_selection_by_subnet -> skipped: Required configuration property 'fibs' not defined [0.000s]
sys/netinet/fibs_test:subnet_route_with_multiple_fibs_on_same_subnet -> skipped: Required configuration property 'fibs' not defined [0.000s]
===> Failed tests
bin/pkill/pgrep-j_test:main -> failed: 3 tests of 3 failed [6.632s]
bin/pkill/pkill-j_test:main -> failed: 1 tests of 3 failed [7.437s]
lib/atf/libatf-c/macros_test:use -> failed: Build of macros_h_test.c failed; some macros in atf-c/macros.h are broken [1.016s]
usr.bin/sed/multi_test:main -> failed: 1 tests of 129 failed [1.392s]
usr.bin/yacc/legacy_test:main -> failed: 15 tests of 15 failed [1.368s]
===> Summary
Action: 1
Test cases: 509 total, 14 skipped, 0 expected failures, 0 broken, 5 failed
Total time: 202.259s
# pkg-config
pkg-config: not found
#
report-htmlサブコマンドを使うとHTMLとして試験結果を出力させることもできます。
図 試験結果の報告(HTML)
# kyua report-html --output out
Generating out/context.html
Generating out/bin_pax_legacy_test_main.html
Generating out/bin_pkill_pgrep-j_test_main.html
Generating out/bin_pkill_pkill-j_test_main.html
Generating out/lib_atf_libatf-c++_pkg_config_test_build.html
Generating out/lib_atf_libatf-c++_pkg_config_test_version.html
Generating out/lib_atf_libatf-c_macros_test_use.html
Generating out/lib_atf_libatf-c_pkg_config_test_build.html
Generating out/lib_atf_libatf-c_pkg_config_test_version.html
Generating out/sbin_growfs_legacy_test_main.html
Generating out/sbin_ifconfig_fibs_test_process_fib.html
Generating out/sbin_mdconfig_legacy_test_main.html
Generating out/sys_kern_kern_descrip_test_kern_maxfiles__increase.html
Generating out/sys_netinet_fibs_test_arpresolve_checks_interface_fib.html
Generating out/sys_netinet_fibs_test_default_route_with_multiple_fibs_on_same_subnet.html
Generating out/sys_netinet_fibs_test_loopback_and_network_routes_on_nondefault_fib.html
Generating out/sys_netinet_fibs_test_src_addr_selection_by_subnet.html
Generating out/sys_netinet_fibs_test_subnet_route_with_multiple_fibs_on_same_subnet.html
Generating out/usr.bin_sed_multi_test_main.html
Generating out/usr.bin_yacc_legacy_test_main.html
Generating out/report.css
Generating out/index.html
#
図 試験結果報告 HTMLの例その1
図 試験結果報告 HTMLの例その2
Jenkinsによる継続的自動ビルドシステムの構築、FreeBSD Test Suiteによる継続的自動試験システムの構築、libvirt対応によるクラウド管理ソフトウェアとの連携、オペレーティングシステム管理ソフトウェアとの連動など、ここ最近のFreeBSDプロジェクトの取り組みはよりエンタープライズレベルでの用途向けの開発が活発です。この傾向は今後も継続するものとみられます。