| module-init-tools coding standards |
| ---------------------------------- |
| |
| Patches to module-init-tools are welcome. Please note the following |
| design goals: |
| |
| 1) insmod and rmmod are designed to be as simple as possible. |
| |
| 2) modprobe is designed to be a swiss-army-knife, but the config file |
| format is designed to be as simple as possible: let the user create |
| complexity if they wish. Having said that, the "install" and "remove" |
| commands serve as examples of what we don't want to do in the future, |
| due to the problems they cause with identifying module dependencies. |
| |
| 3) module-init-tools contains a testsuite. Patches which do not pass |
| the testsuite get a frowny face. It's easy to run the testsuite, |
| as you can see below. Please do test patches before posting. |
| |
| The testsuite |
| ------------- |
| |
| The testsuite is under tests/test-*: one directory for each tool. To |
| run the testsuite, type the following from the top level directory: |
| |
| ./tests/runtests |
| |
| To start the tests at a particular test, use that test name on the |
| command line, eg. "./tests/runtests 26blacklist.sh". To see exactly |
| what the test is doing, use -vv, eg |
| |
| ./tests/runtests -vv 26blacklist.sh |
| |
| To only test a given endianess or bitness, use |
| |
| TEST_ENDIAN=32 TEST_BITS=le ./tests/runtests |
| |
| Each test is a shell script run with "-e": ie. if any command fails, |
| the test will fail. The path is set up with special test versions of |
| the utilities (and possibly valgrind wrappers), so just invoke |
| "modprobe" etc. as normal. Environment variables can be used to |
| control normally hardwired behaviour: |
| |
| 1) $MODTEST_UNAME: |
| The result "uname" is to return. Set to 2.6.27 by default. |
| |
| 2) $MODTEST_OVERRIDE<n>, $MODTEST_OVERRIDE_WITH<n> |
| These cause file operations on $MODTEST_OVERRIDE1 to occur on |
| $MODTEST_OVERRIDE_WITH1, etc. The numbers must be consecutive: |
| the code stops searching for a replacement when a number is not |
| found. This is used to stop the utilities looking in |
| /lib/modules/2.6.27/ for example. |
| |
| Other environment variables can be found in testing.h. |
| |
| There are various pre-compiled test modules under tests/data/. Each |
| one has big and little endian and 32 and 64-bit variants: modprobe |
| must handle both 32 and 64 bit (for x86-64, PPC64, Sparc64, IA64), and |
| depmod and modinfo must handle any endianness as well. If you need to |
| add a new module to test something, put the source under tests/src, |
| make sure it passes for the cases you can test, and I'll compile and |
| test the others. |
| |
| When writing tests, make sure your test aborts on any unexpected |
| behaviour: eg. compare the result is equal to what you expect, rather |
| than not equal to something. |
| |
| Cheers! |
| Rusty and Jon. |