| ============================================================================== | |
| PARTED REGRESSION TEST HOWTO | |
| ============================================================================== | |
| by Andrew Clausen | |
| Copyright (C) 2002 Free Software Foundation, Inc. | |
| This document may be distributed and/or modified | |
| without restriction | |
| CONTENTS | |
| -------- | |
| 1 Introduction | |
| 2 What you need | |
| 3 Setting up testrc | |
| 4 Running the tests | |
| 5 How the tests work | |
| ------------------------------------------------------------------------------ | |
| 1 INTRODUCTION | |
| ------------------------------------------------------------------------------ | |
| This document describes how to safely configure and run the GNU Parted | |
| regression tests. | |
| Regression tests are a set of "test cases" (or program inputs, whatever), | |
| that have a well defined "correct" and "broken". The idea is to run | |
| regression tests after making changes, to check you didn't break anything. | |
| They are also useful for testing Parted in a new environment... perhaps | |
| you're computer has something peculiar that breaks it. | |
| Therefore, it's helpful for you to run Parted regression tests. | |
| ------------------------------------------------------------------------------ | |
| 2 WHAT YOU NEED | |
| ------------------------------------------------------------------------------ | |
| You need: | |
| * a spare hard drive (for GNU/Linux... haven't tried GNU/Hurd) | |
| This is because only gendisk block devices can have partition tables. | |
| * msdos partition table support in the kernel (for Linux). (FIXME: can | |
| use our shiny new partprobe!) | |
| * file system support for ext2 and fat | |
| * a reasonably standard GNU system, with diff(1), bash(1), e2fsck(8), | |
| dosfsck(8), etc. | |
| * parted, compiled in it's source directory. i.e. ./configure && make | |
| * a test data source, between 100 and 150 Mb, that contains all | |
| lower-case filenames, and no symlinks. It must have a significant | |
| (i.e. at least 5%) amount of data in a subdirectory. | |
| You can convert filenames to lowercase with: | |
| cd /data-source | |
| echo 'mv $1 $( echo $1 | tr A-Z a-z )' > tolower | |
| chmod a+x tolower | |
| find | grep [A-Z] | xargs -l1 ./tolower | |
| rm tolower | |
| (Hint: if you don't trust me, stick an "echo" before mv, and | |
| it'll print out what it's going to do ;) | |
| ------------------------------------------------------------------------------ | |
| 3 SETTING UP TESTRC | |
| ------------------------------------------------------------------------------ | |
| The testrc must be configured for your system. The tests will refuse | |
| to run if you don't. I'll work from top-to-bottom, describing how | |
| to fill in each value: | |
| 3.1 TEST_HOST | |
| ----------------- | |
| This field must match the output of hostname(1). This is just a safety | |
| check, so you don't use the wrong testrc file, and destroy the wrong | |
| data ;) | |
| Example: | |
| TEST_HOST=mirkwood | |
| 3.2 TEST_PARTED_BASE | |
| ------------------------ | |
| This is the directory where you untarred and compiled parted: | |
| Example: | |
| TEST_PARTED_BASE=~clausen/parted-1.4.20 | |
| 3.3 TEST_PARTED_COMMAND | |
| --------------------------- | |
| You shouldn't need to change this. It's just where to find parted. | |
| Example: | |
| TEST_PARTED_COMMAND=$TEST_PARTED_BASE/parted/parted | |
| 3.4 TEST_PARTED_CLEARFAT | |
| ---------------------------- | |
| You shouldn't need to change this. It's just where to find clearfat, | |
| a special tool to help test Parted's fat code. All it does is zero | |
| out unused (meta)data. (There were cases in the past where stale | |
| metadata was making it appear that parted was working, when it wasn't) | |
| Example: | |
| TEST_PARTED_CLEARFAT=$TEST_PARTED_BASE/debug/clearfat/clearfat | |
| 3.5 TEST_DRIVE | |
| ------------------ | |
| The drive to be completely clobbered! i.e. where testing will occur. | |
| Needless to say, I hope you don't have anything important there. | |
| Example: | |
| Example: | |
| TEST_DRIVE=/dev/hdc | |
| 3.6 TEST_DRIVE | |
| ------------------ | |
| The size of the disk, in megabytes, excluding the fractional part (decimal | |
| point). You can get this from Parted's print output. (Geometry of | |
| /dev/hdc is 0.0-*THIS IS IT*). | |
| Example: | |
| TEST_DRIVE_SIZE=8063 | |
| 3.7 TEST_MOUNT_POINT | |
| ------------------------ | |
| A mount point that the tests can use, to mount $TEST_DRIVE. Obviously, you | |
| need to create it with mkdir(1). | |
| Example: | |
| TEST_MOUNT_POINT=/mnt/test | |
| 3.8 TEST_DATA | |
| ----------------- | |
| Where to get test data from. See advice in section 2 for requirements | |
| on the test data. | |
| Example: | |
| TEST_DATA=/var/www | |
| 3.9 TEST_DATA_HOLE | |
| ---------------------- | |
| A directory inside $TEST_DATA, that will be deleted to create some | |
| fragmentation. It should be at least 5% and at most 80% of the | |
| test data. | |
| Example: | |
| TEST_DATA_HOLE=icons | |
| 3.10 TEST_FS_USE_DISK_LABEL | |
| ------------------------------ | |
| Which disk label to use for testing file systems. At the moment, only | |
| msdos is supported/tested, although most should work. | |
| Example: | |
| TEST_FS_USE_DISK_LABEL=msdos | |
| 3.11 QUIET_KERNEL | |
| -------------------- | |
| Set to 1 if you want to shut up the kernel's annoying messages | |
| Example: | |
| QUIET_KERNEL=1 | |
| 3.12 VERBOSE_LOGS | |
| -------------------- | |
| Set to 1 if you want logging of everything, including successful tests. | |
| Example: | |
| VERBOSE_LOGS=1 | |
| 3.13 MALLOC_TRACE | |
| -------------------- | |
| Uncomment this if you want to do malloc() debugging with mtrace. | |
| TODO: document this. | |
| ------------------------------------------------------------------------------ | |
| 4 RUNNING THE TESTS | |
| ------------------------------------------------------------------------------ | |
| 4.1 Starting the tests | |
| -------------------------- | |
| To run the tests, you must be root. To run all tests, type: | |
| ./test | |
| To run a subset of tests, you can type part of the file name of | |
| those tests. For example, to run all partition table tests, type: | |
| ./test disk | |
| Or the FAT tests: | |
| ./test fat | |
| 4.2 Stopping the tests | |
| -------------------------- | |
| If you want to interrupt the tests, the easiest way is: | |
| (1) hit ctrl-z on the controlling virtual console / terminal | |
| (2) run "ps", with no arguments | |
| (3) run "kill -9 [PID]", where [PID] is the process id of | |
| "test" | |
| 4.3 Examining the logs | |
| -------------------------- | |
| In progress logs are written to test_out. After each test completes, | |
| it's output (from test_out), among other things is appended to test_log | |
| To check if any tests failed, type: | |
| grep failed test_log > /dev/null && echo FAILED || echo PASSED | |
| If some tests failed, check the logs to see what the problem is. You | |
| may have set up the regression tests incorrectly. | |
| 4.4 Sending bug reports | |
| --------------------------- | |
| If you think it's a bug (or you're not sure), email us! | |
| bug-parted@gnu.org | |
| Please attach the test_log. Gzip it first ;) | |
| ------------------------------------------------------------------------------ | |
| 5 HOW THE TESTS WORK | |
| ------------------------------------------------------------------------------ | |
| Parted has regression tests for all partition table formats, and for | |
| the ext2, fat and linuxswap. The partition table tests are mainly | |
| "Create problem X and test that parted complains about it". It | |
| doesn't compare output... only if parted reports error, and that it | |
| doesn't segfault. | |
| The file system tests are mainly "do some operation on the | |
| file system, and check it's still got the same data", via diff(1). | |
| Also, it runs dosfsck(1) and e2fsck(1). | |