Correct src location for kernel ATF tests

Julio Merino julio at meroh.net
Tue Jan 14 19:12:43 UTC 2014


On Jan 13, 2014, at 22:25, Alan Somers <asomers at freebsd.org> wrote:

> Where is the correct location within the source tree for ATF tests
> that exercise kernel features?  For example, I'm currently trying to
> ATFify tools/regression/sockets/unix_seqpacket_exercise,

I think it's good practice to _not_ ATFify an existing test at the same time as it's moved.

I feel it's better to first move the test program "as is" into its new location, ensure it works, and only then change it to use the ATF libraries.  If done properly (e.g. by maintaining the same binary name pre/post conversion), this should cause minimum churn and will allow for easier tracking of code changes in the VCS history.

> but I'm not sure where to put it.

Ideally tests should live next to the code they exercise, just as we are doing for user-space applications.  This means that, at the very minimum, they should be somewhere within src/sys/.

Now that's tricky of course.  Some thoughts that cross my mind:

First, I'm not sure about what the implications of putting "user-level" code in src/sys/ are regarding the build infrastructure.  I suspect that by restricting the test code into 'tests' subdirectories and only recursing into them with the MK_TESTS knob is good enough, but I don't know for sure at the moment.

Second, possibly trickier, is that any kernel tests that currently exist are integration tests by design: we have no unit-testing framework for the kernel (such as what rump provides for NetBSD), and as such any test will be quite "broad" in scope.  This may make it difficult to pinpoint the specific subdirectory in which the test belongs.  For your case above, I cannot tell if any of the src/sys/net*/ subdirectories are relevant and/or specific enough.  If they are, then I'd say put the test in one of them using src/sys/netgraph/tests/unix_seqpacket_exercise to pick an example at random.

Lastly, we may need a src/sys/tests/ directory to implement cross-functional tests that don't fit any specific directory, just like we have src/tests/ for that purpose.  Or maybe we can (ab)use the latter instead.


More information about the freebsd-testing mailing list