LTP (Linux Test Project)

最近、LTP というプロジェクトを知りました。

https://github.com/linux-test-project/ltp

LTP は、Linux カーネルにおけるシステムコール等の各種インターフェイス用テストプログラム/スクリプト郡です。

このプロジェクトを知ったきっかけは、process_vm_readv というシステムコールの使い方を調べている時でした。man ページだけではイマイチ使い方がわからなかったので、より具体的なサンプルプログラムを Web 上で探していたところ、運良く上記 github リポジトリを発見しました。

早速、手元に clone し、grep してみると、テストコードらしきソースファイルを発見出来ました。

% grep --col "process_vm_readv" **/*.[ch]
testcases/kernel/syscalls/cma/process_vm.h:static inline ssize_t test_process_vm_readv(pid_t pid,
testcases/kernel/syscalls/cma/process_vm.h:#if defined(__NR_process_vm_readv)
testcases/kernel/syscalls/cma/process_vm.h:	return syscall(__NR_process_vm_readv, pid, lvec, liovcnt,
testcases/kernel/syscalls/cma/process_vm01.c: * errno tests shared by process_vm_readv, process_vm_writev tests.
testcases/kernel/syscalls/cma/process_vm01.c:static char TCID_readv[] = "process_vm_readv";
...(省略)...


本質的なコード以外にも、テスト実施に付随したコードがあるため一部追いづらいところもありますが、実際に動作するコードなので、参考になります。

尚、ltp のビルド手順は以下のとおりです。

# apt-get intall automake (必要に応じて)
% make autotools
% ./configure
% make

上記で、testcases のソースコードと同じ位置に、テストプログラム本体が出力されます。(具体的な使い方などは、ソースコード上で確認するのが早いです。)

まとめ

Linux プログラミングの際、より具体的なサンプルプログラムがあると、理解がより深まるのですが、往々にして Web 上では断片的な情報が多く、運が悪いと見つからない場合もあり、徒労に終わることがよくありました。

ltp を参照すれば、少なくとも、まとまったサンプルプログラムが リストされているので、有用であると感じました。

尚、システムコール以外の kernel のテストや、テストシナリオなどもあるようなので、あとで追ってみようと思います。