| ============================================================================== |
| 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). |
| |