xref: /freebsd/contrib/kyua/NEWS.md (revision cab6a39d7b343596a5823e65c0f7b426551ec22d)
1Major changes between releases
2==============================
3
4
5Changes in version 0.14
6-----------------------
7
8**NOT RELEASED YET; STILL UNDER DEVELOPMENT.**
9
10* Explicitly require C++11 language features when compiling Kyua.
11
12
13Changes in version 0.13
14-----------------------
15
16**Released on August 26th, 2016.**
17
18* Fixed execution of test cases as an unprivileged user, at least under
19  NetBSD 7.0.  Kyua-level failures were probably a regression introduced
20  in Kyua 0.12, but the underlying may have existed for much longer:
21  test cases might have previously failed for mysterious reasons when
22  running under an unprivileged user.
23
24* Issue #134: Fixed metadata test broken on 32-bit platforms.
25
26* Issue #139: Added per-test case start/end timestamps to all reports.
27
28* Issue #156: Fixed crashes due to the invalid handling of cleanup
29  routine data and triggered by the reuse of PIDs in long-running Kyua
30  instances.
31
32* Issue #159: Fixed TAP parser to ignore case while matching `TODO` and
33  `SKIP` directives, and to also recognize `Skipped`.
34
35* Fixed potential crash due to a race condition in the unprogramming of
36  timers to control test deadlines.
37
38
39Changes in version 0.12
40-----------------------
41
42**Released on November 22nd, 2015.**
43
44This is a huge release and marks a major milestone for Kyua as it finally
45implements a long-standing feature request: the ability to execute test
46cases in parallel.  This is a big deal because test cases are rarely
47CPU-bound: running them in parallel yields much faster execution times for
48large test suites, allowing faster iteration of changes during development.
49
50As an example: the FreeBSD test suite as of this date contains 3285 test
51cases.  With sequential execution, a full test suite run takes around 12
52minutes to complete, whereas on a 4-core machine with a high level of
53parallelism it takes a little over 1 minute.
54
55Implementing parallel execution required rewriting most of Kyua's core and
56partly explains explains why there has not been a new release for over a
57year.  The current implementation is purely subprocess-based, which works
58but has some limitations and has resulted in a core that is really complex
59and difficult to understand.  Future versions will investigate the use of
60threads instead for a simplified programming model and additional
61parallelization possibilities.
62
63* Issue #2: Implemented support to execute test cases in parallel when
64  invoking `kyua test`.  Parallel execution is *only* enabled when the new
65  `parallelism` configuration variable is set to a value greater than `1`.
66  The default behavior is still to run tests sequentially because some test
67  suites contain test cases with side-effects that might fail when run in
68  parallel.  To resolve this, the new metadata property `is_exclusive` can
69  be set to `true` on a test basis to indicate that the test must be run on
70  its own.
71
72* Known regression: Running `kyua debug` on a TAP-based test program does
73  not currently report the output in real time.  The output will only be
74  displayed once the test program completes.  This is a shortcoming of
75  the new parallel execution engine and will be resolved.
76
77* Removed the external C-based testers code in favor of the new built-in
78  implementations.  The new approach feels significantly faster than the
79  previous one.
80
81* Fixed the handling of relative paths in the `fs.*` functions available
82  in `Kyuafile`s.  All paths are now resolved relative to the location of
83  the caller `Kyuafile`.  `Kyuafile.top` has been updated with these
84  changes and you should update custom copies of this file with the new
85  version.
86
87* Changed temporary directory creation to always grant search
88  permissions on temporary directories.  This is to prevent potential
89  problems when running Kyua as root and executing test cases that require
90  dropping privileges (as they may later be unable to use absolute paths
91  that point inside their work directory).
92
93* The cleanup of work directories does not longer attempt to deal with
94  mount points.  If a test case mounts a file system and forgets to unmount
95  it, the mount point will be left behind.  It is now the responsibility of
96  the test case to clean after itself.  The reasons for this change are
97  simplicity and clarity: there are many more things that a test case can
98  do that have side-effects on the system and Kyua cannot protect against
99  them all, so it is better to just have the test undo anything it might
100  have done.
101
102* Improved `kyua report --verbose` to properly handle environment
103  variables with continuation lines in them, and fixed the integration
104  tests for this command to avoid false negatives.
105
106* Changed the configuration file format to accept the definition of
107  unknown variables without declaring them local.  The syntax version
108  number remains at 2.  This is to allow configuration files for newer Kyua
109  versions to work on older Kyua versions, as there is no reason to forbid
110  this.
111
112* Fixed stacktrace gathering with FreeBSD's ancient version of GDB.
113  GDB 6.1.1 (circa 2004) does not have the `-ex` flag so we need to
114  generate a temporary GDB script and feed it to GDB with `-x` instead.
115
116* Issue #136: Fixed the XML escaping in the JUnit output so that
117  non-printable characters are properly handled when they appear in the
118  process's stdout or stderr.
119
120* Issue #141: Improved reporting of errors triggered by sqlite3.  In
121  particular, all error messages are now tagged with their corresponding
122  database filename and, if they are API-level errors, the name of the
123  sqlite3 function that caused them.
124
125* Issue #144: Improved documentation on the support for custom properties
126  in the test metadata.
127
128* Converted the `INSTALL`, `NEWS`, and `README` distribution documents to
129  Markdown for better formatting online.
130
131
132Changes in version 0.11
133-----------------------
134
135**Released on October 23rd, 2014.**
136
137* Added support to print the details of all test cases (metadata and
138  their output) to `report`.  This is via a new `--verbose` flag which
139  replaces the previous `--show-context`.
140
141* Added support to specify the amount of physical disk space required
142  by a test case.  This is in the form of a new `required_disk_space`
143  metadata property, which can also be provided by ATF test cases as
144  `require.diskspace`.
145
146* Assimilated the contents of all the `kyua-*-tester(1)` and
147  `kyua-*-interface(7)` manual pages into more relevant places.  In
148  particular, added more details on test program registration and their
149  metadata to `kyuafile(5)`, and added `kyua-test-isolation(7)`
150  describing the isolation features of the test execution.
151
152* Assimilated the contents of all auxiliary manual pages, including
153  `kyua-build-root(7)`, `kyua-results-files(7)`, `kyua-test-filters(7)`
154  and `kyua-test-isolation(7)`, into the relevant command-specific
155  manual pages.  This is for easier discoverability of relevant
156  information when reading how specific Kyua commands work.
157
158* Issue #30: Plumbed through support to query configuration variables
159  from ATF's test case heads.  This resolves the confusing situation
160  where test cases could only do this from their body and cleanup
161  routines.
162
163* Issue #49: Extended `report` to support test case filters as
164  command-line arguments.  Combined with `--verbose`, this allows
165  inspecting the details of a test case failure after execution.
166
167* Issue #55: Deprecated support for specifying `test_suite` overrides on
168  a test program basis.  This idiom should not be used but support for
169  it remains in place.
170
171* Issue #72: Added caching support to the `getcwd(3)` test in configure
172  so that the result can be overriden for cross-compilation purposes.
173
174* Issue #83: Changed manual page headings to include a `kyua` prefix in
175  their name.  This prevents some possible confusion when displaying,
176  for example, the `kyua-test` manual page with a plain name of `test`.
177
178* Issue #84: Started passing test-suite configuration variables to plain
179  and TAP test programs via the environment.  The name of the
180  environment variables set this way is prefixed by `TEST_ENV_`, so a
181  configuration variable of the form
182  `test_suites.some_name.allow_unsafe_ops=yes` in `kyua.conf` becomes
183  `TEST_ENV_allow_unsafe_ops=YES` in the environment.
184
185* Issues #97 and #116: Fixed the build on Illumos.
186
187* Issue #102: Set `TMPDIR` to the test case's work directory when running
188  the test case.  If the test case happens to use the `mktemp(3)` family
189  of functions (due to misunderstandings on how Kyua works or due to
190  the reuse of legacy test code), we don't want it to easily escape the
191  automanaged work directory.
192
193* Issue #103: Started being more liberal in the parsing of TAP test
194  results by treating the number in `ok` and `not ok` lines as optional.
195
196* Issue #105: Started using tmpfs instead of md as a temporary file
197  system for tests in FreeBSD so that we do not leak `md(4)` devices.
198
199* Issue #109: Changed the privilege dropping code to start properly
200  dropping group privileges when `unprivileged_user` is set.  Also fixes
201  `testers/run_test:fork_wait__unprivileged_group`.
202
203* Issue #110: Changed `help` to display version information and clarified
204  the purpose of the `about` command in its documentation.
205
206* Issue #111: Fixed crash when defining a test program in a `Kyuafile`
207  that has not yet specified the test suite name.
208
209* Issue #114: Improved the `kyuafile(5)` manual page by clarifying the
210  restrictions of the `include()` directive and by adding abundant
211  examples.
212
213
214Changes in version 0.10
215-----------------------
216
217**Experimental version released on August 14th, 2014.**
218
219* Merged `kyua-cli` and `kyua-testers` into a single `kyua` package.
220
221* Dropped the `kyua-atf-compat` package.
222
223* Issue #100: Do not try to drop privileges to `unprivileged_user` when we
224  are already running as an unprivileged user.  Doing so is not possible
225  and thus causes spurious test failures when the current user is not
226  root and the current user and `unprivileged_user` do not match.
227
228* Issue #79: Mention `kyua.conf(5)` in the *See also* section of `kyua(1)`.
229
230* Issue #75: Change the `rewrite__expected_signal__bad_arg` test in
231  `testers/atf_result_test` to use a different signal value.  This is to
232  prevent triggering a core dump that made the test fail in some platforms.
233
234
235Changes in kyua-cli version 0.9
236-------------------------------
237
238**Experimental version released on August 8th, 2014.**
239
240Major changes:
241
242The internal architecture of Kyua to record the results of test suite
243runs has completely changed in this release.  Kyua no longer stores all
244the different test suite run results as different "actions" within the
245single `store.db` database.  Instead, Kyua now generates a separate
246results file inside `~/.kyua/store/` for every test suite run.
247
248Due to the complexity involved in the migration process and the little
249need for it, this is probably going to be the only release where the
250`db-migrate` command is able to convert an old `store.db` file to the
251new scheme.
252
253Changes in more detail:
254
255* Added the `report-junit` command to generate JUnit XML result files.
256  The output has been verified to work within Jenkins.
257
258* Switched to results files specific to their corresponding test suite
259  run.  The unified `store.db` file is now gone: `kyua test` creates a
260  new results file for every invocation under `~/.kyua/store/` and the
261  `kyua report*` commands are able to locate the latest file for a
262  corresponding test suite automatically.
263
264* The `db-migrate` command takes an old `store.db` file and generates
265  one results file for every previously-recorded action, later deleting
266  the `store.db` file.
267
268* The `--action` flag has been removed from all commands that accepted
269  it.  This has been superseded by the tests results files.
270
271* The `--store` flag that many commands took has been renamed to
272  `--results-file` in line with the semantical changes.
273
274* The `db-exec` command no longer creates an empty database when none
275  is found.  This command is now intended to run only over existing
276  files.
277
278
279Changes in kyua-testers version 0.3
280-----------------------------------
281
282**Experimental version released on August 8th, 2014.**
283
284* Made the testers set a "sanitized" value for the `HOME` environment
285  variable where, for example, consecutive and trailing slashes have
286  been cleared.  Mac OS X has a tendency to append a trailing slash to
287  the value of `TMPDIR`, which can cause third-party tests to fail if
288  they compare `${HOME}` with `$(pwd)`.
289
290* Issues #85, #86, #90 and #92: Made the TAP parser more complete: mark
291  test cases reported as `TODO` or `SKIP` as passed; handle skip plans;
292  ignore lines that look like `ok` and `not ok` but aren't results; and
293  handle test programs that report a pass but exit with a non-zero code.
294
295
296Changes in kyua-cli version 0.8
297-------------------------------
298
299**Experimental version released on December 7th, 2013.**
300
301* Added support for Lutok 0.4.
302
303* Issue #24: Plug the bootstrap tests back into the test suite.  Fixes
304  in `kyua-testers` 0.2 to isolate test cases into their own sessions
305  should allow these to run fine.
306
307* Issue #74: Changed the `kyuafile(5)` parser to automatically discover
308  existing tester interfaces.  The various `*_test_program()` functions
309  will now exist (or not) based on tester availability, which simplifies
310  the addition of new testers or the selective installation of them.
311
312
313Changes in kyua-testers version 0.2
314-----------------------------------
315
316**Experimental version released on December 7th, 2013.**
317
318* Issue #74: Added the `kyua-tap-tester`, a new backend to interact with
319  test programs that comply with the Test Anything Protocol.
320
321* Issue #69: Cope with the lack of `AM_PROG_AR` in `configure.ac`, which
322  first appeared in Automake 1.11.2.  Fixes a problem in Ubuntu 10.04
323  LTS, which appears stuck in 1.11.1.
324
325* Issue #24: Improve test case isolation by confining the tests to their
326  own session instead of just to their own process group.
327
328
329Changes in kyua-cli version 0.7
330-------------------------------
331
332**Experimental version released on October 18th, 2013.**
333
334* Made failures from testers more resilent.  If a tester fails, the
335  corresponding test case will be marked as broken instead of causing
336  kyua to exit.
337
338* Added the `--results-filter` option to the `report-html` command and
339  set its default value to skip passed results from HTML reports.  This
340  is to keep these reports more succint and to avoid generating tons of
341  detail files that will be, in general, useless.
342
343* Switched to use Lutok 0.3 to gain compatibility with Lua 5.2.
344
345* Issue #69: Cope with the lack of `AM_PROG_AR` in `configure.ac`, which
346  first appeared in Automake 1.11.2.  Fixes a problem in Ubuntu 10.04
347  LTS, which appears stuck in 1.11.1.
348
349
350Changes in kyua-cli version 0.6
351-------------------------------
352
353**Experimental version released on February 22nd, 2013.**
354
355* Issue #36: Changed `kyua help` to not fail when the configuration file
356  is bogus.  Help should always work.
357
358* Issue #37: Simplified the `syntax()` calls in configuration and
359  `Kyuafile` files to only specify the requested version instead of also
360  the format name.  The format name is implied by the file being loaded, so
361  there is no use in the caller having to specify it.  The version number
362  of these file formats has been bumped to 2.
363
364* Issue #39: Added per-test-case metadata values to the HTML reports.
365
366* Issue #40: Rewrote the documentation as manual pages and removed the
367  previous GNU Info document.
368
369* Issue #47: Started using the independent testers in the `kyua-testers`
370  package to run the test cases.  Kyua does not implement the logic to
371  invoke test cases any more, which provides for better modularity,
372  extensibility and robustness.
373
374* Issue #57: Added support to specify arbitrary metadata properties for
375  test programs right from the `Kyuafile`.  This is to make plain test
376  programs more versatile, by allowing them to specify any of the
377  requirements (allowed architectures, required files, etc.) supported
378  by Kyua.
379
380* Reduced automatic screen line wrapping of messages to the `help`
381  command and the output of tables by `db-exec`.  Wrapping any other
382  messages (specially anything going to stderr) was very annoying
383  because it prevented natural copy/pasting of text.
384
385* Increased the granularity of the error codes returned by `kyua(1)` to
386  denote different error conditions.  This avoids the overload of `1` to
387  indicate both "expected" errors from specific subcommands and
388  unexpected errors caused by the internals of the code.  The manual now
389  correctly explain how the exit codes behave on a command basis.
390
391* Optimized the database schema to make report generation almost
392  instantaneous.
393
394* Bumped the database schema to 2.  The database now records the
395  metadata of both test programs and test cases generically, without
396  knowledge of their interface.
397
398* Added the `db-migrate` command to provide a mechanism to upgrade a
399  database with an old schema to the current schema.
400
401* Removed the GDB build-time configuration variable.  This is now part
402  of the `kyua-testers` package.
403
404* Issue #31: Rewrote the `Kyuafile` parsing code in C++, which results in
405  a much simpler implementation.  As a side-effect, this gets rid of the
406  external Lua files required by `kyua`, which in turn make the tool
407  self-contained.
408
409* Added caching of various configure test results (particularly in those
410  tests that need to execute a test program) so that cross-compilers can
411  predefine the results of the tests without having to run the
412  executables.
413
414
415Changes in kyua-testers version 0.1
416-----------------------------------
417
418**Experimental version released on February 19th, 2013.**
419
420This is the first public release of the `kyua-testers` package.
421
422The goal of this first release is to adopt all the test case execution
423code of `kyua-cli` 0.5 and ship it as a collection of independent tester
424binaries.  The `kyua-cli` package will rely on these binaries to run the
425tests, which provides better modularity and simplicity to the
426architecture of Kyua.
427
428The code in this package is all C as opposed to the current C++ codebase
429of `kyua-cli`, which means that the overall build times of Kyua are now
430reduced.
431
432
433Changes in kyua-cli version 0.5
434-------------------------------
435
436**Experimental version released on July 10th, 2012.**
437
438* Issue #15: Added automatic stacktrace gathering of crashing test cases.
439  This relies on GDB and is a best-effort operation.
440
441* Issue #32: Added the `--build-root` option to the debug, list and test
442  commands.  This allows executing test programs from a different
443  directory than where the `Kyuafile` scripts live.  See the *Build roots*
444  section in the manual for more details.
445
446* Issue #33: Removed the `kyuaify.sh` script.  This has been renamed to
447  atf2kyua and moved to the `kyua-atf-compat` module, where it ships as a
448  first-class utility (with a manual page and tests).
449
450* Issue #34: Changed the HTML reports to include the stdout and stderr of
451  every test case.
452
453* Fixed the build when using a "build directory" and a clean source tree
454  from the repository.
455
456
457Changes in kyua-cli version 0.4
458-------------------------------
459
460**Experimental version released on June 6th, 2012.**
461
462* Added the `report-html` command to generate HTML reports of the
463  execution of any recorded action.
464
465* Changed the `--output` flag of the `report` command to only take a
466  path to the target file, not its format.  Different formats are better
467  supported by implementing different subcommands, as the options they
468  may receive will vary from format to format.
469
470* Added a `--with-atf` flag to the configure script to control whether
471  the ATF tests get built or not.  May be useful for packaging systems
472  that do not have ATF in them yet.  Disabling ATF also cuts down the
473  build time of Kyua significantly, but with the obvious drawbacks.
474
475* Grouped `kyua` subcommands by topic both in the output of `help` and
476  in the documentation.  In general, the user needs to be aware of
477  commands that rely on a current project and those commands that rely
478  purely on the database to generate reports.
479
480* Made `help` print the descriptions of options and commands properly
481  tabulated.
482
483* Changed most informational messages to automatically wrap on screen
484  boundaries.
485
486* Rewrote the configuration file parsing module for extensibility.  This
487  will allow future versions of Kyua to provide additional user-facing
488  options in the configuration file.
489
490  No syntax changes have been made, so existing configuration files
491  (version 1) will continue to be parsed without problems.  There is one
492  little exception though: all variables under the top-level
493  `test_suites` tree must be declared as strings.
494
495  Similarly, the `-v` and `--variable` flags to the command line must
496  now carry a `test_suites.` prefix when referencing any variables under
497  such tree.
498
499
500Changes in kyua-cli version 0.3
501-------------------------------
502
503**Experimental version released on February 24th, 2012.**
504
505* Made the `test` command record the results of the executed test
506  cases into a SQLite database.  As a side effect, `test` now supports a
507  `--store` option to indicate where the database lives.
508
509* Added the `report` command to generate plain-text reports of the
510  test results stored in the database.  The interface of this command is
511  certainly subject to change at this point.
512
513* Added the `db-exec` command to directly interact with the store
514  database.
515
516* Issue #28: Added support for the `require.memory` test case property
517  introduced in ATF 0.15.
518
519* Renamed the user-specific configuration file from `~/.kyuarc` to
520  `~/.kyua/kyua.conf` for consistency with other files stored in the
521  `~/.kyua/` subdirectory.
522
523* Switched to use Lutok instead of our own wrappers over the Lua C
524  library.  Lutok is just what used to be our own utils::lua module, but
525  is now distributed separately.
526
527* Removed the `Atffile`s from the source tree.  Kyua is stable enough
528  to generate trustworthy reports, and we do not want to give the
529  impression that atf-run / atf-report are still supported.
530
531* Enabled logging to stderr for our own test programs.  This makes it
532  slightly easier to debug problems in our own code when we get a
533  failing test.
534
535
536Changes in kyua-cli version 0.2
537-------------------------------
538
539**Experimental version released on August 24th, 2011.**
540
541The biggest change in this release is the ability for Kyua to run test
542programs implemented using different frameworks.  What this means is
543that, now, a Kyua test suite can include not only ATF-based test
544programs, but also "legacy" (aka plain) test programs that do not use
545any framework.  I.e. if you have tests that are simple programs that
546exit with 0 on success and 1 on failure, you can plug them in into a
547Kyua test suite.
548
549Other than this, there have been several user-visible changes.  The most
550important are the addition of the new `config` and `debug` subcommands
551to the `kyua` binary.  The former can be used to inspect the runtime
552configuration of Kyua after parsing, and the latter is useful to
553interact with failing tests cases in order to get more data about the
554failure itself.
555
556Without further ado, here comes the itemized list of changes:
557
558* Generalized the run-time engine to support executing test programs
559  that implement different interfaces.  Test programs that use the ATF
560  libraries are just a special case of this.  (Issue #18.)
561
562* Added support to the engine to run `plain` test programs: i.e. test
563  programs that do not use any framework and report their pass/fail
564  status as an exit code.  This is to simplify the integration of legacy
565  test programs into a test suite, and also to demonstrate that the
566  run-time engine is generic enough to support different test
567  interfaces.  (Issue #18.)
568
569* Added the `debug` subcommand.  This command allows end users to tweak
570  the execution of a specific test case and to poke into the behavior of
571  its execution.  At the moment, all this command allows is to view the
572  stdout and stderr of the command in real time (which the `test`
573  command currently completely hides).
574
575* Added the `config` subcommand.  This command allows the end user to
576  inspect the current configuration variables after evaluation, without
577  having to read through configuration files.  (Issue #11.)
578
579* Removed the `test_suites_var` function from configuration files.  This
580  was used to set the value of test-suite-sepecific variables, but it
581  was ugly-looking.  It is now possible to use the more natural syntax
582  `test_suites.<test-suite-name>.<variable> = <value>`.  (Issue #11.)
583
584* Added a mechanism to disable the loading of configuration files
585  altogether.  Needed for testing purposes and for scriptability.
586  Available by passing the `--config=none` flag.
587
588* Enabled detection of unused parameters and variables in the code and
589  fixed all warnings.  (Issue #23.)
590
591* Changed the behavior of "developer mode".  Compiler warnings are now
592  enabled unconditionally regardless of whether we are in developer mode
593  or not; developer mode is now only used to perform strict warning
594  checks and to enable assertions.  Additionally, developer mode is now
595  only automatically enabled when building from the repository, not for
596  formal releases.  (Issue #22.)
597
598* Fixed many build and portability problems to Debian sid with GCC 4.6.3
599  and Ubuntu 10.04.1 LTS.  (Issues #20, #21, #26.)
600
601
602Changes in kyua-cli version 0.1
603-------------------------------
604
605**Experimental version released on June 23rd, 2011.**
606
607This is the first public release of the `kyua-cli` package.
608
609The scope of this release is to provide functional replacement for the
610`atf-run` utility included in the atf package.  At this point, `kyua`
611can reliably run the NetBSD 5.99.53 test suite delivering the same
612results as `atf-run`.
613
614The reporting facilities of this release are quite limited.  There is
615no replacement for `atf-report` yet, and there is no easy way of
616debugging failing test programs other than running them by hand.  These
617features will mark future milestones and therefore be part of other
618releases.
619
620Be aware that this release has suffered very limited field testing.
621The test suite for `kyua-cli` is quite comprehensive, but some bugs may
622be left in any place.
623