Date: Thu, 23 Jan 2014 19:38:26 -0800 From: Garrett Cooper <yaneurabeya@gmail.com> To: Julio Merino <julio@meroh.net> Cc: freebsd-testing@FreeBSD.org, Jilles Tjoelker <jilles@stack.nl> Subject: Re: [PATCH] convert /bin/sh tests over to ATF Message-ID: <2F20BCCB-1464-495B-B08A-B2C538B27D18@gmail.com> In-Reply-To: <2222060C-CA92-41E5-9B10-9EA075A2B96B@meroh.net> References: <B5290C1B-F262-479C-8D4F-A5D8B3CE5A52@gmail.com> <2222060C-CA92-41E5-9B10-9EA075A2B96B@meroh.net>
next in thread | previous in thread | raw e-mail | index | archive | help
On Jan 22, 2014, at 3:36 PM, Julio Merino <julio@meroh.net> wrote: > On Jan 20, 2014, at 11:44, Garrett Cooper <yaneurabeya@gmail.com> = wrote: >=20 >> The attached patch converts the /bin/sh tests using the existing = framework bin/sh/tests. >> All of the tests pass except locale.0, and that=92s due to some = [currently] unknown issue with my environment =97 see misc/181151). I = could make some of the entries more permanent, but I was trying to make = the tests easier to backport by using shell globs. >> Also, I added some functionality so the tests expect failures on = certain versions of FreeBSD due to missing functionality or conformance = modifications (see the .valid_osreldate files). >> Thoughts? Comments? >> Thanks! >> -Garrett<convert-bin-sh-over-to-atf.patch> >=20 > Pasted your diff inline for easier commenting but trimmed stuff. =85 > KYUAFILE=3Dauto is the default; remove here and anywhere else. Fixed =97 thanks :)! >> +SH_TESTS_FILES!=3D cd ${.CURDIR} && find . \( -type f -and \! -name = Makefile\* \) | \ >> + sed -e 's,^\./,,g' >=20 > This won't work well if you don't use an OBJDIR, will it? Yeah, it probably wouldn=92t work too well with ${SH_TESTS} being = defined the way it is. I overlooked the point when I last updated things = by continuing to use that variable... >> + >> +TESTSDIR=3D ${TESTSBASE}/bin/sh/${.CURDIR:T} >> + >> +FILES+=3D ${SH_TESTS_FILES} >> +FILESDIR=3D ${TESTSDIR} >> + >> +regress.sh: ../Makefile.inc ${SH_TESTS_FILES} >> + @echo '' > ${.TARGET} >=20 > Don't write directly to ${.TARGET} if you have more than one command = doing so. Otherwise, if the target fails half-way through (or is = interrupted), a second invocation of make won't properly regenerate the = file. >=20 > You can either do: >=20 > @{ \ > echo ... \ > echo ... \ > ... \ > } >${.TARGET} >=20 > or create a .tmp file and move "atomically" to the target at the end. Good point. I=92d use the latter method (in this case) because it would = be too hairy/convoluted if I tried to use inline shell logic. ... > All this logic in a Makefile is too complex and should really not be = there. >=20 > Just create a simple shell script that defines test cases dynamically = based on the available files and install that instead. It's shell after = all, so you can define functions at run time with ease! The results = will be much easier to digest. >=20 > ---- >=20 > But now, on a more abstract level... >=20 > This approach does not fit the "model" of atf-sh -- nor the model of = most unit testing libraries for that matter. An individual test program = for every test case is overkill and keeping all these tiny files around = is suboptimal. The following page has more details on this and the = corresponding rationales: >=20 > https://wiki.freebsd.org/TestSuite/Structure >=20 > I recommend to not do this in this manner. Instead, what I'd do is = the following: >=20 > First, define one test program for every directory that currently = exists. This would leave you with builtins_test errors_test = execution_test expansion_test parameters_test parser_test set-e_test, = all in /usr/tests/bin/sh. There is no reason to put them in separate = subdirectories. >=20 > Second, make each of these top-level test programs "auto-discover" the = various data files in their corresponding subdirectories, define an = individual test case for each, and run them "as is". For example, = builtins_test would inspect srcdir/builtins/*.0, dynamically define an = atf_test_case, and run the test code from within it. >=20 > These two steps change the "glue code" to be atf and expose the = individual test cases to kyua with minimal changes to the existing code. >=20 > And third, separately once the above works, consider merging the = contents of the individual files into the main test program. I'm not = sure keeping tons of small files is worth it, but that's a separate = discussion once you have got the basic atf structure in place. >=20 > This is all very similar to what was done with the ipf tests in = NetBSD. You can take a look at them here: >=20 > = http://cvsweb.netbsd.org/bsdweb.cgi/src/tests/ipf/?only_with_tag=3DMAIN >=20 > (Before this was done, something similar to what you did above was = attempted by using awk to generate test programs... it was a nightmare = to maintain.) >=20 > Hope this helps and thanks for looking into this! All valuable input. I=92ll definitely think about it and apply your = comments appropriately :). Thanks! -Garrett=
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?2F20BCCB-1464-495B-B08A-B2C538B27D18>