Files
mckernel/test/issues/1021
Tomoki Shirasawa 895a8c4099 procfs: Support multiple reads of e.g. /proc/*/maps
Refs: #1021
Change-Id: If36e1a0f3f41f0215868daf578e96775d96a59a3
2018-08-30 01:48:06 +00:00
..

【Issue#1021 動作確認】
□ テスト内容
1. procfs ファイルに対するファイルオペレーションのテスト
Issue#1021 の対応において、procfs の以下のファイル処理を変更している。
  /proc/stat
  /proc/pid/auxv
  /proc/pid/cmdline
  /proc/pid/maps
  /proc/pid/status
  /proc/pid/task/tid/stat

これらのファイルに対するファイルオペレーションとして、以下をテストする。
1) ファイルをopen(2)できること。
2) ファイルディスクリプタをdup(2)できること。
3) 1バイト単位にファイル終端までread(2)できること。
4) lseek(2) できること。(※2)
5) lseek(2) 後に、1024バイト単位に read(2) できること。最初の read(2)と内容が
     一致していること。
6) close(2) できること。
7) dup(2) したファイルディスクリプタが EOF になっていること (5 の read(2) の
   影響)。
8) dup(2) したファイルディスクリプタを lseek(2) できること。
9) dup(2) したファイルディスクリプタを read(2) し、ファイル全体を 1 回の read(2)
   で読み込むことができること。また、最初の read(2) と内容が一致していること。
10) dup(2) したファイルを close(2) できること。

テストケースは以下の通りである。
C1021T01-C1021T10 /proc/stat に対する上記 1) - 10) のテスト
C1021T11-C1021T20 /proc/pid/auxv に対する上記 1) - 10) のテスト
C1021T21-C1021T30 /proc/pid/cmdline に対する上記 1) - 10) のテスト
C1021T31-C1021T40 /proc/pid/maps に対する上記 1) - 10) のテスト (※1, ※2)
C1021T41-C1021T50 /proc/pid/status に対する上記 1) - 10) のテスト
C1021T51-C1021T60 /proc/pid/rask/tid/stat に対する上記 1) - 10) のテスト

※1 /proc/pid/maps はユーザプログラムのメモリの使い方により非常に大きなファイル
    になることがあるので、予め mmap を複数回行って4kB以上の read が発生するよう
    にしておく。(McKernel 内のバッファが複数ページになる場合のテストを兼ねる)。

※2 /proc/pid/maps の読み込み中に情報が変化しても後続の read(2) に影響しない
    ことを確認するため、/proc/pid/maps の lseek(2) 後に munmap(2) を行い、
    McKernel の内部情報を変化させる。(後続の read(2) では、munmap 前の情報を
    読み込む仕様)。

2. メモリリークが発生していないことの確認
C1021T61 kmemleak を用いて mcctrl の procfs 処理がメモリリークを起こして
         いないことを確認する。

□ 実行手順
$ make test

実行できない場合は、C1021.shの以下の行を適切に書き換えた後に実行。
BIN=          mcexec が存在するパス
SBIN=         mcreboot.sh が存在するパス
LTP=          LTP が存在するパス

□ 実行結果
C1021.txt 参照。
全ての項目が OK となっていることを確認。