How do I extend Kyua requirements checking for FreeBSD?
Garrett Cooper
yaneurabeya at gmail.com
Fri Jun 27 00:00:11 UTC 2014
On Thu, Jun 26, 2014 at 12:54 PM, Garrett Cooper <yaneurabeya at gmail.com> wrote:
> On Thu, Jun 26, 2014 at 12:39 PM, Alan Somers <asomers at freebsd.org> wrote:
>> On Thu, Jun 26, 2014 at 1:05 PM, Garrett Cooper <yaneurabeya at gmail.com> wrote:
>>> Hello Julio!
>>> I'm looking at extending Kyua to create special FreeBSD-specific
>>> functionality, and I'm wondering how I should do it. In particular
>>> there are a couple items that could be checked as prerequisite
>>> requirements before running tests to avoid running tests:
>>> 1. Is a service running?
>>> 2. Is a driver loaded?
>>> 3. Is a driver loaded as a kernel module or is it statically
>>> compiled in to the kernel?
>>> 4. Am I running on a particular filesystem?
>>> Etc.
>>> If I was to add these "requirements functions" to kyua, how would
>>> I query the values in an interface agnostic way? I would usually set
>>> environment variables, but this makes things potentially messier
>>> (especially in C/C++ unless I create a standalone library to handle
>>> this)/harder to grep for than having a command which fetches this
>>> information, like atf-config does for the ATF tester interface.
>>> Thank you!
>>> -Garrett
>>
>> I did it just be creating a library of shell functions that I call
>> from test bodies. For example, something like this
>> function require_module() {
>> kldstat $1 || atf_skip "Module $1 is not loaded"
>> }
>
> This is sort of what I'm doing, but this only works for the ATF test
> interface :/. I used kldstat -m $1 by the way for detecting statically
> compiled kernel modules, like aio:
>
> # kldstat -q -m ada && echo ada is loaded
> ada is loaded
> # kldstat -q -m foobar && echo foobar is loaded
> #
>
> It's significantly trickier with drivers that don't have moduledata_t
> which matches the kernel module that's loaded, e.g. if_em:
>
> # kldstat -m pci/em
> Id Refs Name
> 117 1 pci/em
> # ifconfig em0
> em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
> options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
> ether 00:0c:29:a3:e9:9c
> inet 10.7.216.233 netmask 0xfffffe00 broadcast 10.7.217.255
> nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
> media: Ethernet autoselect (1000baseT <full-duplex>)
> status: active
> # kldload if_em
> kldload: can't load if_em: module already loaded or in kernel
>
>> But that's not useful for C and C++ tests. And it would be way cooler
>> if it were more tightly integrated into Kyua. Would it be possible to
>> load site-specific Lua code that would handle this sort of
>> functionality, so the test could simply say "atf_set require.modules
>> aio"?
>
> Exactly!
>
> I'm going to write the C/shell libraries for ATF at least, add some
> testcases, then we can look at making them generic via Kyuafile/the
> testcase header/etc.
I'm started work on it on github:
https://github.com/yaneurabeya/freebsd_atf_kyua_test_extensions . Any
review would be much appreciated!
Testcases coming soon of course.
Thanks!
-Garrett
More information about the freebsd-testing
mailing list